git-p4: don't groom exclude path list on every commit
[gitweb.git] / wt-status.c
index e582c54238719f50143f68229b1e0cf8a9ac9571..445a36204a69cf69f2d3e87ea6d308a6b5a9ab29 100644 (file)
@@ -748,12 +748,23 @@ static int has_unmerged(struct wt_status *s)
 
 void wt_status_collect(struct wt_status *s)
 {
+       trace2_region_enter("status", "worktrees", s->repo);
        wt_status_collect_changes_worktree(s);
-       if (s->is_initial)
+       trace2_region_leave("status", "worktrees", s->repo);
+
+       if (s->is_initial) {
+               trace2_region_enter("status", "initial", s->repo);
                wt_status_collect_changes_initial(s);
-       else
+               trace2_region_leave("status", "initial", s->repo);
+       } else {
+               trace2_region_enter("status", "index", s->repo);
                wt_status_collect_changes_index(s);
+               trace2_region_leave("status", "index", s->repo);
+       }
+
+       trace2_region_enter("status", "untracked", s->repo);
        wt_status_collect_untracked(s);
+       trace2_region_leave("status", "untracked", s->repo);
 
        wt_status_get_state(s->repo, &s->state, s->branch && !strcmp(s->branch, "HEAD"));
        if (s->state.merge_in_progress && !has_unmerged(s))
@@ -1565,6 +1576,7 @@ void wt_status_get_state(struct repository *r,
        struct object_id oid;
 
        if (!stat(git_path_merge_head(r), &st)) {
+               wt_status_check_rebase(NULL, state);
                state->merge_in_progress = 1;
        } else if (wt_status_check_rebase(NULL, state)) {
                ;               /* all set */
@@ -1589,9 +1601,13 @@ static void wt_longstatus_print_state(struct wt_status *s)
        const char *state_color = color(WT_STATUS_HEADER, s);
        struct wt_status_state *state = &s->state;
 
-       if (state->merge_in_progress)
+       if (state->merge_in_progress) {
+               if (state->rebase_interactive_in_progress) {
+                       show_rebase_information(s, state_color);
+                       fputs("\n", s->fp);
+               }
                show_merge_in_progress(s, state_color);
-       else if (state->am_in_progress)
+       else if (state->am_in_progress)
                show_am_in_progress(s, state_color);
        else if (state->rebase_in_progress || state->rebase_interactive_in_progress)
                show_rebase_in_progress(s, state_color);
@@ -2286,6 +2302,13 @@ static void wt_porcelain_v2_print(struct wt_status *s)
 
 void wt_status_print(struct wt_status *s)
 {
+       trace2_data_intmax("status", s->repo, "count/changed", s->change.nr);
+       trace2_data_intmax("status", s->repo, "count/untracked",
+                          s->untracked.nr);
+       trace2_data_intmax("status", s->repo, "count/ignored", s->ignored.nr);
+
+       trace2_region_enter("status", "print", s->repo);
+
        switch (s->status_format) {
        case STATUS_FORMAT_SHORT:
                wt_shortstatus_print(s);
@@ -2304,6 +2327,8 @@ void wt_status_print(struct wt_status *s)
                wt_longstatus_print(s);
                break;
        }
+
+       trace2_region_leave("status", "print", s->repo);
 }
 
 /**
@@ -2370,10 +2395,10 @@ int require_clean_work_tree(struct repository *r,
        struct lock_file lock_file = LOCK_INIT;
        int err = 0, fd;
 
-       fd = hold_locked_index(&lock_file, 0);
+       fd = repo_hold_locked_index(r, &lock_file, 0);
        refresh_index(r->index, REFRESH_QUIET, NULL, NULL, NULL);
        if (0 <= fd)
-               update_index_if_able(r->index, &lock_file);
+               repo_update_index_if_able(r, &lock_file);
        rollback_lock_file(&lock_file);
 
        if (has_unstaged_changes(r, ignore_submodules)) {