changeset 397:1b9d004a8c0a

branches: correctly deal with branch closing directly after copy/rename
author Dirkjan Ochtman <dirkjan@ochtman.nl>
date Thu, 11 Jun 2009 18:00:58 +0200
parents 11c4c7242a36
children f13dd964d10c
files hgsubversion/hg_delta_editor.py tests/fixtures/copybeforeclose.sh tests/fixtures/copybeforeclose.svndump tests/test_fetch_branches.py
diffstat 4 files changed, 216 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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)
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
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
+
+
--- 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)