📄 svnmerge_test.py
字号:
---- ----------- / 0 trunk/ 3 test1 4 test2 5 test3 6 test4 9 test5 10 branches/ 1 testYYY-branch/ 11 (renamed from testXXX-branch in 12) test1 4 test2 5 test3 6 test-branch/ 13 (copied from trunk@6) test1 4 test2 5 test3 6 tags/ 2 """ self.cwd = os.getcwd() test_path = get_test_path() template_path = get_template_path() self.template_path = template_path self.test_path = test_path self.template_repo_path = os.path.join(template_path, "repo") self.template_repo_url = abspath_to_url(self.template_repo_path) self.test_repo_path = os.path.join(test_path, "repo") self.test_repo_url = abspath_to_url(self.test_repo_path) if not os.path.isdir(template_path): rmtree(template_path) os.makedirs(template_path) os.chdir(template_path) self.multilaunch(""" svnadmin create --fs-type fsfs %(TEMPLATE_REPO_PATH)s svn mkdir -m "create /branches" %(TEMPLATE_REPO_URL)s/branches svn mkdir -m "create /tags" %(TEMPLATE_REPO_URL)s/tags svn mkdir -m "create /trunk" %(TEMPLATE_REPO_URL)s/trunk svn co %(TEMPLATE_REPO_URL)s/trunk trunk """) os.chdir("trunk") open("test1", "w").write("test 1") open("test2", "w").write("test 2") open("test3", "w").write("test 3") open("test4", "w").write("test 4") open("test5", "w").write("test 5") self.multilaunch(""" svn add test1 svn ci -m "add test1" svn add test2 svn ci -m "add test2" svn add test3 svn ci -m "add test3" svn mkdir -m "create /foobar" %(TEMPLATE_REPO_URL)s/foobar svn rm -m "remove /foobar" %(TEMPLATE_REPO_URL)s/foobar svn add test4 svn ci -m "add test4" svn add test5 svn ci -m "add test5" svn cp -r6 -m "create branch" %(TEMPLATE_REPO_URL)s/trunk %(TEMPLATE_REPO_URL)s/branches/testXXX-branch svn mv -m "rename branch" %(TEMPLATE_REPO_URL)s/branches/testXXX-branch %(TEMPLATE_REPO_URL)s/branches/testYYY-branch svn cp -r6 -m "create branch" %(TEMPLATE_REPO_URL)s/trunk %(TEMPLATE_REPO_URL)s/branches/test-branch """) os.chdir("..") self.launch("svn co %(TEMPLATE_REPO_URL)s/branches/test-branch") os.chdir(self.cwd) rmtree(self.test_path) shutil.copytree(self.template_path, self.test_path) os.chdir(self.test_path) # Relocate the test working copies from using the template # repository to the test repository so the template repository # is not affected by commits. self.launch("svn switch --relocate %(TEMPLATE_REPO_URL)s %(TEST_REPO_URL)s trunk test-branch") os.chdir("test-branch") # Always remove the template directory when the tests have # completed. atexit.register(lambda: rmtree(template_path)) def tearDown(self): os.chdir(self.cwd) rmtree(self.test_path) def command_dict(self): return dict(TEMPLATE_PATH=self.template_path, TEMPLATE_REPO_PATH=self.template_repo_path, TEMPLATE_REPO_URL=self.template_repo_url, TEST_PATH=self.test_path, TEST_REPO_PATH=self.test_repo_path, TEST_REPO_URL=self.test_repo_url) def launch(self, cmd, *args, **kwargs): cmd = cmd % self.command_dict() return TestCase_SvnMerge.launch(self, cmd, *args, **kwargs) def multilaunch(self, cmds): for cmd in cmds.split("\n"): cmd = cmd.strip() svnmerge.launch(cmd % self.command_dict()) def revert(self): self.multilaunch("svn revert -R .") def getproperty(self): out = svnmerge.launch("svn pg %s ." % svnmerge.opts["prop"]) if len(out) == 0: return None else: return out[0].strip() def getBlockedProperty(self): out = svnmerge.launch("svn pg %s ." % svnmerge.opts["block-prop"]) if len(out) == 0: return None else: return out[0].strip() def testNoWc(self): os.mkdir("foo") os.chdir("foo") self.svnmerge("init", error=True, match=r"working dir") self.svnmerge("avail", error=True, match=r"working dir") self.svnmerge("integrated", error=True, match=r"working dir") self.svnmerge("merge", error=True, match=r"working dir") self.svnmerge("block", error=True, match=r"working dir") self.svnmerge("unblock", error=True, match=r"working dir") def testCheckNoIntegrationInfo(self): self.svnmerge("avail", error=True, match=r"no integration") self.svnmerge("integrated", error=True, match=r"no integration") self.svnmerge("merge", error=True, match=r"no integration") self.svnmerge("block", error=True, match=r"no integration") self.svnmerge("unblock", error=True, match=r"no integration") def testSelfReferentialInit(self): self.svnmerge2(["init", self.test_repo_url + "/branches/test-branch"], error=True, match=r"cannot init integration source") def testBlocked(self): # Initialize svnmerge self.svnmerge("init") self.launch("svn commit -F svnmerge-commit-message.txt", match=r"Committed revision") # Block revisions that have already been merged self.svnmerge("block -r5", error=True, match=r"no available revisions") # Block phantom revisions self.svnmerge("block -r8", error=True, match=r"no available revisions") # Block available revisions self.svnmerge("block -r9", match=r"'svnmerge-blocked' set") self.launch("svn commit -F svnmerge-commit-message.txt", match=r"Committed revision") # Check that the revision is still available self.svnmerge("avail", match=r"\A10$") # Check that the revision was blocked correctly self.svnmerge("avail -B", match=r"\A9$") # Check that both revisions are available with avail -A self.svnmerge("avail -A", match=r"\A9-10$") # Block all remaining revisions self.svnmerge("block", match=r"'svnmerge-blocked' set") self.launch("svn commit -F svnmerge-commit-message.txt", match=r"Committed revision") # Check that all revisions were blocked correctly self.svnmerge("avail -B", match=r"\A9-10$") # Check that all revisions are available using avail -A self.svnmerge("avail -A", match=r"\A9-10$") # Check that no revisions are available, now that they have # been blocked self.svnmerge("avail", match=r"\A\Z") # Unblock all revisions self.svnmerge("unblock", match=r"'svnmerge-blocked' deleted") self.launch("svn commit -F svnmerge-commit-message.txt", match=r"Committed revision") # Check that all revisions are available self.svnmerge("avail", match=r"\A9-10$") self.svnmerge("avail -A", match=r"\A9-10$") # Check that no revisions are blocked self.svnmerge("avail -B", match=r"\A$") def testBasic(self): self.svnmerge("init") p = self.getproperty() self.assertEqual("/trunk:1-6", p) self.svnmerge("avail", match=r"\A9-10$") self.svnmerge("avail -v", match=r"phantom.*7-8") self.svnmerge("avail -B", match=r"\A$") self.svnmerge("avail -A", match=r"\A9-10$") self.svnmerge("avail --log", match=r"| r7.*| r8") self.svnmerge("avail --diff -r9", match=r"Index: test4") self.svnmerge("avail --log -r5", match=r"\A\Z") self.svnmerge("avail --diff -r5", match=r"\A\Z") self.svnmerge("integrated", match=r"^3-6$") self.svnmerge("integrated --log -r5", match=r"| r5 ") self.svnmerge("integrated --diff -r5", match=r"Index: test2") def test_log_msg_suggest(self): self.svnmerge("init -vf commit-log.txt", match=r"wrote commit message") self.assert_(os.path.exists("commit-log.txt")) os.remove("commit-log.txt") def testInitForce(self): open("test1", "a").write("foo") self.svnmerge("init", error=True, match=r"clean") self.svnmerge("init -F") p = self.getproperty() self.assertEqual("/trunk:1-6", p) def testUninit(self): """Test that uninit works, for both merged and blocked revisions.""" os.chdir("..") self.launch("svn co %(TEST_REPO_URL)s/branches/testYYY-branch testYYY-branch") os.chdir("trunk") # Not using switch, so must update to get latest repository rev. self.launch("svn update", match=r"At revision 13") self.svnmerge2(["init", self.test_repo_url + "/branches/test-branch"]) self.launch("svn commit -F svnmerge-commit-message.txt", match=r"Committed revision 14") self.svnmerge2(["init", self.test_repo_url + "/branches/testYYY-branch"]) self.launch("svn commit -F svnmerge-commit-message.txt", match=r"Committed revision 15") # Create changes on test-branch that we can block os.chdir("..") os.chdir("test-branch") # Not using switch, so must update to get latest repository rev. self.launch("svn update", match=r"At revision 15") open("test1", "w").write("test 1-changed_on_test-branch") self.launch("svn commit -m \"Change to test1 on test-branch\"", match=r"Committed revision 16") # Create changes on testYYY-branch that we can block os.chdir("..") os.chdir("testYYY-branch") # Not using switch, so must update to get latest repository rev. self.launch("svn update", match=r"At revision 16") open("test2", "w").write("test 2-changed_on_testYYY-branch") self.launch("svn commit -m \"Change to test2 on testYYY-branch\"", match=r"Committed revision 17") # Block changes from both branches on the trunk os.chdir("..") os.chdir("trunk") # Not using switch, so must update to get latest repository rev. self.launch("svn update", match=r"At revision 17") self.svnmerge("block -S testYYY-branch", match=r"'svnmerge-blocked' set") self.launch("svn commit -F svnmerge-commit-message.txt", match=r"Committed revision 18") self.svnmerge("block -S test-branch", match=r"'svnmerge-blocked' set") self.launch("svn commit -F svnmerge-commit-message.txt", match=r"Committed revision 19") # Do the uninit self.svnmerge2(["uninit", "--source", self.test_repo_url + "/branches/testYYY-branch"]) # Check that the merged property for testYYY-branch was removed, but # not for test-branch pmerged = self.getproperty() self.assertEqual("/branches/test-branch:1-13", pmerged) # Check that the blocked property for testYYY-branch was removed, but # not for test-branch pblocked = self.getBlockedProperty() self.assertEqual("/branches/test-branch:16", pblocked) self.launch("svn commit -F svnmerge-commit-message.txt", match=r"Committed revision 20") self.svnmerge2(["uninit", "--source", self.test_repo_url + "/branches/test-branch"]) # Check that the merged and blocked properties for test-branch have been removed too pmerged = self.getproperty() self.assertEqual(None, pmerged) pblocked = self.getBlockedProperty() self.assertEqual(None, pblocked) def testUninitForce(self): self.svnmerge2(["init", self.test_repo_url + "/trunk"]) self.launch("svn commit -F svnmerge-commit-message.txt", match=r"Committed revision") self.svnmerge2(["init", self.test_repo_url + "/branches/testYYY-branch"]) self.launch("svn commit -F svnmerge-commit-message.txt", match=r"Committed revision") p = self.getproperty() self.assertEqual("/branches/testYYY-branch:1-14 /trunk:1-13", p) open("test1", "a").write("foo") self.svnmerge("uninit --source " + self.test_repo_url + "/branches/testYYY-branch", error=True, match=r"clean") self.svnmerge("uninit -F --source " + self.test_repo_url + "/branches/testYYY-branch") p = self.getproperty() self.assertEqual("/trunk:1-13", p) def testCheckInitializeEverything(self): self.svnmerge2(["init", self.test_repo_url + "/trunk"]) p = self.getproperty() r = svnmerge.get_svninfo(".")["Revision"] self.assertEqual("/trunk:1-%d" % long(r), p) def testCheckNoCopyfrom(self): os.chdir("..") os.chdir("trunk") self.svnmerge("init", error=True, match=r"no copyfrom")
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -