push return code broken?

John Coomes John.Coomes at oracle.com
Mon Jan 30 16:32:28 CST 2012


Matt Mackall (mpm at selenic.com) wrote:
> On Fri, 2012-01-27 at 17:13 -0800, John Coomes wrote:
> > Matt Mackall (mpm at selenic.com) wrote:
> > > On Fri, 2012-01-27 at 18:26 +0100, Markus Zapke-Gründemann wrote:
> > > > Hi,
> > > > 
> > > > could it be that the return code of push is always zero? I created the
> > > > following test where the last push operation fails because it returns zero. But
> > > > push docs say "Returns 0 if push was successful, 1 if nothing to push.".
> > > 
> > > Yes, this seems to be a bug.
> > 
> > FWIW, I'd rather see the docs changed than the return code.  The
> > mirror command, pull, returns 0 if nothing was pulled:
> > 
> >     Returns 0 on success, 1 if an update had unresolved files.
> 
> Well that's actually its own surprise, as I've always said the behavior
> of pull -u should match "hg pull && hg update" and not "hg pull; hg
> update" (ie don't update if nothing was pulled). Implicit in that is
> returning a failure code if nothing is set.
> 
> Currently we have the following return codes if nothing is found:
> 
>                 commit   incoming    outgoing      pull     push
> intended           1        1           1            1       1
> documented         1        1           1            0       1
> actual[1]          1        1           1            0       0
> 
> The behavior of push is especially surprising as the code sure reads
> like it ought to work.
> 
> The use of non-zero return codes for "nothing found" appears in a bunch
> of places in Mercurial. This traces its origins to the standard behavior
> of Unix grep which returns 1, thus making a whole bunch of scripty
> things possible that would otherwise be quite tedious. It was always the
> intent that you could do:
> 
>  hg pull && do-buildy-things

I usually use the idiom:

	hg pull || react-to-the-error

and a no-op pull isn't an error.  Obviously, it's possible to cope
with an empty pull returning 1, but it's no longer the trivial
statement above (same applies to 'hg pull && build-it' if it returns
0).

I see now that you've pushed the change, so it's moot.

> [1] Note that if you have the pager extension enabled, it might swallow
> the actual return code too!

Fortunately for me, I have it enabled only for help.

-John


More information about the Mercurial-devel mailing list