From: Jonathan Nieder <jrnieder@gmail.com>
To: Ramkumar Ramachandra <artagnon@gmail.com>
Cc: Git List <git@vger.kernel.org>,
Junio C Hamano <gitster@pobox.com>,
Christian Couder <chriscool@tuxfamily.org>,
Daniel Barkalow <barkalow@iabervon.org>
Subject: Re: [PATCH 04/13] revert: Propogate errors upwards from do_pick_commit
Date: Tue, 21 Jun 2011 11:22:32 -0500 [thread overview]
Message-ID: <20110621162232.GI15461@elie> (raw)
In-Reply-To: <1308661489-20080-5-git-send-email-artagnon@gmail.com>
Ramkumar Ramachandra wrote:
> Earlier, revert_or_cherry_pick only used to return a non-negative
> number or die. Change this so that it can return negative values too;
> postive return values indicate conflicts, while negative ones indicate
> other errors, and this return status is propogated updwards from
> do_pick_commit, to be finally handled in cmd_cherry_pick and
> cmd_revert. While revert_or_cherry_pick can still die due to several
> other reasons, this patches attempts to factor out some of the die
> calls. In the same spirit, also introduce a new function
> error_dirty_index, based on die_dirty_index which prints some hints
> and returns an error to its caller do_pick_commit.
The "Earlier" combined with imperfect tense somehow oddly trips me up
(somehow it does not register that you mean "Before this patch"). I
usually find using the present or the simple past for the status quo
is clearer ("Currently the return value from revert_or_cherry_pick is
a non-negative integer representing the intended exit status from git
revert or git cherry-pick. Change that by ...").
Carrying forward from that confusion, it's hard to concentrate hard
enough to parse and figure out the rest. That shouldn't be necessary:
by setting the scene with an explanation of the problem being solved
it should be possible to make this much simpler.
Suppose, forgetting the above, that I asked you to explain what this
patch is about. You'd say it's about teaching "revert_or_cherry_pick"
to return error() instead of die()-ing a little more often, right?
Then if I asked you why, you might say one of many things --- for
example, that in the long term the hope is to allow speeding up
multiple-cherry-pick by not writing CHERRY_PICK_HEAD et al until a
single-commit pick fails, and that die()-ing interferes with that by
not moving the thread of control to the caller that wants to write
files like CHERRY_PICK_HEAD on error. After that, I might ask what
this patch does to address that, and you might tell me that in
addition to converting various die() calls to "return error()", it
updates the callers to cope with the negative return codes that could
result from that. Eventually the negative value gets returned from
revert_or_cherry_pick; currently the convention there is to return a
nonnegative integer (representing an appropriate "normal" exit status
for the command) but in the new regime it can also be -1, meaning the
command failed and should die(). Finally if I asked you what the
impact of applying this patch is, you might tell me that the benefits
will require converting more die() calls so the only immediate impact
should be to change various messages from "fatal:" to "error:" and add
a new
fatal: cherry-pick failed
at the end.
> --- a/builtin/revert.c
> +++ b/builtin/revert.c
> @@ -250,25 +250,15 @@ static struct tree *empty_tree(void)
[...]
> @@ -582,14 +572,28 @@ static int revert_or_cherry_pick(int argc, const char **argv)
>
> int cmd_revert(int argc, const char **argv, const char *prefix)
> {
> + int res;
> if (isatty(0))
> edit = 1;
> action = REVERT;
> - return revert_or_cherry_pick(argc, argv);
> + res = revert_or_cherry_pick(argc, argv);
> + if (res > 0)
> + /* Exit status from conflict */
> + return res;
> + if (res < 0)
> + /* Other error */
> + die(_("%s failed"), me);
> + return 0;
> }
With the above explanation in mind, it seems simpler to say
if (res < 0)
die(...);
return res;
the idea being that there are two cases --- the new "die for failure"
case and the old "pass on the exit status requested by
revert_or_cherry_pick" case.
>
> int cmd_cherry_pick(int argc, const char **argv, const char *prefix)
> {
> + int res;
> action = CHERRY_PICK;
> - return revert_or_cherry_pick(argc, argv);
> + res = revert_or_cherry_pick(argc, argv);
> + if (res > 0)
> + return res;
> + if (res < 0)
> + die(_("%s failed"), me);
> + return 0;
Should the "revert" or "cherry-pick" here be part of the message
marked for translation? A translator might want to paraphrase to
fatal: failed to cherry-pick
if that is more natural in the language at hand.
next prev parent reply other threads:[~2011-06-21 16:22 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-21 13:04 [PATCH 00/13] Sequencer with continuation features Ramkumar Ramachandra
2011-06-21 13:04 ` [PATCH 01/13] advice: Introduce error_resolve_conflict Ramkumar Ramachandra
2011-06-21 15:55 ` Jonathan Nieder
2011-06-21 18:43 ` Junio C Hamano
2011-07-02 9:44 ` Ramkumar Ramachandra
2011-07-02 10:09 ` Jonathan Nieder
2011-06-21 13:04 ` [PATCH 02/13] revert: Factor out add_message_to_msg function Ramkumar Ramachandra
2011-06-21 15:58 ` Jonathan Nieder
2011-06-21 19:01 ` Junio C Hamano
2011-06-21 13:04 ` [PATCH 03/13] revert: Don't check lone argument in get_encoding Ramkumar Ramachandra
2011-06-21 16:03 ` Jonathan Nieder
2011-06-21 13:04 ` [PATCH 04/13] revert: Propogate errors upwards from do_pick_commit Ramkumar Ramachandra
2011-06-21 16:22 ` Jonathan Nieder [this message]
2011-06-21 19:19 ` Junio C Hamano
2011-06-21 19:32 ` Jonathan Nieder
2011-06-21 20:18 ` Junio C Hamano
2011-07-02 10:31 ` Ramkumar Ramachandra
2011-06-21 13:04 ` [PATCH 05/13] revert: Eliminate global "commit" variable Ramkumar Ramachandra
2011-06-21 16:52 ` Jonathan Nieder
2011-06-21 19:23 ` Junio C Hamano
2011-06-21 13:04 ` [PATCH 06/13] revert: Rename no_replay to record_origin Ramkumar Ramachandra
2011-06-21 13:04 ` [PATCH 07/13] revert: Introduce struct to keep command-line options Ramkumar Ramachandra
2011-06-21 16:58 ` Jonathan Nieder
2011-06-21 19:28 ` Junio C Hamano
2011-06-21 13:04 ` [PATCH 08/13] revert: Separate cmdline parsing from functional code Ramkumar Ramachandra
2011-06-21 17:00 ` Jonathan Nieder
2011-06-21 13:04 ` [PATCH 09/13] revert: Catch incompatible command-line options early Ramkumar Ramachandra
2011-06-21 17:04 ` Jonathan Nieder
2011-07-02 9:47 ` Ramkumar Ramachandra
2011-07-02 9:53 ` Jonathan Nieder
2011-07-02 10:04 ` Jonathan Nieder
2011-07-02 11:19 ` Ramkumar Ramachandra
2011-07-02 11:30 ` Jonathan Nieder
2011-07-02 20:02 ` Jonathan Nieder
2011-06-21 13:04 ` [PATCH 10/13] revert: Persist data for continuation Ramkumar Ramachandra
2011-06-21 17:11 ` Jonathan Nieder
2011-06-21 19:49 ` Junio C Hamano
2011-06-21 13:04 ` [PATCH 11/13] revert: Introduce a layer of indirection over pick_commits Ramkumar Ramachandra
2011-06-21 19:59 ` Junio C Hamano
2011-06-21 13:04 ` [PATCH 12/13] revert: Introduce skip-all to cleanup sequencer data Ramkumar Ramachandra
2011-06-21 20:02 ` Junio C Hamano
2011-07-02 6:24 ` Ramkumar Ramachandra
2011-07-04 4:59 ` Miles Bader
2011-07-05 10:47 ` Ramkumar Ramachandra
2011-06-21 13:04 ` [RFC PATCH 13/13] revert: Introduce --continue to continue the operation Ramkumar Ramachandra
2011-06-21 17:19 ` Jonathan Nieder
2011-06-21 15:48 ` [PATCH 00/13] Sequencer with continuation features Jonathan Nieder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110621162232.GI15461@elie \
--to=jrnieder@gmail.com \
--cc=artagnon@gmail.com \
--cc=barkalow@iabervon.org \
--cc=chriscool@tuxfamily.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).