mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 00:45:18 +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]
|
ha = branchedits[0][1]
|
||||||
closebranches[branch] = ha
|
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
|
# 1. handle normal commits
|
||||||
closedrevs = closebranches.values()
|
closedrevs = closebranches.values()
|
||||||
for branch, files in branch_batches.iteritems():
|
for branch, files in branch_batches.iteritems():
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import cPickle as pickle
|
import cPickle as pickle
|
||||||
|
import posixpath
|
||||||
import os
|
import os
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
@ -498,6 +499,18 @@ class SVNMeta(object):
|
|||||||
and branch not in self.branches
|
and branch not in self.branches
|
||||||
and branch not in added_branches):
|
and branch not in added_branches):
|
||||||
parent = {branch: (None, 0, revision.revnum)}
|
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)
|
added_branches.update(parent)
|
||||||
self.addedtags, self.deletedtags = addedtags, deletedtags
|
self.addedtags, self.deletedtags = addedtags, deletedtags
|
||||||
return {
|
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')
|
ctx.extra().get('close', None) != '1')
|
||||||
return sorted(branches)
|
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):
|
def test_unrelatedbranch(self, stupid=False):
|
||||||
repo = self._load_fixture_and_fetch('unrelatedbranch.svndump', stupid)
|
repo = self._load_fixture_and_fetch('unrelatedbranch.svndump', stupid)
|
||||||
heads = [repo[n] for n in repo.heads()]
|
heads = [repo[n] for n in repo.heads()]
|
||||||
|
Loading…
Reference in New Issue
Block a user