# HG changeset patch # User Augie Fackler # Date 1245813320 18000 # Node ID bda5b47ad2a297f78350750f8541094f179d6149 # Parent fbc7cf4fd7018095024c11784c0c7cb418b32b0e tags: handle editing a tag and its source branch simultaneously diff --git a/hgsubversion/svnmeta.py b/hgsubversion/svnmeta.py --- a/hgsubversion/svnmeta.py +++ b/hgsubversion/svnmeta.py @@ -419,7 +419,7 @@ class SVNMeta(object): def movetag(self, tag, hash, branch, rev, date): if branch == 'default': branch = None - parentctx = self.repo[self.get_parent_revision(rev.revnum, branch)] + parentctx = self.repo[self.get_parent_revision(rev.revnum+1, branch)] if '.hgtags' in parentctx: tagdata = parentctx.filectx('.hgtags').data() else: diff --git a/tests/fixtures/commit-to-tag.sh b/tests/fixtures/commit-to-tag.sh --- a/tests/fixtures/commit-to-tag.sh +++ b/tests/fixtures/commit-to-tag.sh @@ -39,6 +39,13 @@ for a in omega; do svn ci -m "Add file $a" done cd ../.. +svn up +svn cp $REPOPATH/branches/magic $REPOPATH/tags/also-edit -m 'Make tag to edit' +svn up + +echo not omega > branches/magic/omega +echo not omega > tags/also-edit/omega +svn ci -m 'edit both the tag and its source branch at the same time' cd ../.. svnadmin dump temp/repo > commit-to-tag.svndump diff --git a/tests/fixtures/commit-to-tag.svndump b/tests/fixtures/commit-to-tag.svndump --- a/tests/fixtures/commit-to-tag.svndump +++ b/tests/fixtures/commit-to-tag.svndump @@ -9,7 +9,7 @@ Content-length: 56 K 8 svn:date V 27 -2009-06-21T18:31:52.697525Z +2009-06-24T02:53:15.860217Z PROPS-END Revision-number: 1 @@ -27,7 +27,7 @@ durin K 8 svn:date V 27 -2009-06-21T18:31:53.092074Z +2009-06-24T02:53:17.530891Z PROPS-END Node-path: branches @@ -81,7 +81,7 @@ durin K 8 svn:date V 27 -2009-06-21T18:31:54.113073Z +2009-06-24T02:53:18.122469Z PROPS-END Node-path: branches/magic/alpha @@ -111,7 +111,7 @@ durin K 8 svn:date V 27 -2009-06-21T18:31:55.071743Z +2009-06-24T02:53:19.101676Z PROPS-END Node-path: branches/magic/beta @@ -141,7 +141,7 @@ durin K 8 svn:date V 27 -2009-06-21T18:31:56.073236Z +2009-06-24T02:53:20.081433Z PROPS-END Node-path: branches/magic/gamma @@ -171,7 +171,7 @@ durin K 8 svn:date V 27 -2009-06-21T18:31:58.056126Z +2009-06-24T02:53:22.103708Z PROPS-END Node-path: tags/will-edit @@ -196,7 +196,7 @@ durin K 8 svn:date V 27 -2009-06-21T18:31:59.064850Z +2009-06-24T02:53:23.077083Z PROPS-END Node-path: branches/magic/delta @@ -226,7 +226,7 @@ durin K 8 svn:date V 27 -2009-06-21T18:32:00.080479Z +2009-06-24T02:53:24.107494Z PROPS-END Node-path: branches/magic/iota @@ -256,7 +256,7 @@ durin K 8 svn:date V 27 -2009-06-21T18:32:01.079819Z +2009-06-24T02:53:25.092428Z PROPS-END Node-path: branches/magic/lambda @@ -286,7 +286,7 @@ durin K 8 svn:date V 27 -2009-06-21T18:32:02.140778Z +2009-06-24T02:53:26.443673Z PROPS-END Node-path: tags/will-edit/alpha @@ -308,7 +308,7 @@ durin K 8 svn:date V 27 -2009-06-21T18:32:03.083676Z +2009-06-24T02:53:27.067556Z PROPS-END Node-path: branches/magic/omega @@ -323,3 +323,64 @@ PROPS-END omega +Revision-number: 11 +Prop-content-length: 116 +Content-length: 116 + +K 7 +svn:log +V 16 +Make tag to edit +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2009-06-24T02:53:29.049217Z +PROPS-END + +Node-path: tags/also-edit +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 10 +Node-copyfrom-path: branches/magic + + +Revision-number: 12 +Prop-content-length: 156 +Content-length: 156 + +K 7 +svn:log +V 56 +edit both the tag and its source branch at the same time +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2009-06-24T02:53:30.063026Z +PROPS-END + +Node-path: branches/magic/omega +Node-kind: file +Node-action: change +Text-content-length: 10 +Text-content-md5: 9b26a47955b0778e131aae04743f2b8c +Content-length: 10 + +not omega + + +Node-path: tags/also-edit/omega +Node-kind: file +Node-action: change +Text-content-length: 10 +Text-content-md5: 9b26a47955b0778e131aae04743f2b8c +Content-length: 10 + +not omega diff --git a/tests/test_tags.py b/tests/test_tags.py --- a/tests/test_tags.py +++ b/tests/test_tags.py @@ -92,22 +92,40 @@ class TestTags(test_util.TestBase): def test_edited_tag(self, stupid=False): repo = self._load_fixture_and_fetch('commit-to-tag.svndump', stupid=stupid) - self.assertEqual(len(repo.heads()), 2) + self.assertEqual(len(repo.heads()), 3) heads = repo.heads() openheads = [h for h in heads if not repo[h].extra().get('close', False)] closedheads = set(heads) - set(openheads) self.assertEqual(len(openheads), 1) - self.assertEqual(len(closedheads), 1) - tagged = list(closedheads)[0] + self.assertEqual(len(closedheads), 2) + closedheads = sorted(list(closedheads), cmp=lambda x,y: cmp(repo[x].rev(), + repo[y].rev())) + willedit, alsoedit = closedheads self.assertEqual( - repo[tagged].extra(), + repo[willedit].extra(), {'close': '1', 'branch': 'magic', 'convert_revision': 'svn:af82cc90-c2d2-43cd-b1aa-c8a78449440a/tags/will-edit@9'}) - self.assertEqual(tagged, repo.tags()['will-edit']) + self.assertEqual(willedit, repo.tags()['will-edit']) self.assertEqual(repo['will-edit'].manifest().keys(), ['beta', 'gamma', ]) + self.assertEqual( + repo[alsoedit].extra(), + {'close': '1', + 'branch': 'magic', + 'convert_revision': 'svn:af82cc90-c2d2-43cd-b1aa-c8a78449440a/tags/also-edit@12'}) + self.assertEqual(alsoedit, repo.tags()['also-edit']) + self.assertEqual(repo['also-edit'].manifest().keys(), + ['beta', + '.hgtags', + 'delta', + 'alpha', + 'omega', + 'iota', + 'gamma', + 'lambda', + ]) def test_tags_in_unusual_location(self): repo = self._load_fixture_and_fetch('tag_name_same_as_branch.svndump')