P.S. (About mercurial and shared cvs environments.)

Rob Landley rob at landley.net
Thu Aug 3 16:23:32 UTC 2006


Some people have wondered why I'm so interested in a distributed resource 
control system like git or mercurial.  Since I haven't got net access on the 
bus ride to the office, I might as well explain myself.

What I'm really looking forward to is being able to able to separate the "ok, 
I've now finished a big project, let me save/publish that revision" 
from "let's merge with other people's changes and fix up the conflicts".  
Right now, doing #1 means it's time to do #2.  Being done means you're not 
done.  I hate that.  I have a quick fix to umount.c queued up that needed to 
go in after the other big patch.  (I want to keep them separate because that 
way you can tell what broke what if there's a problem, it's simple repository 
hygiene.)  And here it's interrupting me as I try to catch a darn bus.

I don't mind merging, it's part of development.  But I like to initiate it 
when I'm ready for it, and I like to batch things.  Pulling patches from the 
mailing list does this somewhat (although it's a lot of work), certainly a 
lot more than having a shared CVS pushing random unrelated changes at me at 
unpredictable times.  So there's the pull vs push aspect.  (You may remember 
the big hype about "push internet" in the late 90's, and how spectacular a 
flop that was.  Even rss is pull.)

There's also the whole bus issue.  I've always done a lot of work offline.  
It's when I'm not interrupted or distracted.  Right now, I can't do 
_anything_ with svn unless I'm connected to the internet.  (I made the 
downloads/patches directory to work around this a bit.  It's been an 
annoyance for a while.)

I'm also looking forward to being able to keep multiple lines of work 
separate, with local branching that means something.  Right now I've got a 
half-dozen stalled things (like the passwd rewrite, the sed NUL fix and 
associated get_line_from_file stuff, bbsh, the old init rewrite...) because 
by the time I'm halfway done, the tree they're in is stale.  (Or else bits of 
my working tree leak in before it's ready as I marshall other patches through 
it.)  When I go "svn update", svn is kind enough to drop >>>>>  <<<<< 
sections randomly into my tree which are a serious pain to clean up, and I 
don't usually notice them until the next build failure.  I want it to not do 
that.

I tried looking at svk a few months ago, which layers some decentralization 
workarounds on top of svn.  You know how I found out that the udhcp directory 
had been deleted and replaced with a symlink?  When svk barfed on that so 
badly it broke my local repository.  Once again, random changes to the 
central repository could reach out and interfere with whatever I was doing.  
Yeah, I know, a coincidence, but it left a bad taste in my mouth.

I hate fighting tools.  Fighting with a bug, sure, but fighting with 
development tools sets my teeth on edge.  I have to put up with gcc and make, 
but there are better alternatives for some other things, and I'm looking into 
them.

Anyway, that's why I'm poking at Mercurial.

Rob
-- 
Never bet against the cheap plastic solution.



More information about the busybox mailing list