Thread (22 messages) flat view 22 messages, 8 authors, 2016-06-15

Re: Approaches to SVN to Git conversion

From: Phil Hord <hidden>
Date: 2016-06-15 22:53:14

On Tue, Mar 6, 2012 at 5:34 PM, Andrew Sayers
[off-list ref] wrote:
This is quite close to the implementation I've got.  The SVN exporter
runs in two stages:

In the first stage, the script treats any non-blacklisted file as a
marker file, but only looks for trunk branches.  It looks all through
the history, traces back through the copyfroms, and tries to find the
original directory associated with the file.  Usually it decides that
the only branch without a copyfrom is /trunk.  Searching just for trunks
with this weak heuristic makes it much easier to hand-verify the result.

In the second stage, the script looks through the history again, tracing
the copies of known branches in a slightly less clever way than
described in my previous e-mail.  There's no need for marker files this
time round, as we just assume any `svn cp /trunk
/directory/not/within/a/branch` is a new branch.  In my experiments this
has been a pretty solid way of detecting branches without too much human
input - I might be missing something (or have mis-explained something),
but I'd be interested to hear examples of where this would go wrong.
I think what you're describing would work perfectly for my weird svn
repo.  I have branches named like this:

branches/developer/hordp/foo
branches/developer/hordp/bar
etc.

Since these were created with 'svn cp' originally, they would be
properly considered branches by your algorithm, right?    If so,
sweet!
Having said that, here's a dodgy example I'd like to pre-emptively defend:

       svn add tronk
       svn ci -m "Created trunk" # r1
       svn cp tronk trunk
       svn ci -m "D'oh" # r2
       svn rm tronk
       svn add trunk/markerFile.txt
       svn ci -m "Double d'oh!" # r3

You could argue that the correct branch history description for the
above would be:

       In r3, create branch "trunk"

In other words, ignore everything that happened before the marker file
was created.  However, I would argue the following representation is
more correct:

       In r1, create branch "tronk"
       In r2, create branch "trunk" from "tronk" r1
       In r3, delete branch "tronk"
I prefer your interpretation. It doesn't look dodgy at all.

Phil
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help