[pLog-svn] wow...

Jon Daley plogworld at jon.limedaley.com
Thu Jul 20 03:38:43 GMT 2006

 	I had heard of SVK a little bit but hadn't ever used it.
I installed it tonight, and without too much trouble, maybe an hour or so 
to see how it works, I was able to "mirror" the lifetype tree locally, so 
it is now in svk's format, copy the revision where I last sync'ed 
blogfuse, applied all of Glen's changes for the last 4 months, then apply 
all of the changes that LifeType has made (in the last month or so), it 
did a very nice interactive merge, showing me glen's changes, the original 
and the lifetype version all in one file, but in a clear manner, and 
allowed various commands to be performed, e.g. "dt" show me the difference 
between the original and "theirs", "dy", my difference, difference between 
mine and its best guess at a merge.  Crazy.

 	Why this is useful: subversion used to support (unofficially, 
turns out the developers didn't realize it worked) merging between 
different repositories, so I effectively do stuff like:

svn export -r123 http://devel.lifetype.net/svn/plog/plog/trunk myversion
svn import myversion http://limedaley.com/svn/blogfuse/devel
# edit myversion
svn commit myversion
svn merge -r123:HEAD http://devel.lifetype.net/svn/plog/plog/trunk myversion
# check for conflicts, etc.
svn commit -m "merged lifetype trunk revs 123:245" myversion

and it worked pretty reasonably for keeping another tree up-to-date.

However, subversion recently broke this behavior, and so it no longer 
works.  I could keep a local copy of lifetype's subversion repository, and 
then do the same thing, because merges work within a repository.  But...

# With svk, I do this:
svk depotmap --init
svk mkdir //mirror
svk mirror http://devel.lifetype.net/svn/plog/plog/trunk //mirror/lifetype/trunk/
svk sync -a
# that took a long time, I wanted to figure out how to only grab recent 
# revisions, but I couldn't figure out how to do it - probably put a fair
# amount of load on the devel server... sorry.  Won't happen again.
svk cp -p -r 2313 -m "copy from lifetype trunk, lifetype rev 3687"  \
               //mirror/lifetype/trunk //blogfuse/devel
svk checkout //blogfuse/devel devel
mv devel devel.svk
svn export https://limedaley.com/svn/blogfuse/devel
# run various commands that effectively do:
svk remove `svk status |grep "^!"`
# then run (on a whim, but it did exactly the right thing
# ie. went through the tree recursively, and added everything
# that didn't exist before, and didn't give any errors about
# files already added
svk add *
svk commit -m "All Glen's changes past up to current,based on rev 3687"
svk smerge //mirror/lifetype/trunk //blogfuse/devel

# done.  In the future, I just have to do 
svk commit -m "blah blah, my changes"
# and
svk smerge //mirror/lifetype/trunk //blogfuse/devel

Very simple.
You can also do svk push'es, to submit changes back up to the lifetype
repository, but I haven't tried that yet.

Jon Daley

Natives who beat drums to drive off evil spirits are objects of
scorn to smart Americans who blow horns to break up traffic jams.
-- Mary Ellen Kelly

More information about the pLog-svn mailing list