git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 04/13] revert: Propogate errors upwards from do_pick_commit

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Jun 21, 2011, 16:22 UTC
Message-ID
<20110621162232.GI15461@elie>
In-Reply-To
<1308661489-20080-5-git-send-email-artagnon@gmail.com>
Ramkumar Ramachandra wrote:
Show 10 quoted lines
> 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)
[...]
Show 18 quoted lines
> @@ -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.

Show 12 quoted lines
>  
>  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.
Previous: Ramkumar RamachandraNext: Junio C Hamano
Message 13 of 47 in “Sequencer with continuation features”
  1. 00/13 Sequencer with continuation featuresRamkumar Ramachandra, Jun 21, 2011
  2. 01/13 advice: Introduce error_resolve_conflictRamkumar Ramachandra, Jun 21, 2011
  3. Jonathan NiederJun 21, 2011
  4. Junio C HamanoJun 21, 2011
  5. Ramkumar RamachandraJul 2, 2011
  6. Jonathan NiederJul 2, 2011
  7. 02/13 revert: Factor out add_message_to_msg functionRamkumar Ramachandra, Jun 21, 2011
  8. Jonathan NiederJun 21, 2011
  9. Junio C HamanoJun 21, 2011
  10. 03/13 revert: Don't check lone argument in get_encodingRamkumar Ramachandra, Jun 21, 2011
  11. Jonathan NiederJun 21, 2011
  12. 04/13 revert: Propogate errors upwards from do_pick_commitRamkumar Ramachandra, Jun 21, 2011
  13. Jonathan NiederJun 21, 2011
  14. Junio C HamanoJun 21, 2011
  15. Jonathan NiederJun 21, 2011
  16. Junio C HamanoJun 21, 2011
  17. Ramkumar RamachandraJul 2, 2011
  18. 05/13 revert: Eliminate global "commit" variableRamkumar Ramachandra, Jun 21, 2011
  19. Jonathan NiederJun 21, 2011
  20. Junio C HamanoJun 21, 2011
  21. 06/13 revert: Rename no_replay to record_originRamkumar Ramachandra, Jun 21, 2011
  22. 07/13 revert: Introduce struct to keep command-line optionsRamkumar Ramachandra, Jun 21, 2011
  23. Jonathan NiederJun 21, 2011
  24. Junio C HamanoJun 21, 2011
  25. 08/13 revert: Separate cmdline parsing from functional codeRamkumar Ramachandra, Jun 21, 2011
  26. Jonathan NiederJun 21, 2011
  27. 09/13 revert: Catch incompatible command-line options earlyRamkumar Ramachandra, Jun 21, 2011
  28. Jonathan NiederJun 21, 2011
  29. Ramkumar RamachandraJul 2, 2011
  30. Jonathan NiederJul 2, 2011
  31. Jonathan NiederJul 2, 2011
  32. Ramkumar RamachandraJul 2, 2011
  33. Jonathan NiederJul 2, 2011
  34. Jonathan NiederJul 2, 2011
  35. 10/13 revert: Persist data for continuationRamkumar Ramachandra, Jun 21, 2011
  36. Jonathan NiederJun 21, 2011
  37. Junio C HamanoJun 21, 2011
  38. 11/13 revert: Introduce a layer of indirection over pick_commitsRamkumar Ramachandra, Jun 21, 2011
  39. Junio C HamanoJun 21, 2011
  40. 12/13 revert: Introduce skip-all to cleanup sequencer dataRamkumar Ramachandra, Jun 21, 2011
  41. Junio C HamanoJun 21, 2011
  42. Ramkumar RamachandraJul 2, 2011
  43. Miles BaderJul 4, 2011
  44. Ramkumar RamachandraJul 5, 2011
  45. 13/13 revert: Introduce --continue to continue the operationRamkumar Ramachandra, Jun 21, 2011
  46. Jonathan NiederJun 21, 2011
  47. Jonathan NiederJun 21, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.