summaryrefslogtreecommitdiff
path: root/test/git/test_submodule.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/git/test_submodule.py')
-rw-r--r--test/git/test_submodule.py46
1 files changed, 43 insertions, 3 deletions
diff --git a/test/git/test_submodule.py b/test/git/test_submodule.py
index 8430f4bc..d2cd7fbe 100644
--- a/test/git/test_submodule.py
+++ b/test/git/test_submodule.py
@@ -321,11 +321,13 @@ class TestSubmodule(TestBase):
def test_base_bare(self, rwrepo):
self._do_base_tests(rwrepo)
- def test_root_module(self):
+ @with_rw_repo(k_subm_current, bare=False)
+ def test_root_module(self, rwrepo):
# Can query everything without problems
rm = RootModule(self.rorepo)
assert rm.module() is self.rorepo
+ # try attributes
rm.binsha
rm.mode
rm.path
@@ -339,8 +341,46 @@ class TestSubmodule(TestBase):
rm.config_writer()
# deep traversal gitdb / async
- assert len(list(rm.traverse())) == 2
+ rsms = list(rm.traverse())
+ assert len(rsms) == 2 # gitdb and async, async being a child of gitdb
- # cannot set the parent commit as repo name doesn't exist
+ # cannot set the parent commit as root module's path didn't exist
self.failUnlessRaises(ValueError, rm.set_parent_commit, 'HEAD')
+ # TEST UPDATE
+ #############
+ # setup commit which remove existing, add new and modify existing submodules
+ rm = RootModule(rwrepo)
+ assert len(rm.children()) == 1
+
+ # modify path
+ sm = rm.children()[0]
+ pp = "path/prefix"
+ sm.config_writer().set_value('path', join_path_native(pp, sm.path))
+ cpathchange = rwrepo.index.commit("changed sm path")
+
+ # add submodule
+ nsmn = "newsubmodule"
+ nsmp = "submrepo"
+ nsm = Submodule.add(rwrepo, nsmn, nsmp, url=join_path_native(self.rorepo.working_tree_dir, rsms[0].path, rsms[1].path))
+ csmadded = rwrepo.index.commit("Added submodule")
+
+ # remove submodule - the previous one
+ sm.set_parent_commit(csmadded)
+ assert not sm.remove().exists()
+ csmremoved = rwrepo.index.commit("Removed submodule")
+
+ # change url - to the first repository, this way we have a fast checkout, and a completely different
+ # repository at the different url
+ nsm.set_parent_commit(csmremoved)
+ nsm.config_writer().set_value('url', join_path_native(self.rorepo.working_tree_dir, rsms[0].path))
+ csmpathchange = rwrepo.index.commit("changed url")
+
+ # change branch
+ nsm.set_parent_commit(csmpathchange)
+ # the branch used here is an old failure branch which should ideally stay ... lets see how long that works ;)
+ nbn = 'pack_offset_cache'
+ assert nsm.branch.name != nbn
+ nsm.config_writer().set_value(Submodule.k_head_option, nbn)
+ csmbranchchange = rwrepo.index.commit("changed branch")
+