diff options
author | Florian Apolloner <florian@apolloner.eu> | 2008-06-25 00:41:41 +0200 |
---|---|---|
committer | Florian Apolloner <florian@apolloner.eu> | 2008-06-25 00:43:07 +0200 |
commit | 990d1fe06e8c2db48a895aaa7e5e5eda8b330a5c (patch) | |
tree | a529af9a05481053a9286a346be7612fdee15df6 /lib/git/cmd.py | |
parent | 7fda0ec787de5159534ebc8b81824920d9613575 (diff) | |
download | gitpython-990d1fe06e8c2db48a895aaa7e5e5eda8b330a5c.tar.gz |
fixed http://groups.google.com/group/git-python/browse_thread/thread/b8f3580abf31f9db?hl=en# and passed Git a working_tree again (sort of).
Diffstat (limited to 'lib/git/cmd.py')
-rw-r--r-- | lib/git/cmd.py | 65 |
1 files changed, 5 insertions, 60 deletions
diff --git a/lib/git/cmd.py b/lib/git/cmd.py index 4cadeeb3..4fa22fd9 100644 --- a/lib/git/cmd.py +++ b/lib/git/cmd.py @@ -15,68 +15,13 @@ class Git(MethodMissingMixin): """ The Git class manages communication with the Git binary """ - def __init__(self, git_dir=None, bare_repo=False): + def __init__(self, git_dir): super(Git, self).__init__() - if git_dir: - self._location = os.path.abspath(git_dir) - else: - self._location = os.getcwd() - self._is_bare_repo = bare_repo - self.refresh() - - def refresh(self): - self._git_dir = None - self._is_in_repo = not not self.get_git_dir() - self._work_tree = None - self._cwd = self._git_dir - if self._git_dir and not self._is_bare_repo: - self._cwd = self.get_work_tree() - - def _is_git_dir(self, d): - """ This is taken from the git setup.c:is_git_directory - function.""" - - if os.path.isdir(d) and \ - os.path.isdir(os.path.join(d, 'objects')) and \ - os.path.isdir(os.path.join(d, 'refs')): - headref = os.path.join(d, 'HEAD') - return os.path.isfile(headref) or \ - (os.path.islink(headref) and - os.readlink(headref).startswith('refs')) - return False - - def get_git_dir(self): - if not self._git_dir: - self._git_dir = os.getenv('GIT_DIR') - if self._git_dir and self._is_git_dir(self._git_dir): - return self._git_dir - curpath = self._location - while curpath: - if self._is_git_dir(curpath): - self._git_dir = curpath - break - gitpath = os.path.join(curpath, '.git') - if self._is_git_dir(gitpath): - self._git_dir = gitpath - break - curpath, dummy = os.path.split(curpath) - if not dummy: - break - return self._git_dir - - def get_work_tree(self): - if self._is_bare_repo: - return None - if not self._work_tree: - self._work_tree = os.getenv('GIT_WORK_TREE') - if not self._work_tree or not os.path.isdir(self._work_tree): - self._work_tree = os.path.abspath( - os.path.join(self._git_dir, '..')) - return self._work_tree + self.git_dir = git_dir @property def get_dir(self): - return self._git_dir + return self.git_dir def execute(self, command, istream=None, @@ -118,10 +63,10 @@ class Git(MethodMissingMixin): print ' '.join(command) # Allow the user to have the command executed in their working dir. - if with_keep_cwd: + if with_keep_cwd or self.git_dir is None: cwd = os.getcwd() else: - cwd=self._cwd + cwd=self.git_dir # Start the process proc = subprocess.Popen(command, |