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

[PATCH 4/5] branch: use the "detached_head_first" sorting option

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Jan 6, 2021, 10:01 UTC
Message-ID
<20210106100139.14651-5-avarab@gmail.com>
In-Reply-To
<9bd85516f91c3e2fdefdafd51df71f75603e51f6.1560895672.git.matvore@google.com>

Use the new ref_sorting_detached_head_first_all() sorting option in ref-filter.c to revert and amend 28438e84e04 (ref-filter: sort detached HEAD lines firstly, 2019-06-18).

In Chinese the fullwidth versions of punctuation like "()" are typically written as (U+FF08 fullwidth left parenthesis), (U+FF09 fullwidth right parenthesis) instead. This form is used in both po/zh_{CN,TW}.po in most cases where "()" is translated in a string.

In 28438e84e04 the ability to translate this as part of the "git branch -l" output was removed because we'd like the detached line to appear first at the start of "git branch -l", e.g.:

    $ git branch -l
    * (HEAD detached at <hash>)
      master

Let's instead use the new ref_sorting_detached_head_first_all() in branch.c to say that we'd like these sorted before other entries.

As seen in the amended tests this made reverse sorting a bit more consistent. Before this we'd sometimes sort this message in the middle, now it's consistently at the beginning or end. Having it at the end doesn't make much sense either, but at least it behaves consistently now. A follow-up commit will make this behavior even better.

I'm removing the "TRANSLATORS" comments that were in the old code while I'm at it. Those were added in d4919bb288e (ref-filter: move get_head_description() from branch.c, 2017-01-10). I think it's obvious from context, string and translation memory in typical translation tools that these are the same or similar string.

1. https://en.wikipedia.org/wiki/Chinese_punctuation#Marks_similar_to_European_punctuation
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 builtin/branch.c         |  1 +
 ref-filter.c             | 27 +++++++++------------------
 t/t3203-branch-output.sh |  4 ++--
 wt-status.c              |  4 ++--
 wt-status.h              |  2 --
 5 files changed, 14 insertions(+), 24 deletions(-)
diff --git a/builtin/branch.c b/builtin/branch.c
index 045866a51ae..92221bdf8a6 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -740,6 +740,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 		if (!sorting)
 			sorting = ref_default_sorting();
 		ref_sorting_icase_all(sorting, icase);
+		ref_sorting_detached_head_first_all(sorting, 1);
 		print_ref_list(&filter, sorting, &format);
 		print_columns(&output, colopts, NULL);
 		string_list_clear(&output, 0);
diff --git a/ref-filter.c b/ref-filter.c
index 94ab3f86a53..7e0289cb659 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -1536,36 +1536,27 @@ char *get_head_description(void)
 	struct wt_status_state state;
 	memset(&state, 0, sizeof(state));
 	wt_status_get_state(the_repository, &state, 1);
-
-	/*
-	 * The ( character must be hard-coded and not part of a localizable
-	 * string, since the description is used as a sort key and compared
-	 * with ref names.
-	 */
-	strbuf_addch(&desc, '(');
 	if (state.rebase_in_progress ||
 	    state.rebase_interactive_in_progress) {
 		if (state.branch)
-			strbuf_addf(&desc, _("no branch, rebasing %s"),
+			strbuf_addf(&desc, _("(no branch, rebasing %s)"),
 				    state.branch);
 		else
-			strbuf_addf(&desc, _("no branch, rebasing detached HEAD %s"),
+			strbuf_addf(&desc, _("(no branch, rebasing detached HEAD %s)"),
 				    state.detached_from);
 	} else if (state.bisect_in_progress)
-		strbuf_addf(&desc, _("no branch, bisect started on %s"),
+		strbuf_addf(&desc, _("(no branch, bisect started on %s)"),
 			    state.branch);
 	else if (state.detached_from) {
 		if (state.detached_at)
-			strbuf_addstr(&desc, HEAD_DETACHED_AT);
+			strbuf_addf(&desc, _("(HEAD detached at %s)"),
+				state.detached_from);
 		else
-			strbuf_addstr(&desc, HEAD_DETACHED_FROM);
-		strbuf_addstr(&desc, state.detached_from);
-	}
-	else
-		strbuf_addstr(&desc, _("no branch"));
-	strbuf_addch(&desc, ')');
+			strbuf_addf(&desc, _("(HEAD detached from %s)"),
+				state.detached_from);
+	} else
+		strbuf_addstr(&desc, _("(no branch)"));
 
-	wt_status_state_free_buffers(&state);
 	return strbuf_detach(&desc, NULL);
 }
 
diff --git a/t/t3203-branch-output.sh b/t/t3203-branch-output.sh
index f92fb3aab9d..8f53b081365 100755
--- a/t/t3203-branch-output.sh
+++ b/t/t3203-branch-output.sh
@@ -223,8 +223,8 @@ test_expect_success 'git branch `--sort=[-]objectsize` option' '
 	cat >expect <<-\EOF &&
 	  branch-one
 	  main
-	* (HEAD detached from fromtag)
 	  branch-two
+	* (HEAD detached from fromtag)
 	EOF
 	git branch --sort=-objectsize >actual &&
 	test_i18ncmp expect actual
@@ -241,10 +241,10 @@ test_expect_success 'git branch `--sort=[-]type` option' '
 	test_i18ncmp expect actual &&
 
 	cat >expect <<-\EOF &&
-	* (HEAD detached from fromtag)
 	  branch-one
 	  branch-two
 	  main
+	* (HEAD detached from fromtag)
 	EOF
 	git branch --sort=-type >actual &&
 	test_i18ncmp expect actual
diff --git a/wt-status.c b/wt-status.c
index 7074bbdd53c..40b59be478c 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -1742,9 +1742,9 @@ static void wt_longstatus_print(struct wt_status *s)
 			} else if (s->state.detached_from) {
 				branch_name = s->state.detached_from;
 				if (s->state.detached_at)
-					on_what = HEAD_DETACHED_AT;
+					on_what = _("HEAD detached at ");
 				else
-					on_what = HEAD_DETACHED_FROM;
+					on_what = _("HEAD detached from ");
 			} else {
 				branch_name = "";
 				on_what = _("Not currently on any branch.");
diff --git a/wt-status.h b/wt-status.h
index 35b44c388ed..0d32799b28e 100644
--- a/wt-status.h
+++ b/wt-status.h
@@ -77,8 +77,6 @@ enum wt_status_format {
 	STATUS_FORMAT_UNSPECIFIED
 };
 
-#define HEAD_DETACHED_AT _("HEAD detached at ")
-#define HEAD_DETACHED_FROM _("HEAD detached from ")
 #define SPARSE_CHECKOUT_DISABLED -1
 
 struct wt_status_state {
-- 
2.29.2.222.g5d2a92d10f8
Previous: Junio C HamanoNext: Ævar Arnfjörð Bjarmason
Message 32 of 36 in “ref-filter: sort detached HEAD lines firstly”
  1. ref-filter: sort detached HEAD lines firstlyMatthew DeVore, Jun 6, 2019
  2. Johannes SchindelinJun 9, 2019
  3. Johannes SchindelinJun 9, 2019
  4. Matthew DeVoreJun 10, 2019
  5. Jonathan NiederJun 11, 2019
  6. Matthew DeVoreJun 11, 2019
  7. Junio C HamanoJun 11, 2019
  8. 0/1 Sort detached HEAD lines firstlyMatthew DeVore, Jun 11, 2019
  9. 1/1 ref-filter: sort detached HEAD lines firstlyMatthew DeVore, Jun 11, 2019
  10. Junio C HamanoJun 11, 2019
  11. Junio C HamanoJun 12, 2019
  12. Matthew DeVoreJun 13, 2019
  13. Matthew DeVoreJun 12, 2019
  14. Johannes SchindelinJun 12, 2019
  15. Jeff KingJun 13, 2019
  16. 0/1 Sort detached heads line firstlyMatthew DeVore, Jun 18, 2019
  17. 1/1 ref-filter: sort detached HEAD lines firstlyMatthew DeVore, Jun 18, 2019
  18. Junio C HamanoJun 19, 2019
  19. 0/5 branch: --sort improvementsÆvar Arnfjörð Bjarmason, Jan 6, 2021
  20. 1/7 branch: change "--local" to "--list" in commentÆvar Arnfjörð Bjarmason, Jan 7, 2021
  21. 0/7 branch: --sort improvementsÆvar Arnfjörð Bjarmason, Jan 7, 2021
  22. 4/7 ref-filter: move "cmp_fn" assignment into "else if" armÆvar Arnfjörð Bjarmason, Jan 7, 2021
  23. 2/7 branch tests: add to --sort testsÆvar Arnfjörð Bjarmason, Jan 7, 2021
  24. 3/7 ref-filter: add braces to if/else if/else chainÆvar Arnfjörð Bjarmason, Jan 7, 2021
  25. 6/7 branch: sort detached HEAD based on a flagÆvar Arnfjörð Bjarmason, Jan 7, 2021
  26. 7/7 branch: show "HEAD detached" first under reverse sortÆvar Arnfjörð Bjarmason, Jan 7, 2021
  27. 5/7 ref-filter: move ref_sorting flags to a bitfieldÆvar Arnfjörð Bjarmason, Jan 7, 2021
  28. Junio C HamanoJan 7, 2021
  29. 1/5 branch: change "--local" to "--list" in commentÆvar Arnfjörð Bjarmason, Jan 6, 2021
  30. 2/5 branch tests: add to --sort testsÆvar Arnfjörð Bjarmason, Jan 6, 2021
  31. Junio C HamanoJan 6, 2021
  32. 4/5 branch: use the "detached_head_first" sorting optionÆvar Arnfjörð Bjarmason, Jan 6, 2021
  33. 3/5 ref-filter: add a "detached_head_first" sorting optionÆvar Arnfjörð Bjarmason, Jan 6, 2021
  34. Junio C HamanoJan 6, 2021
  35. 5/5 branch: show "HEAD detached" first under reverse sortÆvar Arnfjörð Bjarmason, Jan 6, 2021
  36. Junio C HamanoJan 6, 2021

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.