Philip yesterday suggested a useful thing would be if I could
demonstrate how a working copy would be able to hold a "working state"
and how merging into the WC and subsequent commit would all work.
The present 'svnmover merge' command calculates a merge result on the
fly and passes it straight through to a commit editor. If there are no
conflicts, it commits the result immediately. (If there are any
conflicts it errors out and forgets everything.)
svnmover merge SRC[@REV] TGT[@REV] YCA_at_REV
Actually it doesn't quite operate on three repo states. The third
state, used as the target state onto which it applies the result, is a
transaction (for a commit), and need not be a pristine state from the
repository, it can be modified before (and after) the merge.
[[[
# set up a repo with two branches
$ rm -rf repo && svnadmin create repo && ln -s /bin/true
repo/hooks/pre-revprop-change
$ svnmover -U $REPO mkbranch B1 mkdir B1/foo branch B1 B2
A B1 (branch ^.2)
A B1/foo
A+ B2 (branch ^.3)
Committed r1:
--- diff branch ^ at / : ^ at /, family 0
A e2 e0/B1 (branch ^.2)
A e3 e0/B2 (branch ^.3)
--- added branch ^.2, family 1, at /B1
--- added branch ^.3, family 1, at /B2
# make some changes
$ svnmover -U $REPO mkdir B1/foo/D1 mkdir B2/foo/D2
A B1/foo/D1
A B2/foo/D2
Committed r2:
--- diff branch ^.2 at /B1 : ^.2 at /B1, family 1
A e102 e101/D1
--- diff branch ^.3 at /B2 : ^.3 at /B2, family 1
A e103 e101/D2
# merge into a modified transaction
$ svnmover -U $REPO mv B2/foo B2/bar merge B1 B2 B1_at_1
V B2/bar (from B2/foo)
A e102 D1
Committed r3:
--- diff branch ^.3 at /B2 : ^.3 at /B2, family 1
M r e101 e100/bar from e100/foo
A e102 e101/D1
$ svnmover -U $REPO ls B2/
e100 .
e101 bar
e102 bar/D1
e103 bar/D2
]]]
I'll have a go at prototyping a WC.
- Julian
Received on 2015-04-01 10:47:50 CEST