[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Playing with svnmover

From: Stefan Fuhrmann <stefan.fuhrmann_at_wandisco.com>
Date: Tue, 7 Apr 2015 22:59:39 +0200

Hi Julian,

Here the things that I noticed while playing with svnmover.
I was going for a FSFS / FSX library duplication scenario.

The only major problem IMO, is that "branchify" is currently
too destructive: Applied within an existing branch, it seems
to make merges from & to the respective sub-tree impossible
(but the conflict it might also have been caused by the
deletion, so I'm not 100% positive).

I think I have a solution to that and will sketch that in a
separate post.

-- Stefan^2.

* nice to have: svnmover should have a history in interactive mode

* Local paths don't get resolved as expect:
  svnmover> put ~/develop/svnmover/mail.txt trunk/sub/mail.txt
  svnmover: warning: apr_err=ENOENT
  svnmover: warning: W000002: Can't open file
'~/develop/svnmover/mail.txt': No such file or directory
  svnmover> put /home/stefan/develop/svnmover/mail.txt trunk/sub/mail.txt
  svnmover: warning: apr_err=SVN_ERR_INCORRECT_PARAMS
  svnmover: warning: W200004: Argument
'/home/stefan/develop/svnmover/mail.txt' is not a relative path or a URL

* Trying to branch from a non-branch-root segfaults:
  svnmover> branch trunk branches/maint
  Segmentation fault (core dumped)

* Are element IDs arbitrary? From the output it seems that they use
  distinct ranges for each branch. I assume a "proper" implementation
  would have a two-dimensional ID space such as "e1.1" instead of "e101".

* Bogus error message when trying to create a sub-branch from a
non-branch-root:
  svnmover> branch trunk/sub trunk/B
  svnmover: warning: W123456: source and destination must be within same
outer branch; source is b10 inside b0, destination is in b10
  svnmover> ls .
      e0 .
      e1 branches
      e3 tags
      e6 trunk (branch ^.6)
      e7 branches/maint (branch ^.7)
  svnmover> ls trunk
      e100 .
      e101 sub
      e102 sub/mail.txt

* Currently, branchify cannot "heal" or "undo" a dissolve operation.
  Can that limitation be lifted for any copy source / target pair?
  Can that limitation be lifted for undoing a 'dissolve' when no
  other commits were done to that (former) branch in the meantime?

* Trying to rename a sub-branch root:
  svnmover> mv trunk/sub trunk/A
  mv: moving by copy-and-delete
  svnmover: warning: apr_err=SVN_ERR_ASSERTION_FAIL
  svnmover: warning: W235000: In file 'subversion/libsvn_delta/editor3e.c'
line 293: assertion failed (eid != branch->sibling_defn->root_eid)

  Tree structure before & after (unchanged):
  svnmover> ls-br-r
  family 0 (BSIDs 0:1, EIDs 0:8)
    branch ^ bsid=0 root=e0 /
      e0 .
      e1 branches
      e3 tags
      e6 trunk (branch ^.6)
      e7 branches/maint (branch ^.7)
  family 1 (BSIDs 10:12, EIDs 100:104)
    branch ^.6 bsid=10 root=e100 /trunk
      e100 .
      e103 sub (branch ^.6.103)
    branch ^.7 bsid=11 root=e100 /branches/maint
      e100 .
      e101 sub
      e102 sub/mail.txt
  family 2 (BSIDs 20:21, EIDs 200:202)
    branch ^.6.103 bsid=20 root=e200 /trunk/sub
      e200 .
      e201 mail.txt

* The following sequence works, though (ommitting outputs):
  svnmover> branch trunk/sub trunk/B
  svnmover> branch trunk/sub trunk/A
  svnmover> rm trunk/sub

  Interesting state of branches/maint/sub vs. trunk/A & trunk/B:
  svnmover> ls-br-r
[[[
family 0 (BSIDs 0:1, EIDs 0:8)
  branch ^ bsid=0 root=e0 /
    e0 .
    e1 branches
    e3 tags
    e6 trunk (branch ^.6)
    e7 branches/maint (branch ^.7)
family 1 (BSIDs 10:12, EIDs 100:106)
  branch ^.6 bsid=10 root=e100 /trunk
    e100 .
    e104 B (branch ^.6.104)
    e105 A (branch ^.6.105)
  branch ^.7 bsid=11 root=e100 /branches/maint
    e100 .
    e101 sub
    e102 sub/mail.txt
family 2 (BSIDs 20:23, EIDs 200:202)
  branch ^.6.104 bsid=21 root=e200 /trunk/B
    e200 .
    e201 mail.txt
  branch ^.6.105 bsid=22 root=e200 /trunk/A
    e200 .
    e201 mail.txt
]]]

* Trying to merge a recent change:
  svnmover> merge branches/maint trunk trunk_at_6
  ! e102 <conflict>
  svnmover: warning: W123456: Merge failed: conflict(s) occurred

  I guess that merge has been doomed since the point trunk/sub
  became a branch root.

* Merging into the opposite direction fails as well:
  svnmover> merge trunk branches/maint trunk_at_6
  D e101 sub
  ! e102 <conflict>
  A e104 B (branch ^.6.104)
  A e105 A (branch ^.6.105)
  svnmover: warning: W123456: Merge failed: conflict(s) occurred

  How would that kind of conflict be permanently resolved?

  Full log:
  svnmover> log ._at_0 .@12
[[[
------------------------------------------------------------------------
r12 | ...
Changed elements:
   --- diff branch ^.6 at /trunk : ^.6 at /trunk, family 1
   D sub (branch ^.6.103)
   --- deleted branch ^.6.103, family 2, at /trunk/sub
------------------------------------------------------------------------
r11 | ...
Changed elements:
   --- diff branch ^.6 at /trunk : ^.6 at /trunk, family 1
   A A (branch ^.6.105)
   --- added branch ^.6.105, family 2, at /trunk/A
------------------------------------------------------------------------
r10 | ...
Changed elements:
   --- diff branch ^.6 at /trunk : ^.6 at /trunk, family 1
   A B (branch ^.6.104)
   --- added branch ^.6.104, family 2, at /trunk/B
------------------------------------------------------------------------
r9 | ...
Changed elements:
   --- diff branch ^.6 at /trunk : ^.6 at /trunk, family 1
   D sub
   D sub/mail.txt
   A sub (branch ^.6.103)
   --- added branch ^.6.103, family 2, at /trunk/sub
------------------------------------------------------------------------
r8 | ...
Changed elements:
   --- diff branch ^.7 at /branches/maint : ^.7 at /branches/maint, family 1
   M sub/mail.txt
------------------------------------------------------------------------
r7 | ...
Changed elements:
   --- diff branch ^ at / : ^ at /, family 0
   A branches/maint (branch ^.7)
   --- added branch ^.7, family 1, at /branches/maint
------------------------------------------------------------------------
r6 | ...
Changed elements:
   --- diff branch ^ at / : ^ at /, family 0
   D trunk
   D trunk/sub
   D trunk/sub/mail.txt
   A trunk (branch ^.6)
   --- added branch ^.6, family 1, at /trunk
------------------------------------------------------------------------
r5 | ...
Changed elements:
   --- diff branch ^ at / : ^ at /, family 0
   A trunk/sub/mail.txt
------------------------------------------------------------------------
r4 | ...
Changed elements:
   --- diff branch ^ at / : ^ at /, family 0
   A trunk/sub
------------------------------------------------------------------------
r3 | ...
Changed elements:
   --- diff branch ^ at / : ^ at /, family 0
   A tags
------------------------------------------------------------------------
r2 | ...
Changed elements:
   --- diff branch ^ at / : ^ at /, family 0
   A trunk
------------------------------------------------------------------------
r1 | ...
Changed elements:
   --- diff branch ^ at / : ^ at /, family 0
   A branches
]]]
Received on 2015-04-07 23:00:54 CEST

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.