Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- ref-filter.c | 2 +- wt-status.c | 24 +++++++++++++----------- wt-status.h | 4 +++- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/ref-filter.c b/ref-filter.c index 0bccfceff2..1b229b84da 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -1409,7 +1409,7 @@ char *get_head_description(void) struct strbuf desc = STRBUF_INIT; struct wt_status_state state; memset(&state, 0, sizeof(state)); - wt_status_get_state(&state, 1); + wt_status_get_state(the_repository, &state, 1); if (state.rebase_in_progress || state.rebase_interactive_in_progress) { if (state.branch) diff --git a/wt-status.c b/wt-status.c index 57bc2aac0f..1d3a5fe267 100644 --- a/wt-status.c +++ b/wt-status.c @@ -1322,7 +1322,7 @@ static void show_rebase_in_progress(struct wt_status *s, status_printf_ln(s, color, _(" (use \"git rebase --abort\" to check out the original branch)")); } - } else if (state->rebase_in_progress || !stat(git_path_merge_msg(the_repository), &st)) { + } else if (state->rebase_in_progress || !stat(git_path_merge_msg(s->repo), &st)) { print_rebase_state(s, state, color); if (s->hints) status_printf_ln(s, color, @@ -1477,7 +1477,8 @@ static int grab_1st_switch(struct object_id *ooid, struct object_id *noid, return 1; } -static void wt_status_get_detached_from(struct wt_status_state *state) +static void wt_status_get_detached_from(struct repository *repo, + struct wt_status_state *state) { struct grab_1st_switch_cbdata cb; struct commit *commit; @@ -1494,7 +1495,7 @@ static void wt_status_get_detached_from(struct wt_status_state *state) /* sha1 is a commit? match without further lookup */ (!oidcmp(&cb.noid, &oid) || /* perhaps sha1 is a tag, try to dereference to a commit */ - ((commit = lookup_commit_reference_gently(the_repository, &oid, 1)) != NULL && + ((commit = lookup_commit_reference_gently(repo, &oid, 1)) != NULL && !oidcmp(&cb.noid, &commit->object.oid)))) { const char *from = ref; if (!skip_prefix(from, "refs/tags/", &from)) @@ -1551,30 +1552,31 @@ int wt_status_check_bisect(const struct worktree *wt, return 0; } -void wt_status_get_state(struct wt_status_state *state, +void wt_status_get_state(struct repository *repo, + struct wt_status_state *state, int get_detached_from) { struct stat st; struct object_id oid; - if (!stat(git_path_merge_head(the_repository), &st)) { + if (!stat(git_path_merge_head(repo), &st)) { state->merge_in_progress = 1; } else if (wt_status_check_rebase(NULL, state)) { ; /* all set */ - } else if (!stat(git_path_cherry_pick_head(the_repository), &st) && + } else if (!stat(git_path_cherry_pick_head(repo), &st) && !get_oid("CHERRY_PICK_HEAD", &oid)) { state->cherry_pick_in_progress = 1; oidcpy(&state->cherry_pick_head_oid, &oid); } wt_status_check_bisect(NULL, state); - if (!stat(git_path_revert_head(the_repository), &st) && + if (!stat(git_path_revert_head(repo), &st) && !get_oid("REVERT_HEAD", &oid)) { state->revert_in_progress = 1; oidcpy(&state->revert_head_oid, &oid); } if (get_detached_from) - wt_status_get_detached_from(state); + wt_status_get_detached_from(repo, state); } static void wt_longstatus_print_state(struct wt_status *s, @@ -1602,7 +1604,7 @@ static void wt_longstatus_print(struct wt_status *s) struct wt_status_state state; memset(&state, 0, sizeof(state)); - wt_status_get_state(&state, + wt_status_get_state(s->repo, &state, s->branch && !strcmp(s->branch, "HEAD")); if (s->branch) { @@ -1947,7 +1949,7 @@ static void wt_porcelain_v2_print_tracking(struct wt_status *s) char eol = s->null_termination ? '\0' : '\n'; memset(&state, 0, sizeof(state)); - wt_status_get_state(&state, s->branch && !strcmp(s->branch, "HEAD")); + wt_status_get_state(s->repo, &state, s->branch && !strcmp(s->branch, "HEAD")); fprintf(s->fp, "# branch.oid %s%c", (s->is_initial ? "(initial)" : sha1_to_hex(s->sha1_commit)), @@ -2355,7 +2357,7 @@ int has_uncommitted_changes(struct repository *repo, * We have no head (or it's corrupt); use the empty tree, * which will complain if the index is non-empty. */ - struct tree *tree = lookup_tree(the_repository, the_hash_algo->empty_tree); + struct tree *tree = lookup_tree(repo, the_hash_algo->empty_tree); add_pending_object(&rev_info, &tree->object, ""); } diff --git a/wt-status.h b/wt-status.h index 253c5ce7ec..9e8337e9db 100644 --- a/wt-status.h +++ b/wt-status.h @@ -132,7 +132,9 @@ void wt_status_add_cut_line(FILE *fp); void wt_status_prepare(struct wt_status *s, struct repository *repo); void wt_status_print(struct wt_status *s); void wt_status_collect(struct wt_status *s); -void wt_status_get_state(struct wt_status_state *state, int get_detached_from); +void wt_status_get_state(struct repository *repo, + struct wt_status_state *state, + int get_detached_from); int wt_status_check_rebase(const struct worktree *wt, struct wt_status_state *state); int wt_status_check_bisect(const struct worktree *wt, -- 2.19.0.rc0.337.ge906d732e7