[RFC PATCH 2/2] status: improve info for detached HEAD after clone
When a remote ref or a tag is checked out, HEAD is automatically detached, and "git status" says 'HEAD detached at ...', instead of 'Not currently on any branch.'; this is done by traversing the reflog and parsing an entry like 'checkout: moving from ... to ...'.
In certain situations, HEAD can be detached after "git clone": for example, when "--branch" specifies a non-branch (e.g. a tag). It is preferable to avoid displaying 'Not currently on any branch.', so 'HEAD detached at $sha1' is shown instead.
Signed-off-by: Roy Eldar <royeldar0@gmail.com>
---
t/t7508-status.sh | 2 +-
wt-status.c | 7 +++++++
2 files changed, 8 insertions(+), 1 deletion(-)
Show changes to 2 files +8 −1
t/t7508-status.sh, wt-status.c
diff --git a/t/t7508-status.sh b/t/t7508-status.sh
index d279157d28..0ab5bdc1e0 100755
--- a/t/t7508-status.sh
+++ b/t/t7508-status.sh
@@ -894,7 +894,7 @@ test_expect_success 'status shows detached HEAD properly after cloning a reposit
git clone -b test_tag upstream downstream &&
git -C downstream status >actual &&
- grep -E "Not currently on any branch." actual
+ grep -E "HEAD detached at [0-9a-f]+" actual
'
test_expect_success 'setup status submodule summary' '
diff --git a/wt-status.c b/wt-status.c
index 3162241a57..f0a5fb578a 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -1632,6 +1632,13 @@ static int grab_1st_switch(struct object_id *ooid UNUSED,
struct grab_1st_switch_cbdata *cb = cb_data;
const char *target = NULL, *end;
+ if (skip_prefix(message, "clone: from ", &message)) {
+ oidcpy(&cb->noid, noid);
+ strbuf_reset(&cb->buf);
+ strbuf_add_unique_abbrev(&cb->buf, noid, DEFAULT_ABBREV);
+ return 1;
+ }
+
if (!skip_prefix(message, "checkout: moving from ", &message))
return 0;
target = strstr(message, " to ");
--
2.30.2