mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 16:31:02 +03:00
replay: correctly handle renaming the parent dir of a branch
This commit is contained in:
parent
555e763e54
commit
d4c3b3a0d2
@ -100,6 +100,10 @@ def convert_rev(ui, meta, svn, r, tbdelta):
|
||||
ha = branchedits[0][1]
|
||||
closebranches[branch] = ha
|
||||
|
||||
extraempty = (set(tbdelta['branches'][0]) -
|
||||
(set(current.emptybranches) | set(branch_batches.keys())))
|
||||
current.emptybranches.update([(x, False) for x in extraempty])
|
||||
|
||||
# 1. handle normal commits
|
||||
closedrevs = closebranches.values()
|
||||
for branch, files in branch_batches.iteritems():
|
||||
|
@ -1,4 +1,5 @@
|
||||
import cPickle as pickle
|
||||
import posixpath
|
||||
import os
|
||||
import tempfile
|
||||
|
||||
@ -498,6 +499,18 @@ class SVNMeta(object):
|
||||
and branch not in self.branches
|
||||
and branch not in added_branches):
|
||||
parent = {branch: (None, 0, revision.revnum)}
|
||||
elif bpath is None:
|
||||
srcpath = paths[p].copyfrom_path
|
||||
srcrev = paths[p].copyfrom_rev
|
||||
parent = {}
|
||||
for br in self.branches:
|
||||
rn = self.remotename(br)
|
||||
if rn.startswith(srcpath[1:] + '/'):
|
||||
bname = posixpath.basename(rn)
|
||||
newbr = posixpath.join(p, bname)
|
||||
parent.update(
|
||||
self._determine_parent_branch(
|
||||
newbr, rn, srcrev, revision.revnum))
|
||||
added_branches.update(parent)
|
||||
self.addedtags, self.deletedtags = addedtags, deletedtags
|
||||
return {
|
||||
|
44
tests/fixtures/rename_branch_parent_dir.sh
vendored
Executable file
44
tests/fixtures/rename_branch_parent_dir.sh
vendored
Executable file
@ -0,0 +1,44 @@
|
||||
#!/bin/sh
|
||||
mkdir temp
|
||||
cd temp
|
||||
svnadmin create repo
|
||||
svn co file://`pwd`/repo wc
|
||||
|
||||
cd wc
|
||||
mkdir brances trunk tags
|
||||
svn add *
|
||||
svn ci -m 'btt'
|
||||
|
||||
cd trunk
|
||||
for a in alpha beta gamma delta ; do
|
||||
echo $a > $a
|
||||
svn add $a
|
||||
done
|
||||
svn ci -m 'Add files.'
|
||||
|
||||
cd ..
|
||||
svn up
|
||||
svn cp trunk brances/dev_branch
|
||||
svn ci -m 'branch'
|
||||
|
||||
cd brances/dev_branch
|
||||
svn rm delta
|
||||
echo narf > alpha
|
||||
echo iota > iota
|
||||
svn add iota
|
||||
svn ci -m 'branch changes'
|
||||
|
||||
cd ../..
|
||||
svn up
|
||||
svn mv brances branches
|
||||
svn ci -m 'move branches to branches'
|
||||
|
||||
cd ..
|
||||
cd ..
|
||||
|
||||
svnadmin dump temp/repo > rename_branch_parent_dir.svndump
|
||||
echo
|
||||
echo 'Complete.'
|
||||
echo 'You probably want to clean up temp now.'
|
||||
echo 'Dump in rename_branch_parent_dir.svndump'
|
||||
exit 0
|
223
tests/fixtures/rename_branch_parent_dir.svndump
vendored
Normal file
223
tests/fixtures/rename_branch_parent_dir.svndump
vendored
Normal file
@ -0,0 +1,223 @@
|
||||
SVN-fs-dump-format-version: 2
|
||||
|
||||
UUID: dceec716-b592-46cb-b5fe-41acbbe32b85
|
||||
|
||||
Revision-number: 0
|
||||
Prop-content-length: 56
|
||||
Content-length: 56
|
||||
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2010-02-06T17:32:02.297006Z
|
||||
PROPS-END
|
||||
|
||||
Revision-number: 1
|
||||
Prop-content-length: 102
|
||||
Content-length: 102
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 3
|
||||
btt
|
||||
K 10
|
||||
svn:author
|
||||
V 5
|
||||
augie
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2010-02-06T17:32:03.176895Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: brances
|
||||
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: 110
|
||||
Content-length: 110
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 10
|
||||
Add files.
|
||||
K 10
|
||||
svn:author
|
||||
V 5
|
||||
augie
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2010-02-06T17:32:04.202558Z
|
||||
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/delta
|
||||
Node-kind: file
|
||||
Node-action: add
|
||||
Prop-content-length: 10
|
||||
Text-content-length: 6
|
||||
Text-content-md5: d2840cc81bc032bd1141b56687d0f93c
|
||||
Content-length: 16
|
||||
|
||||
PROPS-END
|
||||
delta
|
||||
|
||||
|
||||
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: 105
|
||||
Content-length: 105
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 6
|
||||
branch
|
||||
K 10
|
||||
svn:author
|
||||
V 5
|
||||
augie
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2010-02-06T17:32:07.137254Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: brances/dev_branch
|
||||
Node-kind: dir
|
||||
Node-action: add
|
||||
Node-copyfrom-rev: 2
|
||||
Node-copyfrom-path: trunk
|
||||
|
||||
|
||||
Revision-number: 4
|
||||
Prop-content-length: 114
|
||||
Content-length: 114
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 14
|
||||
branch changes
|
||||
K 10
|
||||
svn:author
|
||||
V 5
|
||||
augie
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2010-02-06T17:32:08.190998Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: brances/dev_branch/alpha
|
||||
Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 5
|
||||
Text-content-md5: 5e723ed52db2000686425ca28bc5ba4a
|
||||
Content-length: 5
|
||||
|
||||
narf
|
||||
|
||||
|
||||
Node-path: brances/dev_branch/iota
|
||||
Node-kind: file
|
||||
Node-action: add
|
||||
Prop-content-length: 10
|
||||
Text-content-length: 5
|
||||
Text-content-md5: ebcf3971120220589f1dfbf8d56e25b9
|
||||
Content-length: 15
|
||||
|
||||
PROPS-END
|
||||
iota
|
||||
|
||||
|
||||
Node-path: brances/dev_branch/delta
|
||||
Node-action: delete
|
||||
|
||||
|
||||
Revision-number: 5
|
||||
Prop-content-length: 125
|
||||
Content-length: 125
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 25
|
||||
move branches to branches
|
||||
K 10
|
||||
svn:author
|
||||
V 5
|
||||
augie
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2010-02-06T17:32:11.150006Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches
|
||||
Node-kind: dir
|
||||
Node-action: add
|
||||
Node-copyfrom-rev: 4
|
||||
Node-copyfrom-path: brances
|
||||
|
||||
|
||||
Node-path: brances
|
||||
Node-action: delete
|
||||
|
||||
|
@ -27,6 +27,16 @@ class TestFetchBranches(test_util.TestBase):
|
||||
ctx.extra().get('close', None) != '1')
|
||||
return sorted(branches)
|
||||
|
||||
def test_rename_branch_parent(self, stupid=False):
|
||||
repo = self._load_fixture_and_fetch('rename_branch_parent_dir.svndump', stupid)
|
||||
heads = [repo[n] for n in repo.heads()]
|
||||
heads = dict([(ctx.branch(), ctx) for ctx in heads])
|
||||
# Let these tests disabled yet as the fix is not obvious
|
||||
self.assertEqual(['dev_branch'], self.openbranches(repo))
|
||||
|
||||
def test_rename_branch_parent_stupid(self):
|
||||
self.test_rename_branch_parent(stupid=True)
|
||||
|
||||
def test_unrelatedbranch(self, stupid=False):
|
||||
repo = self._load_fixture_and_fetch('unrelatedbranch.svndump', stupid)
|
||||
heads = [repo[n] for n in repo.heads()]
|
||||
|
Loading…
Reference in New Issue
Block a user