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

[PATCH 2/3] for-each-ref: introduce %(HEAD) asterisk marker

From
Ramkumar Ramachandra <artagnon@gmail.com>
Date
Sep 27, 2013, 12:10 UTC
Message-ID
<1380283828-25420-3-git-send-email-artagnon@gmail.com>
In-Reply-To
<1380283828-25420-1-git-send-email-artagnon@gmail.com>

'git branch' shows which branch you are currently on with an '*', but 'git for-each-ref' misses this feature. So, extend its format with %(HEAD) for the same effect.

Now you can use the following format in for-each-ref:
  %C(red)%(HEAD)%C(reset) %(refname:short)
to display a red asterisk next to the current ref.
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
---
 Documentation/git-for-each-ref.txt |  4 ++++
 builtin/for-each-ref.c             | 13 +++++++++++--
 2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
index 078a116..f1d4e9e 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -95,6 +95,10 @@ upstream::
 	from the displayed ref. Respects `:short` in the same way as
 	`refname` above.
 
+HEAD::
+	Used to indicate the currently checked out branch.  Is '*' if
+	HEAD points to the current ref, and ' ' otherwise.
+
 In addition to the above, for commit and tag objects, the header
 field names (`tree`, `parent`, `object`, `type`, and `tag`) can
 be used to specify the value in the header field.
diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
index a1ca186..e54b5d8 100644
--- a/builtin/for-each-ref.c
+++ b/builtin/for-each-ref.c
@@ -76,6 +76,7 @@ static struct {
 	{ "upstream" },
 	{ "symref" },
 	{ "flag" },
+	{ "HEAD" },
 };
 
 /*
@@ -682,8 +683,16 @@ static void populate_value(struct refinfo *ref)
 				v->s = xstrdup(buf + 1);
 			}
 			continue;
-		}
-		else
+		} else if (!strcmp(name, "HEAD")) {
+			const char *head;
+			unsigned char sha1[20];
+			head = resolve_ref_unsafe("HEAD", sha1, 1, NULL);
+			if (!strcmp(ref->refname, head))
+				v->s = "*";
+			else
+				v->s = " ";
+			continue;
+		} else
 			continue;
 
 		formatp = strchr(name, ':');
-- 
1.8.4.478.g55109e3
Previous: Phil HordNext: Ramkumar Ramachandra
Message 4 of 13 in “Juggling between hot branches”
  1. 0/3 Juggling between hot branchesRamkumar Ramachandra, Sep 27, 2013
  2. 1/3 for-each-ref: introduce %C(...) for colorRamkumar Ramachandra, Sep 27, 2013
  3. Phil HordSep 27, 2013
  4. 2/3 for-each-ref: introduce %(HEAD) asterisk markerRamkumar Ramachandra, Sep 27, 2013
  5. 3/3 for-each-ref: introduce %(upstream:track[short])Ramkumar Ramachandra, Sep 27, 2013
  6. Phil HordSep 27, 2013
  7. Ramkumar RamachandraSep 27, 2013
  8. Johannes SixtSep 27, 2013
  9. Ramkumar RamachandraSep 27, 2013
  10. Jonathan NiederSep 27, 2013
  11. Philip OakleySep 27, 2013
  12. Ramkumar RamachandraSep 27, 2013
  13. Philip OakleySep 27, 2013

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.