# HG changeset patch # User Augie Fackler # Date 1229038473 21600 # Node ID cf6fe8457570ce3d37bf62af9b29f0ebacb560b7 # Parent e33c7a4bcebb370bdf47da4f0c67fbb01eb7be2e Fix an apparent regression where branch name didn't get properly stored for commits forced on empty branches. diff --git a/hg_delta_editor.py b/hg_delta_editor.py --- a/hg_delta_editor.py +++ b/hg_delta_editor.py @@ -354,7 +354,6 @@ class HgChangeReceiver(delta.Editor): if b not in branch_batches: branch_batches[b] = [] branch_batches[b].append((p, f)) - for branch, files in branch_batches.iteritems(): if branch in self.commit_branches_empty and files: del self.commit_branches_empty[branch] @@ -434,20 +433,16 @@ class HgChangeReceiver(delta.Editor): parent_ctx = self.repo.changectx(ha) def del_all_files(*args): raise IOError - extra = {} - if parent_ctx.children(): - # Target isn't an active head, no need to do things to it. - continue - if branch in self.branches_to_delete: - extra['branch'] = 'closed-branch' - # True here means nuke all files - files = [] + # True here meant nuke all files, shouldn't happen with branch closing if self.commit_branches_empty[branch]: - files = parent_ctx.manifest().keys() + assert False, 'Got asked to commit non-closed branch as empty with no files. Please report this issue.' + extra = {} + if branch: + extra['branch'] = branch current_ctx = context.memctx(self.repo, (ha, node.nullid), rev.message or ' ', - files, + [], del_all_files, '%s%s' % (rev.author, self.author_host), diff --git a/tests/fixtures/branch_prop_edit.sh b/tests/fixtures/branch_prop_edit.sh new file mode 100755 --- /dev/null +++ b/tests/fixtures/branch_prop_edit.sh @@ -0,0 +1,42 @@ +#!/bin/sh +mkdir temp +cd temp +svnadmin create repo +svn co file://`pwd`/repo wc +cd wc +mkdir branches trunk +svn add * +svn ci -m 'branches trunk' +svn up + +cd trunk +for a in alpha beta gamma ; do + echo $a > $a + svn add $a +done +svn ci -m 'Files.' +cd .. +svn up + +svn cp trunk branches/dev_branch +svn ci -m 'make a branch' +svn up + +cd branches/dev_branch +echo epsilon > epsilon +svn add epsilon +svn ci -m 'Add a file on the branch.' +svn up +cd ../.. + +cd branches/dev_branch +svn ps 'svn:ignore' 'delta' . +svn ci -m 'Commit bogus propchange.' +svn up +cd ../../.. + +pwd +svnadmin dump repo > ../branch_prop_edit.svndump +cd .. +echo 'Dump created in branch_prop_edit.svndump. You can probably delete temp.' +exit 0 diff --git a/tests/fixtures/branch_prop_edit.svndump b/tests/fixtures/branch_prop_edit.svndump new file mode 100644 --- /dev/null +++ b/tests/fixtures/branch_prop_edit.svndump @@ -0,0 +1,191 @@ +SVN-fs-dump-format-version: 2 + +UUID: ab14e60b-7e4b-473f-980a-26ace458a00f + +Revision-number: 0 +Prop-content-length: 56 +Content-length: 56 + +K 8 +svn:date +V 27 +2008-12-12T00:18:13.309956Z +PROPS-END + +Revision-number: 1 +Prop-content-length: 114 +Content-length: 114 + +K 7 +svn:log +V 14 +branches trunk +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-12-12T00:18:14.083854Z +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: 105 +Content-length: 105 + +K 7 +svn:log +V 6 +Files. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-12-12T00:18:16.270290Z +PROPS-END + +Node-path: trunk/alpha +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 6 +Text-content-md5: 9f9f90dbe3e5ee1218c86b8839db1995 +Content-length: 16 + +PROPS-END +alpha + + +Node-path: trunk/beta +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 5 +Text-content-md5: f0cf2a92516045024a0c99147b28f05b +Content-length: 15 + +PROPS-END +beta + + +Node-path: trunk/gamma +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 6 +Text-content-md5: 303febb9068384eca46b5b6516843b35 +Content-length: 16 + +PROPS-END +gamma + + +Revision-number: 3 +Prop-content-length: 113 +Content-length: 113 + +K 7 +svn:log +V 13 +make a branch +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-12-12T00:18:19.069446Z +PROPS-END + +Node-path: branches/dev_branch +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 2 +Node-copyfrom-path: trunk + + +Revision-number: 4 +Prop-content-length: 125 +Content-length: 125 + +K 7 +svn:log +V 25 +Add a file on the branch. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-12-12T00:18:21.088611Z +PROPS-END + +Node-path: branches/dev_branch/epsilon +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 8 +Text-content-md5: c40719840583e3f3e6744c02828d7cd9 +Content-length: 18 + +PROPS-END +epsilon + + +Revision-number: 5 +Prop-content-length: 124 +Content-length: 124 + +K 7 +svn:log +V 24 +Commit bogus propchange. +K 10 +svn:author +V 5 +durin +K 8 +svn:date +V 27 +2008-12-12T00:18:23.078263Z +PROPS-END + +Node-path: branches/dev_branch +Node-kind: dir +Node-action: change +Prop-content-length: 37 +Content-length: 37 + +K 10 +svn:ignore +V 6 +delta + +PROPS-END + + diff --git a/tests/test_fetch_command.py b/tests/test_fetch_command.py --- a/tests/test_fetch_command.py +++ b/tests/test_fetch_command.py @@ -117,6 +117,15 @@ class TestBasicRepoLayout(test_util.Test self.assertEqual(node.hex(repo['tip'].node()), '9cf09e6ff7fa938188c3bcc9dd87abd7842c080c') + def test_propedit_with_nothing_else(self, stupid=False): + repo = self._load_fixture_and_fetch('branch_prop_edit.svndump', + stupid=stupid) + self.assertEqual(repo['tip'].description(), 'Commit bogus propchange.') + self.assertEqual(repo['tip'].branch(), 'dev_branch') + + def test_propedit_with_nothing_else_stupid(self): + self.test_propedit_with_nothing_else(stupid=True) + class TestStupidPull(test_util.TestBase): def test_stupid(self):