Mercurial > hgsubversion
changeset 131:4d42dbbb5127
hg_delta_editor: fix parent revision detection on branch copy
Project items copyfrom revisions are irrelevant to parent revision detection,
only the project one or those of its ancestors matter. Items copyfrom is
useful when retrieving items content.
Former code resulted in incorrect converted graph for pyglet repository,
especially on the following revision:
------------------------------------------------------------------------
r274 | r1chardj0n3s | 2006-12-21 02:02:14 +0100 (Jeu, 21 Dec 2006) | 2 lines
Changed paths:
A /branches/richard-glx-version (from /trunk:269)
M /branches/richard-glx-version/pyglet/window/xlib/__init__.py
R /branches/richard-glx-version/tests/test.py (from /trunk/tests/test.py:270)
R /branches/richard-glx-version/tools/info.py (from /trunk/tools/info.py:272)
R /branches/richard-glx-version/website/get_involved.php (from /trunk/website/get_involved.php:273)
Branching to horribly mangle GLX
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Wed, 10 Dec 2008 11:03:22 -0600 |
parents | c2a84d436202 |
children | 3a9d6cd18332 |
files | hg_delta_editor.py tests/fixtures/unorderedbranch.sh tests/fixtures/unorderedbranch.svndump tests/test_fetch_branches.py |
diffstat | 4 files changed, 224 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/hg_delta_editor.py +++ b/hg_delta_editor.py @@ -267,7 +267,7 @@ class HgChangeReceiver(delta.Editor): added_tags = {} tags_to_delete = set() branches_to_delete = set() - for p in paths: + for p in sorted(paths): fi, br = self._path_and_branch_for_path(p) if fi is not None: if fi == '' and br not in self.branches: @@ -295,10 +295,6 @@ class HgChangeReceiver(delta.Editor): br2 = br or 'default' if br2 not in self.repo.branchtags() and paths[p].action == 'D': branches_to_delete.add(br) - elif br in added_branches: - if paths[p].copyfrom_rev > added_branches[br][1]: - x,y,z = added_branches[br] - added_branches[br] = x, paths[p].copyfrom_rev, z else: t_name = self._is_path_tag(p) if t_name == False:
new file mode 100755 --- /dev/null +++ b/tests/fixtures/unorderedbranch.sh @@ -0,0 +1,39 @@ +#!/bin/sh +# +# Generate unorderedbranch.svndump +# + +mkdir temp +cd temp + +mkdir project-orig +cd project-orig +mkdir trunk +mkdir branches +cd .. + +svnadmin create testrepo +svnurl=file://`pwd`/testrepo +svn import project-orig $svnurl -m "init project" + +svn co $svnurl project +cd project/trunk +echo a > a +svn add a +svn ci -m "add a in trunk" +echo b > b +echo z > z +svn add b z +svn ci -m "add b and z in trunk" +svn up +cd ../branches +# Copy from trunk past revision. The converted used to take the last +# trunk revision as branch parent instead of the specified one. +svn cp -r 2 ../trunk branch +svn cp ../trunk/z branch +echo c > branch/c +svn add branch/c +svn ci -m 'branch and add c' +cd ../.. + +svnadmin dump testrepo > ../unorderedbranch.svndump
new file mode 100644 --- /dev/null +++ b/tests/fixtures/unorderedbranch.svndump @@ -0,0 +1,175 @@ +SVN-fs-dump-format-version: 2 + +UUID: 0f1e934c-2a07-4fc9-acf5-47264bd6bc41 + +Revision-number: 0 +Prop-content-length: 56 +Content-length: 56 + +K 8 +svn:date +V 27 +2008-12-06T16:48:56.303240Z +PROPS-END + +Revision-number: 1 +Prop-content-length: 114 +Content-length: 114 + +K 7 +svn:log +V 12 +init project +K 10 +svn:author +V 7 +pmezard +K 8 +svn:date +V 27 +2008-12-06T16:48:56.429957Z +PROPS-END + +Node-path: branches +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: 116 +Content-length: 116 + +K 7 +svn:log +V 14 +add a in trunk +K 10 +svn:author +V 7 +pmezard +K 8 +svn:date +V 27 +2008-12-06T16:48:57.178238Z +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: 122 +Content-length: 122 + +K 7 +svn:log +V 20 +add b and z in trunk +K 10 +svn:author +V 7 +pmezard +K 8 +svn:date +V 27 +2008-12-06T16:48:58.191379Z +PROPS-END + +Node-path: trunk/b +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 2 +Text-content-md5: 3b5d5c3712955042212316173ccf37be +Content-length: 12 + +PROPS-END +b + + +Node-path: trunk/z +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 2 +Text-content-md5: a8a78d0ff555c931f045b6f448129846 +Content-length: 12 + +PROPS-END +z + + +Revision-number: 4 +Prop-content-length: 118 +Content-length: 118 + +K 7 +svn:log +V 16 +branch and add c +K 10 +svn:author +V 7 +pmezard +K 8 +svn:date +V 27 +2008-12-06T16:49:02.185634Z +PROPS-END + +Node-path: branches/branch +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 2 +Node-copyfrom-path: trunk + + +Node-path: branches/branch/c +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 2 +Text-content-md5: 2cd6ee2c70b0bde53fbe6cac3c8b8bb1 +Content-length: 12 + +PROPS-END +c + + +Node-path: branches/branch/z +Node-kind: file +Node-action: add +Node-copyfrom-rev: 3 +Node-copyfrom-path: trunk/z +Text-copy-source-md5: a8a78d0ff555c931f045b6f448129846 +Prop-content-length: 34 +Content-length: 34 + +K 13 +svn:mergeinfo +V 0 + +PROPS-END + +
--- a/tests/test_fetch_branches.py +++ b/tests/test_fetch_branches.py @@ -20,6 +20,15 @@ class TestFetchBranches(test_util.TestBa def test_unrelatedbranch_stupid(self): self.test_unrelatedbranch(True) + def test_unorderedbranch(self, stupid=False): + repo = self._load_fixture_and_fetch('unorderedbranch.svndump', stupid) + r = repo['branch'] + self.assertEqual(0, r.parents()[0].rev()) + self.assertEqual(['a', 'c', 'z'], sorted(r.manifest())) + + def test_unorderedbranch_stupid(self): + self.test_unorderedbranch(True) + def suite(): all = [unittest.TestLoader().loadTestsFromTestCase(TestFetchBranches), ]