summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/git/repo.py7
-rw-r--r--test/git/test_repo.py53
2 files changed, 19 insertions, 41 deletions
diff --git a/lib/git/repo.py b/lib/git/repo.py
index 9b25653f..2df2cb6c 100644
--- a/lib/git/repo.py
+++ b/lib/git/repo.py
@@ -669,7 +669,12 @@ class Repo(object):
path = prev_path
# END reset previous working dir
# END bad windows handling
- return Repo(path, odbt = odbt)
+
+ # our git command could have a different working dir than our actual
+ # environment, hence we prepend its working dir if required
+ if not os.path.isabs(path) and self.git.working_dir:
+ path = os.path.join(self.git._working_dir, path)
+ return Repo(os.path.abspath(path), odbt = odbt)
def archive(self, ostream, treeish=None, prefix=None, **kwargs):
diff --git a/test/git/test_repo.py b/test/git/test_repo.py
index a3ff564d..6554e737 100644
--- a/test/git/test_repo.py
+++ b/test/git/test_repo.py
@@ -131,7 +131,20 @@ class TestRepo(TestBase):
assert os.path.isdir(r.git_dir)
self._test_empty_repo(r)
+
+ # test clone
+ clone_path = path + "_clone"
+ rc = r.clone(clone_path)
+ self._test_empty_repo(rc)
+
shutil.rmtree(git_dir_abs)
+ try:
+ shutil.rmtree(clone_path)
+ except OSError:
+ # when relative paths are used, the clone may actually be inside
+ # of the parent directory
+ pass
+ # END exception handling
# END for each path
os.makedirs(git_dir_rela)
@@ -151,46 +164,6 @@ class TestRepo(TestBase):
def test_bare_property(self):
self.rorepo.bare
- @patch_object(Repo, '__init__')
- @patch_object(Git, '_call_process')
- def test_init_with_options(self, git, repo):
- git.return_value = True
- repo.return_value = None
-
- r = Repo.init("repos/foo/bar.git", **{'bare' : True,'template': "/baz/sweet"})
- assert isinstance(r, Repo)
-
- assert_true(git.called)
- assert_true(repo.called)
-
- @patch_object(Repo, '__init__')
- @patch_object(Git, '_call_process')
- def test_clone(self, git, repo):
- git.return_value = None
- repo.return_value = None
-
- self.rorepo.clone("repos/foo/bar.git")
-
- assert_true(git.called)
- path = os.path.join(absolute_project_path(), '.git')
- assert_equal(git.call_args, (('clone', path, 'repos/foo/bar.git'), {}))
- assert_true(repo.called)
-
- @patch_object(Repo, '__init__')
- @patch_object(Git, '_call_process')
- def test_clone_with_options(self, git, repo):
- git.return_value = None
- repo.return_value = None
-
- self.rorepo.clone("repos/foo/bar.git", **{'template': '/awesome'})
-
- assert_true(git.called)
- path = os.path.join(absolute_project_path(), '.git')
- assert_equal(git.call_args, (('clone', path, 'repos/foo/bar.git'),
- { 'template': '/awesome'}))
- assert_true(repo.called)
-
-
def test_daemon_export(self):
orig_val = self.rorepo.daemon_export
self.rorepo.daemon_export = not orig_val