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