Dear fans of move tracking,

I heartily invite you to help by playing with 'svnmover'. Can you have
a go and see what it can do? It's quite fun to play with (in a nerdy
way :-)

To get it, build the 'move-tracking-2' branch and look in
'subversion/svnmover/svnmover' -- it's a sibling to 'svn' and
'svnmucc'.

It's fairly easy to pick up as you go along. There's a transcript
below, as an example. You can also see in the IRC history [1] where I
guided Brane through playing with it for the first time.

You can try

  - doing renames/moves (using 'mv PATH1 PATH2')
  - merging those changes onto another branch ('merge FROM TO YCA')
  - visualize what's happening ('branches PATH', 'ls PATH', 'ls-br-r')
  - type 'help' to see usage message

You should find that it copes perfectly with renames inside renames, and so on.

Do please share any thoughts or questions you have --

  * about the model

  * do you grok the way moves work in svnmover?

  * any new feature 'svnmover' should have to help with experimenting?

I believe we can build a move-tracking design for Subversion. This
stage is not trying to give the final answer, it is squarely aimed at
exploring and understanding how it could and should work. So I need
*your* input, please, if you can spare some thought cycles and
experimentation cycles.



Here's an example transcript.

[[[
$ svnadmin create repo; REPO=file://$PWD/repo

$ svnmover -U $REPO
svnmover> ls .
    e0 .
svnmover> mkbranch trunk mkdir branches
A    trunk (branch ^.2)
A    branches
Committed r1:
   --- diff branch ^, family 0, at / : /
   A   e2  e0/trunk (branch ^.2)
   A   e3  e0/branches
   --- added branch ^.2, family 1, at /trunk
svnmover> mkdir trunk/A mkdir trunk/A/D1 mkdir trunk/A/D2
A    trunk/A
A    trunk/A/D1
A    trunk/A/D2
Committed r2:
   --- diff branch ^.2, family 1, at /trunk : /trunk
   A   e101  e100/A
   A   e102  e101/D1
   A   e103  e101/D2
svnmover> branch trunk branches/br1
A+   branches/br1 (branch ^.4)
Committed r3:
   --- diff branch ^, family 0, at / : /
   A   e4  e3/br1 (branch ^.4)
   --- added branch ^.4, family 1, at /branches/br1
svnmover> branches .
branches in family 0:
  ^ /
svnmover> branches trunk
branches in family 1:
  ^.2 /trunk
  ^.4 /branches/br1
svnmover> mv branches/br1/A/D1 branches/br1/D1renamed
V    branches/br1/D1renamed (from branches/br1/A/D1)
Committed r4:
   --- diff branch ^.4, family 1, at /branches/br1 : /branches/br1
   Mvr e102  e100/D1renamed from e101/D1
svnmover> mkdir trunk/A/D1/new-child
A    trunk/A/D1/new-child
Committed r5:
   --- diff branch ^.2, family 1, at /trunk : /trunk
   A   e104  e102/new-child
svnmover> merge trunk branches/br1 trunk@2
A    e104 new-child
Committed r6:
   --- diff branch ^.4, family 1, at /branches/br1 : /branches/br1
   A   e104  e102/new-child
svnmover> ls branches/br1
    e100 .
    e101 A
    e102 D1renamed
    e103 A/D2
    e104 D1renamed/new-child
svnmover> merge branches/br1 trunk trunk@2
M/V  e102 D1renamed
M/V  e104 new-child
Committed r7:
   --- diff branch ^.2, family 1, at /trunk : /trunk
   Mvr e102  e100/D1renamed from e101/D1
svnmover> ls trunk
    e100 .
    e101 A
    e102 D1renamed
    e103 A/D2
    e104 D1renamed/new-child
svnmover>
]]]

- Julian


[1] <http://colabti.org/irclogger/irclogger_log/svn-dev?date=2015-03-05#l113>

Reply via email to