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

Re: [GSoC][PATCH v2 2/3] rebase -i: rewrite setup_reflog_action() in C

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Jun 21, 2018, 10:34 UTC
Message-ID
<nycvar.QRO.7.76.6.1806211146360.11870@tvgsbejvaqbjf.bet>
In-Reply-To
<20180619154421.14999-3-alban.gruin@gmail.com>
Hi Alban,
On Tue, 19 Jun 2018, Alban Gruin wrote:
> This rewrites setup_reflog_action() from shell to C. The new version is
> called checkout_base_commit().

This sounds like a serious mistake. How is it that a function that sets up a reflog action all of a sudden checks out a base commit?

But you are correct, of course, that is exactly what the shell script function does!

So maybe insert "the (misnamed)" after "This rewrites"? That would help me in the future when I stumble across this commit again.

> A new command is added to rebase--helper.c, “checkout-base”, as such as
s/as such as/as well as/
> a new flag, “verbose”, to avoid silencing the output of the checkout
> operation called by checkout_base_commit().
> 
> The shell version is then stripped in favour of a call to the helper. As

Please start a new paragraph after this sentence, before the "As ...", because those two sentences represent different thoughts.

> $GIT_REFLOG_ACTION is not longer set at the first call of
s/not longer/no longer/
Show 35 quoted lines
> checkout_onto(), a call to comment_for_reflog() is added at the
> beginning of this function.
> 
> Signed-off-by: Alban Gruin <alban.gruin@gmail.com>
> ---
>  builtin/rebase--helper.c   |  9 +++++++--
>  git-rebase--interactive.sh | 16 ++--------------
>  sequencer.c                | 28 ++++++++++++++++++++++++++++
>  sequencer.h                |  3 +++
>  4 files changed, 40 insertions(+), 16 deletions(-)
> 
> diff --git a/builtin/rebase--helper.c b/builtin/rebase--helper.c
> index d2990b210..7cd74da2e 100644
> --- a/builtin/rebase--helper.c
> +++ b/builtin/rebase--helper.c
> @@ -12,12 +12,12 @@ static const char * const builtin_rebase_helper_usage[] = {
>  int cmd_rebase__helper(int argc, const char **argv, const char *prefix)
>  {
>  	struct replay_opts opts = REPLAY_OPTS_INIT;
> -	unsigned flags = 0, keep_empty = 0, rebase_merges = 0;
> +	unsigned flags = 0, keep_empty = 0, rebase_merges = 0, verbose = 0;
>  	int abbreviate_commands = 0, rebase_cousins = -1;
>  	enum {
>  		CONTINUE = 1, ABORT, MAKE_SCRIPT, SHORTEN_OIDS, EXPAND_OIDS,
>  		CHECK_TODO_LIST, SKIP_UNNECESSARY_PICKS, REARRANGE_SQUASH,
> -		ADD_EXEC, APPEND_TODO_HELP, EDIT_TODO
> +		ADD_EXEC, APPEND_TODO_HELP, EDIT_TODO, CHECKOUT_BASE
>  	} command = 0;
>  	struct option options[] = {
>  		OPT_BOOL(0, "ff", &opts.allow_ff, N_("allow fast-forward")),
> @@ -27,6 +27,7 @@ int cmd_rebase__helper(int argc, const char **argv, const char *prefix)
>  		OPT_BOOL(0, "rebase-merges", &rebase_merges, N_("rebase merge commits")),
>  		OPT_BOOL(0, "rebase-cousins", &rebase_cousins,
>  			 N_("keep original branch points of cousins")),
> +		OPT__VERBOSE(&verbose, N_("print subcommands output even if they succeed")),

That's very specific a description that applies only to this command mode... Maybe just say `"be verbose"`, and as a bonus avoid a too-long line?

Show 21 quoted lines
> diff --git a/sequencer.c b/sequencer.c
> index 9aa7ddb33..a7a73e3ef 100644
> --- a/sequencer.c
> +++ b/sequencer.c
> @@ -3133,6 +3133,34 @@ static const char *reflog_message(struct replay_opts *opts,
>  	return buf.buf;
>  }
>  
> +static int run_git_checkout(struct replay_opts *opts, const char *commit,
> +				int verbose, const char *action)
> +{
> +	struct child_process cmd = CHILD_PROCESS_INIT;
> +
> +	cmd.git_cmd = 1;
> +
> +	argv_array_push(&cmd.args, "checkout");
> +	argv_array_push(&cmd.args, commit);
> +	argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
> +
> +	return run_command_silent_on_success(&cmd, verbose);
> +}

Are you planning on reusing that code anywhere else than in `checkout_base_commit()`? If yes, sure, it makes sense to keep as separate function. Otherwise I would fold it into that latter function, for reading simplicity.

Show 18 quoted lines
> +
> +int checkout_base_commit(struct replay_opts *opts, const char *commit,
> +			 int verbose)
> +{
> +	const char *action;
> +
> +	if (commit && *commit) {
> +		action = reflog_message(opts, "start", "checkout %s", commit);
> +		if (run_git_checkout(opts, commit, verbose, action))
> +			return error(_("Could not checkout %s"), commit);
> +	}
> +
> +	return 0;
> +}
> +
>  static const char rescheduled_advice[] =
>  N_("Could not execute the todo command\n"
>  "\n"

The rest looks fine to me, thank you! Dscho

Previous: Alban GruinNext: Alban Gruin
Message 20 of 51 in “rebase -i: rewrite reflog operations in C”
  1. Alban GruinJun 18, 2018
  2. [GSoC][PATCH 1/3] sequencer: add a new function to silence a command, except if it fails.Alban Gruin, Jun 18, 2018
  3. Phillip WoodJun 18, 2018
  4. Alban GruinJun 18, 2018
  5. Christian CouderJun 18, 2018
  6. Alban GruinJun 18, 2018
  7. [GSoC][PATCH 2/3] rebase -i: rewrite setup_reflog_action() in CAlban Gruin, Jun 18, 2018
  8. Phillip WoodJun 18, 2018
  9. Alban GruinJun 18, 2018
  10. Stefan BellerJun 18, 2018
  11. Johannes SchindelinJun 19, 2018
  12. [GSoC][PATCH 3/3] rebase -i: rewrite checkout_onto() in CAlban Gruin, Jun 18, 2018
  13. Phillip WoodJun 18, 2018
  14. Alban GruinJun 18, 2018
  15. [GSoC][PATCH v2 0/3] rebase -i: rewrite reflog operations in CAlban Gruin, Jun 19, 2018
  16. [GSoC][PATCH v2 1/3] sequencer: add a new function to silence a command, except if it fails.Alban Gruin, Jun 19, 2018
  17. Johannes SchindelinJun 21, 2018
  18. Alban GruinJun 21, 2018
  19. [GSoC][PATCH v2 2/3] rebase -i: rewrite setup_reflog_action() in CAlban Gruin, Jun 19, 2018
  20. Johannes SchindelinJun 21, 2018
  21. [GSoC][PATCH v2 3/3] rebase -i: rewrite checkout_onto() in CAlban Gruin, Jun 19, 2018
  22. Johannes SchindelinJun 21, 2018
  23. Stefan BellerJun 19, 2018
  24. Johannes SchindelinJun 21, 2018
  25. [GSoC][PATCH v3 0/3] rebase -i: rewrite reflog operations in CAlban Gruin, Jun 21, 2018
  26. [GSoC][PATCH v3 1/3] sequencer: add a new function to silence a command, except if it fails.Alban Gruin, Jun 21, 2018
  27. Junio C HamanoJun 21, 2018
  28. Alban GruinJun 22, 2018
  29. [GSoC][PATCH v3 2/3] rebase -i: rewrite setup_reflog_action() in CAlban Gruin, Jun 21, 2018
  30. Junio C HamanoJun 22, 2018
  31. Alban GruinJun 22, 2018
  32. Junio C HamanoJun 25, 2018
  33. Alban GruinJun 25, 2018
  34. Johannes SchindelinJun 25, 2018
  35. Pratik KarkiJun 26, 2018
  36. Junio C HamanoJun 26, 2018
  37. [GSoC][PATCH v3 3/3] rebase -i: rewrite checkout_onto() in CAlban Gruin, Jun 21, 2018
  38. [GSoC][PATCH v4 0/3] rebase -i: rewrite reflog operations in CAlban Gruin, Jun 25, 2018
  39. [GSoC][PATCH v4 1/3] sequencer: extract a function to silence a command, except if it failsAlban Gruin, Jun 25, 2018
  40. [GSoC][PATCH v4 2/3] rebase -i: rewrite checkout_onto() in CAlban Gruin, Jun 25, 2018
  41. Junio C HamanoJun 26, 2018
  42. [GSoC][PATCH v4 3/3] rebase -i: rewrite setup_reflog_action() in CAlban Gruin, Jun 25, 2018
  43. [GSoC][PATCH v5 0/3] rebase -i: rewrite reflog operations in CAlban Gruin, Jun 29, 2018
  44. [GSoC][PATCH v5 1/3] sequencer: add a new function to silence a command, except if it fails.Alban Gruin, Jun 29, 2018
  45. [GSoC][PATCH v5 2/3] rebase -i: rewrite setup_reflog_action() in CAlban Gruin, Jun 29, 2018
  46. Junio C HamanoJun 29, 2018
  47. [GSoC][PATCH v5 3/3] rebase -i: rewrite checkout_onto() in CAlban Gruin, Jun 29, 2018
  48. Junio C HamanoJun 29, 2018
  49. Junio C HamanoJun 29, 2018
  50. Alban GruinJul 2, 2018
  51. Junio C HamanoJul 3, 2018

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.