# HG changeset patch # User Dirkjan Ochtman # Date 1244736058 -7200 # Node ID 1b9d004a8c0ad31a7bf8beb0df8901a0164b0335 # Parent 11c4c7242a36d229a45be483555755d29e62fd17 branches: correctly deal with branch closing directly after copy/rename diff --git a/hgsubversion/hg_delta_editor.py b/hgsubversion/hg_delta_editor.py --- a/hgsubversion/hg_delta_editor.py +++ b/hgsubversion/hg_delta_editor.py @@ -737,8 +737,6 @@ class HgChangeReceiver(delta.Editor): def delbranch(self, branch, node, rev): pctx = self.repo[node] - def filectxfun(repo, memctx, path): - return pctx[path] files = pctx.manifest().keys() extra = {'close': 1} if self.usebranchnames: @@ -746,8 +744,8 @@ class HgChangeReceiver(delta.Editor): ctx = context.memctx(self.repo, (node, revlog.nullid), rev.message or util.default_commit_msg, - files, - filectxfun, + [], + lambda x, y, z: None, self.authors[rev.author], self.fixdate(rev.date), extra) diff --git a/tests/fixtures/copybeforeclose.sh b/tests/fixtures/copybeforeclose.sh new file mode 100755 --- /dev/null +++ b/tests/fixtures/copybeforeclose.sh @@ -0,0 +1,39 @@ +#!/bin/sh + +mkdir temp +cd temp +svnadmin create repo +svn co file://`pwd`/repo wc +cd wc +mkdir branches trunk tags +svn add * +svn ci -m 'btt' +cd trunk + +echo a > a +svn add a +svn ci -m 'Add file.' +svn up + +cd .. +svn cp trunk branches/test +svn ci -m 'Branch.' +svn up + +cd branches/test/ +svn mv a b +svn ci -m 'Move on branch.' +svn up + +cd ../../ +svn up +svn rm branches/test +svn ci -m 'Close branch.' + +cd ../.. +svnadmin dump temp/repo > copybeforeclose.svndump +echo +echo 'Complete.' +echo 'You probably want to clean up temp now.' +echo 'Dump in copybeforeclose.svndump' +exit 0 diff --git a/tests/fixtures/copybeforeclose.svndump b/tests/fixtures/copybeforeclose.svndump new file mode 100644 --- /dev/null +++ b/tests/fixtures/copybeforeclose.svndump @@ -0,0 +1,166 @@ +SVN-fs-dump-format-version: 2 + +UUID: 1e1f7d3f-4361-4205-84f8-c0d471d161d2 + +Revision-number: 0 +Prop-content-length: 56 +Content-length: 56 + +K 8 +svn:date +V 27 +2009-06-11T15:51:46.768965Z +PROPS-END + +Revision-number: 1 +Prop-content-length: 100 +Content-length: 100 + +K 7 +svn:log +V 3 +btt +K 10 +svn:author +V 3 +djc +K 8 +svn:date +V 27 +2009-06-11T15:51:47.134555Z +PROPS-END + +Node-path: branches +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: tags +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: trunk +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Revision-number: 2 +Prop-content-length: 106 +Content-length: 106 + +K 7 +svn:log +V 9 +Add file. +K 10 +svn:author +V 3 +djc +K 8 +svn:date +V 27 +2009-06-11T15:51:48.129578Z +PROPS-END + +Node-path: trunk/a +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 2 +Text-content-md5: 60b725f10c9c85c70d97880dfe8191b3 +Content-length: 12 + +PROPS-END +a + + +Revision-number: 3 +Prop-content-length: 104 +Content-length: 104 + +K 7 +svn:log +V 7 +Branch. +K 10 +svn:author +V 3 +djc +K 8 +svn:date +V 27 +2009-06-11T15:51:51.120532Z +PROPS-END + +Node-path: branches/test +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 2 +Node-copyfrom-path: trunk + + +Revision-number: 4 +Prop-content-length: 113 +Content-length: 113 + +K 7 +svn:log +V 15 +Move on branch. +K 10 +svn:author +V 3 +djc +K 8 +svn:date +V 27 +2009-06-11T15:51:54.124503Z +PROPS-END + +Node-path: branches/test/b +Node-kind: file +Node-action: add +Node-copyfrom-rev: 3 +Node-copyfrom-path: branches/test/a +Text-copy-source-md5: 60b725f10c9c85c70d97880dfe8191b3 + + +Node-path: branches/test/a +Node-action: delete + + +Revision-number: 5 +Prop-content-length: 111 +Content-length: 111 + +K 7 +svn:log +V 13 +Close branch. +K 10 +svn:author +V 3 +djc +K 8 +svn:date +V 27 +2009-06-11T15:51:57.130547Z +PROPS-END + +Node-path: branches/test +Node-action: delete + + diff --git a/tests/test_fetch_branches.py b/tests/test_fetch_branches.py --- a/tests/test_fetch_branches.py +++ b/tests/test_fetch_branches.py @@ -68,6 +68,15 @@ class TestFetchBranches(test_util.TestBa self.assertEqual(repo['tip'].extra().get('close'), '1') self.assertEqual(self.openbranches(repo), ['default']) + def test_copybeforeclose(self, stupid=False): + repo = self._load_fixture_and_fetch('copybeforeclose.svndump', stupid) + self.assertEqual(repo['tip'].branch(), 'test') + self.assertEqual(repo['test'].extra().get('close'), '1') + self.assertEqual(repo['test']['b'].data(), 'a\n') + + def test_copybeforeclose_stupid(self): + self.test_copybeforeclose(True) + def test_replace_trunk_with_branch_stupid(self): self.test_replace_trunk_with_branch(stupid=True)