summaryrefslogtreecommitdiff
path: root/test/git/test_submodule.py
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2010-11-16 17:16:44 +0100
committerSebastian Thiel <byronimo@gmail.com>2010-11-16 17:26:42 +0100
commit3d061a1a506b71234f783628ba54a7bdf79bbce9 (patch)
treefef2623f65c6366b150c28d0c53693018ba2d97e /test/git/test_submodule.py
parent78d2cd65b8b778f3b0cfef5268b0684314ca22ef (diff)
downloadgitpython-3d061a1a506b71234f783628ba54a7bdf79bbce9.tar.gz
Implemented deletion of submodules including proper tests
Diffstat (limited to 'test/git/test_submodule.py')
-rw-r--r--test/git/test_submodule.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/test/git/test_submodule.py b/test/git/test_submodule.py
index 9849a50f..4be7e966 100644
--- a/test/git/test_submodule.py
+++ b/test/git/test_submodule.py
@@ -87,6 +87,7 @@ class TestSubmodule(TestBase):
# module retrieval is not always possible
if rwrepo.bare:
self.failUnlessRaises(InvalidGitRepositoryError, sm.module)
+ self.failUnlessRaises(InvalidGitRepositoryError, sm.remove)
else:
# its not checked out in our case
self.failUnlessRaises(InvalidGitRepositoryError, sm.module)
@@ -155,6 +156,55 @@ class TestSubmodule(TestBase):
# undo the changes
sm.module().head.ref = smref
csm.module().head.ref.set_tracking_branch(csm_tracking_branch)
+
+ # REMOVAL OF REPOSITOTRY
+ ########################
+ # must delete something
+ self.failUnlessRaises(ValueError, csm.remove, module=False, configuration=False)
+ # We have modified the configuration, hence the index is dirty, and the
+ # deletion will fail
+ # NOTE: As we did a few updates in the meanwhile, the indices where reset
+ # Hence we restore some changes
+ sm.config_writer().set_value("somekey", "somevalue")
+ csm.config_writer().set_value("okey", "ovalue")
+ self.failUnlessRaises(InvalidGitRepositoryError, sm.remove)
+ # if we remove the dirty index, it would work
+ sm.module().index.reset()
+ # still, we have the file modified
+ self.failUnlessRaises(InvalidGitRepositoryError, sm.remove, dry_run=True)
+ sm.module().index.reset(working_tree=True)
+
+ # this would work
+ sm.remove(dry_run=True)
+ assert sm.module_exists()
+ sm.remove(force=True, dry_run=True)
+ assert sm.module_exists()
+
+ # but ... we have untracked files in the child submodule
+ fn = join_path_native(csm.module().working_tree_dir, "newfile")
+ open(fn, 'w').write("hi")
+ self.failUnlessRaises(InvalidGitRepositoryError, sm.remove)
+
+ # forcibly delete the child repository
+ csm.remove(force=True)
+ assert not csm.exists()
+ assert not csm.module_exists()
+ assert len(sm.children()) == 0
+ # now we have a changed index, as configuration was altered.
+ # fix this
+ sm.module().index.reset(working_tree=True)
+
+ # now delete only the module of the main submodule
+ assert sm.module_exists()
+ sm.remove(configuration=False)
+ assert sm.exists()
+ assert not sm.module_exists()
+ assert sm.config_reader().get_value('url')
+
+ # delete the rest
+ sm.remove()
+ assert not sm.exists()
+ assert not sm.module_exists()
# END handle bare mode