Re: [PATCH] branch: support configuring --sort via .gitconfig
From: Junio C Hamano <hidden>
Date: 2018-08-16 18:16:58
samuel.maftoul@gmail.com writes:
From: Samuel Maftoul <redacted> 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 ...?
quoted hunk
Signed-off-by: Samuel Maftoul <redacted> --- 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".
quoted hunk
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.
quoted hunk
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.