summaryrefslogtreecommitdiff
path: root/git/repo/fun.py
diff options
context:
space:
mode:
Diffstat (limited to 'git/repo/fun.py')
-rw-r--r--git/repo/fun.py29
1 files changed, 9 insertions, 20 deletions
diff --git a/git/repo/fun.py b/git/repo/fun.py
index f8342260..a0dc5ce9 100644
--- a/git/repo/fun.py
+++ b/git/repo/fun.py
@@ -19,8 +19,8 @@ from gitdb.util import (
from git.compat import xrange
-__all__ = ('rev_parse', 'is_git_dir', 'touch', 'read_gitfile', 'find_git_dir', 'name_to_object',
- 'short_to_long', 'deref_tag', 'to_commit')
+__all__ = ('rev_parse', 'is_git_dir', 'touch', 'find_git_dir', 'name_to_object', 'short_to_long', 'deref_tag',
+ 'to_commit')
def touch(filename):
@@ -44,32 +44,21 @@ def is_git_dir(d):
def find_git_dir(d):
if is_git_dir(d):
return d
- elif isfile(d):
+
+ try:
with open(d) as fp:
content = fp.read().rstrip()
+ except (IOError, OSError):
+ # it's probably not a file
+ pass
+ else:
if content.startswith('gitdir: '):
d = join(dirname(d), content[8:])
return find_git_dir(d)
+ # end handle exception
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 f is None:
- return None
- try:
- line = open(f, 'r').readline().rstrip()
- except (OSError, IOError):
- # File might not exist or is unreadable - ignore
- return None
- # end handle file access
- 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
or None if no candidate could be found.