Skip to content

Commit

Permalink
Addressing PR comments
Browse files Browse the repository at this point in the history
 - Fix docstring
 - Less confusing abspath/split/iterate code
 - More tests
  • Loading branch information
bmcorser committed Jul 31, 2015
1 parent 295c8c0 commit d64b632
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 8 deletions.
15 changes: 8 additions & 7 deletions dulwich/repo.py
Expand Up @@ -679,19 +679,20 @@ def __init__(self, root):
self.hooks['post-commit'] = PostCommitShellHook(self.controldir())

@classmethod
def discover(cls, start):
"""
def discover(cls, start='.'):
"""Iterate parent directories to discover a repository
Return a Repo object for the first parent directory that looks like a
Git repository.
:param start: The directory to start discovery from
:param start: The directory to start discovery from (defaults to '.')
"""
abs_split = os.path.abspath(start)[1:].split(os.path.sep)
for _ in range(len(abs_split)):
path = os.path.abspath(start)
while path != '/':
try:
return cls(os.path.join('/', *abs_split))
return cls(path)
except NotGitRepository:
abs_split.pop()
path, _ = os.path.split(path)
raise NotGitRepository(
"No git repository was found at %(path)s" % dict(path=start)
)
Expand Down
10 changes: 9 additions & 1 deletion dulwich/tests/test_repository.py
Expand Up @@ -35,6 +35,7 @@
)
from dulwich import objects
from dulwich.config import Config
from dulwich.errors import NotGitRepository
from dulwich.repo import (
Repo,
MemoryRepo,
Expand Down Expand Up @@ -766,7 +767,14 @@ def test_commit_no_encode_decode(self):
self.assertEqual(stat.S_IFREG | 0o644, mode)
self.assertEqual(encoding.encode('ascii'), r[id].data)

def test_discover(self):
def test_discover_intended(self):
path = os.path.join(self._repo_dir, 'b/c')
r = Repo.discover(path)
self.assertEqual(r.head(), self._repo.head())

def test_discover_isrepo(self):
r = Repo.discover(self._repo_dir)
self.assertEqual(r.head(), self._repo.head())

def test_discover_notrepo(self):
self.assertRaises(NotGitRepository, Repo.discover('/'))

0 comments on commit d64b632

Please sign in to comment.