push return code broken?
Martin Geisler
mg at lazybytes.net
Thu Feb 9 23:11:39 UTC 2012
John Coomes <John.Coomes at oracle.com> writes:
> 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.
This change has caused problems in our Jenkins build for JavaHg: when a
single 'hg pull' returns 1, the build is aborted. It has also caused
problems for a CruiseControl.NET build reported here:
http://stackoverflow.com/q/9215000/110204
I know 093b75c7b44b is marked as backwards incompatible, but maybe we
should think more carefully about this next time?
The change was put on the stable branch just a day or two before the
release. Sometimes we avoid changes because they could "break 1000's of
scripts" (despite having no idea if anybody is using this feature in a
script). Here we didn't and this actually breaks things here and there.
--
Martin Geisler
Mercurial links: http://mercurial.ch/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-devel/attachments/20120210/39e85fa8/attachment.asc>
More information about the Mercurial-devel
mailing list