summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2014-11-19 11:10:39 +0100
committerSebastian Thiel <byronimo@gmail.com>2014-11-19 11:10:39 +0100
commit22c4671b58a6289667f7ec132bc5251672411150 (patch)
tree323e062bd2f7abc294ac3cd047fe51dea0dc7245
parent6fc9e6150957ff5e011142ec5e9f8522168602ec (diff)
parent53b65e074e4d62ea5d0251b37c35fd055e403110 (diff)
downloadgitpython-22c4671b58a6289667f7ec132bc5251672411150.tar.gz
Merge branch 'separate-git-dir' of https://github.com/niyaton/GitPython into niyaton-separate-git-dir
Conflicts: git/repo/base.py
-rw-r--r--git/repo/base.py9
-rw-r--r--git/repo/fun.py11
2 files changed, 18 insertions, 2 deletions
diff --git a/git/repo/base.py b/git/repo/base.py
index a5bbaa64..a111d643 100644
--- a/git/repo/base.py
+++ b/git/repo/base.py
@@ -36,7 +36,8 @@ from fun import (
is_git_dir,
find_git_dir,
touch
- )
+ read_gitfile,
+ )
import os
import sys
@@ -52,7 +53,6 @@ __all__ = ('Repo', )
class Repo(object):
-
"""Represents a git repository and allows you to query references,
gather commit information, generate diffs, create and clone repositories query
the log.
@@ -117,6 +117,11 @@ class Repo(object):
self.git_dir = gitpath
self._working_tree_dir = curpath
break
+ gitpath = read_gitfile(gitpath)
+ if gitpath:
+ self.git_dir = gitpath
+ self._working_tree_dir = curpath
+ break
curpath, dummy = os.path.split(curpath)
if not dummy:
break
diff --git a/git/repo/fun.py b/git/repo/fun.py
index 9dfc00ea..f5abc27a 100644
--- a/git/repo/fun.py
+++ b/git/repo/fun.py
@@ -45,6 +45,17 @@ def find_git_dir(d):
return find_git_dir(d)
return None
+def read_gitfile(f):
+ """ This is taken from the git setup.c:read_gitfile function.
+ :return gitdir path or None if gitfile is invalid."""
+
+ if not isfile(f):
+ return None
+ line = open(f, 'r').readline().rstrip()
+ if line[0:8] != 'gitdir: ':
+ return None
+ path = os.path.realpath(line[8:])
+ return path if is_git_dir(path) else None
def short_to_long(odb, hexsha):
""":return: long hexadecimal sha1 from the given less-than-40 byte hexsha