ref-filter: pass ref_format struct to atom parsers
[gitweb.git] / wt-status.c
index bf651f16fae83ffe30676790685799e8f2280082..77c27c51134d2feff93befeee20f4523a37d524a 100644 (file)
@@ -137,6 +137,7 @@ void wt_status_prepare(struct wt_status *s)
        s->untracked.strdup_strings = 1;
        s->ignored.strdup_strings = 1;
        s->show_branch = -1;  /* unspecified */
+       s->show_stash = 0;
        s->display_comment_prefix = 0;
 }
 
@@ -801,6 +802,27 @@ static void wt_longstatus_print_changed(struct wt_status *s)
        wt_longstatus_print_trailer(s);
 }
 
+static int stash_count_refs(struct object_id *ooid, struct object_id *noid,
+                           const char *email, timestamp_t timestamp, int tz,
+                           const char *message, void *cb_data)
+{
+       int *c = cb_data;
+       (*c)++;
+       return 0;
+}
+
+static void wt_longstatus_print_stash_summary(struct wt_status *s)
+{
+       int stash_count = 0;
+
+       for_each_reflog_ent("refs/stash", stash_count_refs, &stash_count);
+       if (stash_count > 0)
+               status_printf_ln(s, GIT_COLOR_NORMAL,
+                                Q_("Your stash currently has %d entry",
+                                   "Your stash currently has %d entries", stash_count),
+                                stash_count);
+}
+
 static void wt_longstatus_print_submodule_summary(struct wt_status *s, int uncommitted)
 {
        struct child_process sm_summary = CHILD_PROCESS_INIT;
@@ -1579,7 +1601,10 @@ static void wt_longstatus_print(struct wt_status *s)
 
        if (s->is_initial) {
                status_printf_ln(s, color(WT_STATUS_HEADER, s), "%s", "");
-               status_printf_ln(s, color(WT_STATUS_HEADER, s), _("Initial commit"));
+               status_printf_ln(s, color(WT_STATUS_HEADER, s),
+                                s->commit_template
+                                ? _("Initial commit")
+                                : _("No commits yet"));
                status_printf_ln(s, color(WT_STATUS_HEADER, s), "%s", "");
        }
 
@@ -1642,6 +1667,8 @@ static void wt_longstatus_print(struct wt_status *s)
                } else
                        printf(_("nothing to commit, working tree clean\n"));
        }
+       if(s->show_stash)
+               wt_longstatus_print_stash_summary(s);
 }
 
 static void wt_shortstatus_unmerged(struct string_list_item *it,
@@ -1736,6 +1763,7 @@ static void wt_shortstatus_print_tracking(struct wt_status *s)
        const char *branch_color_remote = color(WT_STATUS_REMOTE_BRANCH, s);
 
        const char *base;
+       char *short_base;
        const char *branch_name;
        int num_ours, num_theirs;
        int upstream_is_gone = 0;
@@ -1749,7 +1777,7 @@ static void wt_shortstatus_print_tracking(struct wt_status *s)
 #define LABEL(string) (s->no_gettext ? (string) : _(string))
 
        if (s->is_initial)
-               color_fprintf(s->fp, header_color, LABEL(N_("Initial commit on ")));
+               color_fprintf(s->fp, header_color, LABEL(N_("No commits yet on ")));
 
        if (!strcmp(s->branch, "HEAD")) {
                color_fprintf(s->fp, color(WT_STATUS_NOBRANCH, s), "%s",
@@ -1770,10 +1798,10 @@ static void wt_shortstatus_print_tracking(struct wt_status *s)
                upstream_is_gone = 1;
        }
 
-       base = shorten_unambiguous_ref(base, 0);
+       short_base = shorten_unambiguous_ref(base, 0);
        color_fprintf(s->fp, header_color, "...");
-       color_fprintf(s->fp, branch_color_remote, "%s", base);
-       free((char *)base);
+       color_fprintf(s->fp, branch_color_remote, "%s", short_base);
+       free(short_base);
 
        if (!upstream_is_gone && !num_ours && !num_theirs)
                goto conclude;