Re: [PATCH] branch: support configuring --sort via .gitconfig
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 16, 2018, 18:16 UTC
- Message-ID
- <xmqqva8advn2.fsf@gitster-ct.c.googlers.com>
- In-Reply-To
- <20180816093508.37193-1-samuel.maftoul@gmail.com>
samuel.maftoul@gmail.com writes:
Show 5 quoted lines
> From: Samuel Maftoul <samuel.maftoul@gmail.com> > > Add support for configuring default sort ordering for git branches. Command > line option will override this configured value, using the exact same > syntax.
Using the exact same syntax as ...?
Show 21 quoted lines
> Signed-off-by: Samuel Maftoul <samuel.maftoul@gmail.com> > --- > Documentation/config.txt | 6 +++++ > Documentation/git-branch.txt | 5 ++-- > builtin/branch.c | 10 +++++++- > t/t3200-branch.sh | 46 ++++++++++++++++++++++++++++++++++++ > 4 files changed, 64 insertions(+), 3 deletions(-) > > diff --git a/Documentation/config.txt b/Documentation/config.txt > index fd8d27e76..7f7a50123 100644 > --- a/Documentation/config.txt > +++ b/Documentation/config.txt > @@ -1039,6 +1039,12 @@ branch.autoSetupRebase:: > branch to track another branch. > This option defaults to never. > > +branch.sort:: > + This variable controls the sort ordering of branches when displayed by > + linkgit:git-branch[1]. Without the "--sort=<value>" option provided, the > + value of this variable will be used as the default. > + See linkgit:git-for-each-ref[1] field names for valid values.
OK, the answer to the above question is "same syntax as used for the value of the `branch.sort` configuration variable".
Show 15 quoted lines
> diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt > index 1072ca0eb..9767b2b48 100644 > --- a/Documentation/git-branch.txt > +++ b/Documentation/git-branch.txt > @@ -268,10 +268,11 @@ start-point is either a local or remote-tracking branch. > order of the value. You may use the --sort=<key> option > multiple times, in which case the last key becomes the primary > key. The keys supported are the same as those in `git > - for-each-ref`. Sort order defaults to sorting based on the > + for-each-ref`. Sort order defaults to the value configured for the > + `branch.sort` variable if exists, or to sorting based on the > full refname (including `refs/...` prefix). This lists > detached HEAD (if present) first, then local branches and > - finally remote-tracking branches. > + finally remote-tracking branches. See linkgit:git-config[1].
OK.
Show 16 quoted lines
> diff --git a/builtin/branch.c b/builtin/branch.c
> index 4fc55c350..bbd006aab 100644
> --- a/builtin/branch.c
> +++ b/builtin/branch.c
> @@ -74,6 +74,14 @@ define_list_config_array(color_branch_slots);
> static int git_branch_config(const char *var, const char *value, void *cb)
> {
> const char *slot_name;
> + struct ref_sorting **sorting_tail = (struct ref_sorting **)cb;
> +
> + if (!strcmp(var, "branch.sort")) {
> + if (!value)
> + return config_error_nonbool(var);
> + parse_ref_sorting(sorting_tail, value);
> + return 0;
> + }Hmph. It is unfortunate that "don't feed me NULL" check is not in parse_ref_sorting() but is in parse_opt_ref_sorting(). But that is a separate low-hanging fruit. The code we see here is correct.
Will queue. Thanks.