[Cabal] Revision 02579a62368e29abc96596d62ad6d418fc23ddda

Ethan Blanton elb at psg.com
Fri Feb 2 10:21:22 EST 2007

Evan Schoenberg spake unto us the following wisdom:
> >You did, in fact, change all of those files in that commit, because it
> >was a merge of the change that you made and a revision which changed
> >the other files.  The mtn log command gives you an error because your
> >mtn is old; I strongly suggest running 0.32 on all machines that you
> >use.
> I had an experience the other day of being in libpurple, doing mtn  
> commit, and finding myself committing changes which were in pidgin in  
> addition. Worked out okay since I was going to commit those next  
> anyways.. but is that expected? I was similarly surprised.

Note that this is not at all what happened to Sadrul; he did in fact
commit only the one file he intended to commit, and the other revision
(with all the changed files) was a merge with some windows-loving
revision that changed a bunch of other files.  So what you had was:

       gtkblist.c ----------,
      /                      \
parent                        merge revision (gtkblist.c, Make...)
      \                      /
       Makefile.mingw, ... -'

The rightmost revision there is what concerned Sadrul, but it wasn't
really a problem, it's just getting used to merge revisions.

In your situation, what you have run into is that monotone
(rightfully, I believe) treats the entire source tree as one coherent
project.  (Note that this is the same as OpenCM, another VCS that I
like very much, but which is unfortunately dead in the water.)  This
is in contract to CVS and SVN (and their still recognizable parent,
RCS), which have no concept of a project tree, but treat every single
directory as its own root.  This is why you can check out completely
nonsensical partial trees using CVS and SVN, and why SVN has a .svn
directory in every single directory of the hierarchy.  When you run
any number of commands in monotone (ci, status, up, ...), they operate
on the _entire tree_, not the current subdirectory, and this is by
design.  To cause the behavior you wanted, you must restrict the
command with a path to a directory or to a file; in your case, 'mtn ci
.' would probably have done what you wanted.

Personally, for a lot of very good reasons, I run a diff before a
commit.  That will prevent mistakes like this, and also helps me catch
extraneous debugging statements, etc., which I am wont to leave in


The laws that forbid the carrying of arms are laws [that have no remedy
for evils].  They disarm only those who are neither inclined nor
determined to commit crimes.
		-- Cesare Beccaria, "On Crimes and Punishments", 1764
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://pidgin.im/cgi-bin/mailman/private/cabal/attachments/20070202/b0381a2b/attachment-0001.pgp 

More information about the Cabal mailing list