Pushing after merge considered harmful

Eli Zaretskii eliz at gnu.org
Tue Jan 26 12:22:33 GMT 2010


> Date: Tue, 26 Jan 2010 05:25:03 -0600
> From: "Matthew D. Fuller" <fullermd at over-yonder.net>
> Cc: Alexander Belchenko <bialix at ukr.net>, bazaar at lists.canonical.com
> 
> On Tue, Jan 26, 2010 at 06:06:01AM -0500 I heard the voice of
> Eli Zaretskii, and lo! it spake thus:
> > > From: Alexander Belchenko <bialix at ukr.net>
> > 
> > > It prevents push to change revno for existing revisions in the
> > > branch.
> > 
> > See, that's what confuses me about the description in the docs: a
> > "revno" is just a number of a revision.  It is not the revision
> > itself.  A revision, AFAIU, is a node in the history DAG.  So why
> > are you talking about the revno? do you really mean the revision
> > number, or do you mean the revision itself?
> 
> Yes, he really means the revision number.  The revision can't change;
> that's definitional.  The number can, easily.

But the change in numbers is not in itself important, is it?  It is a
_sign_ of something, right?  I was asking what is that ``something''
that this option prevents, and why the docs cryptically describes it
via immutability of the "revnos", instead of calling out explicitly
that ``something'' which is prevented.

> Trying to describe what the option means for various operations is a
> losing game, because the number of possible things you can do is
> immense, so the list would be huge and seem full of special cases (and
> always be incomplete, too).  It can only be described in terms of what
> it means in a bzr sense, which is specific and unitary.

I asked about operations because the effect of each one of them on the
history DAG is not fully documented anywhere, AFAICS.  The URL you
cited (thanks!) could serve as a beginning for such a description, but
in its present form it is incomplete (only some operations are
mentioned), intentionally fuzzy, and hard to read because of its form
(a chat).

> And that
> requires that to figure out what it means in any given case, you need
> to understand the Bzr Gestalt.  That's certainly out of scope for a
> documentation of the option, and I'm sure it's not done well enough in
> the docs as a whole (such things never are).

The docs is not even close, unfortunately.  But I don't think it's
such a hard issue to explain, for someone who knows, actually.  It's
not the Gestalt that needs to be explained, but rather how each
command transforms the history DAG.  Of course, I'm talking from
ignorance, so maybe I don't even know what to ask for.

> The option means to not disturb the mainline.

That part is understood, thanks to all the responses here, but what
remains to be understood is the effect on other commands.  Only two
were mentioned to this moment: `uncommit' and `push'.  Are there
others?

Thanks.



More information about the bazaar mailing list