Hi,
Jeff Hostetler wrote:
> --- a/builtin/commit.c
> +++ b/builtin/commit.c
> @@ -141,6 +141,7 @@ static int sequencer_in_use;
> static int use_editor = 1, include_status = 1;
> static int show_ignored_in_status, have_option_m;
> static struct strbuf message = STRBUF_INIT;
> +static int ahead_behind_opt = -1;
nit: is there a logical place amid these constants to put the new option
instead of chronological order to make it easier to read through later?
That also has the side-benefit of making the new option less likely to
collidate with other patches that add a new option to commit.
That collection of options seems to be mostly about how the commit
message is generated. Maybe this one could go after status_format:
static enum wt_status_format status_format = ...;
static int ahead_behind;
Even better if it can be made into a local in cmd_status.
[...]
> @@ -1369,6 +1370,8 @@ int cmd_status(int argc, const char **argv, const char
> *prefix)
> N_("ignore changes to submodules, optional when: all, dirty,
> untracked. (Default: all)"),
> PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
> OPT_COLUMN(0, "column", &s.colopts, N_("list untracked files in
> columns")),
> + OPT_BOOL(0, "ahead-behind", &ahead_behind_opt,
> + N_("compute branch ahead/behind values")),
> OPT_END(),
Similar question: is there a natural place in "git status -h" to show
the new option instead of chronological order?
What does the value of the ahead_behind variable represent? -1 means
unset so that we use config? A comment might help.
[...]
> @@ -1389,6 +1392,21 @@ int cmd_status(int argc, const char **argv, const char
> *prefix)
> PATHSPEC_PREFER_FULL,
> prefix, argv);
>
> + /*
> + * Porcelain formats only look at the --[no-]ahead-behind command
> + * line argument and DO NOT look at the config setting. Non-porcelain
> + * formats use both.
> + */
nit: No need to shout: s/DO NOT/do not/
> + if (status_format == STATUS_FORMAT_PORCELAIN ||
> + status_format == STATUS_FORMAT_PORCELAIN_V2) {
> + if (ahead_behind_opt < 0)
> + ahead_behind_opt = ABF_FULL;
> + } else {
> + if (ahead_behind_opt < 0)
> + ahead_behind_opt = core_ahead_behind;
> + }
Can be more concise, to save the reader some time if they don't care
about the defaulting behavior:
if (ahead_behind_opt == -1) {
if (status_format == ...)
ahead_behind_opt = ...;
else
ahead_behind_opt = ...;
}
}
> + s.ab_flags = ((ahead_behind_opt) ? ABF_FULL : ABF_QUICK);
nit: both parens here are unnecessary and don't make the code clearer
[...]
> --- a/t/t7064-wtstatus-pv2.sh
> +++ b/t/t7064-wtstatus-pv2.sh
> @@ -390,6 +390,66 @@ test_expect_success 'verify upstream fields in branch
> header' '
> )
> '
>
> +test_expect_success 'verify --no-ahead-behind generates branch.qab' '
> + git checkout master &&
> + test_when_finished "rm -rf sub_repo" &&
> + git clone . sub_repo &&
> + (
> + ## Confirm local master tracks remote master.
> + cd sub_repo &&
> + HUF=$(git rev-parse HEAD) &&
> +
> + cat >expect <<-EOF &&
[...]
This looks like a collection of multiple tests. Is there a
straightforward way to split them into multiple independent
test_expect_successes?
That way, it's easier to tell which failed if there is a regression
later and to run only one of them (using GIT_SKIP_TESTS) when
debugging such a failure.
Thanks,
Jonathan