wt-status: refactor detached HEAD analysis
authorMichael J Gruber <git@drmicha.warpmail.net>
Fri, 6 Mar 2015 15:04:06 +0000 (16:04 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 6 Mar 2015 19:52:35 +0000 (11:52 -0800)
wt_status_print() is the only caller of wt_status_get_detached_from().
The latter performs most of the analysis of a detached HEAD, including
finding state->detached_from; the caller checks whether the detached
HEAD is still at state->detached_from or has moved away.

Move that last bit of analysis to wt_status_get_detached_from(), too,
and store the boolean result in state->detached_at.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
wt-status.c
wt-status.h

index b54eac5..8b7543b 100644 (file)
@@ -1222,6 +1222,8 @@ static void wt_status_get_detached_from(struct wt_status_state *state)
                state->detached_from =
                        xstrdup(find_unique_abbrev(cb.nsha1, DEFAULT_ABBREV));
        hashcpy(state->detached_sha1, cb.nsha1);
                state->detached_from =
                        xstrdup(find_unique_abbrev(cb.nsha1, DEFAULT_ABBREV));
        hashcpy(state->detached_sha1, cb.nsha1);
+       state->detached_at = !get_sha1("HEAD", sha1) &&
+                            !hashcmp(sha1, state->detached_sha1);
 
        free(ref);
        strbuf_release(&cb.buf);
 
        free(ref);
        strbuf_release(&cb.buf);
@@ -1310,10 +1312,8 @@ void wt_status_print(struct wt_status *s)
                                on_what = _("rebase in progress; onto ");
                                branch_name = state.onto;
                        } else if (state.detached_from) {
                                on_what = _("rebase in progress; onto ");
                                branch_name = state.onto;
                        } else if (state.detached_from) {
-                               unsigned char sha1[20];
                                branch_name = state.detached_from;
                                branch_name = state.detached_from;
-                               if (!get_sha1("HEAD", sha1) &&
-                                   !hashcmp(sha1, state.detached_sha1))
+                               if (state.detached_at)
                                        on_what = _("HEAD detached at ");
                                else
                                        on_what = _("HEAD detached from ");
                                        on_what = _("HEAD detached at ");
                                else
                                        on_what = _("HEAD detached from ");
index 283a9fe..e0a99f7 100644 (file)
@@ -84,6 +84,7 @@ struct wt_status_state {
        int cherry_pick_in_progress;
        int bisect_in_progress;
        int revert_in_progress;
        int cherry_pick_in_progress;
        int bisect_in_progress;
        int revert_in_progress;
+       int detached_at;
        char *branch;
        char *onto;
        char *detached_from;
        char *branch;
        char *onto;
        char *detached_from;