Merge branch 'aa/status-hilite-branch'
authorJunio C Hamano <gitster@pobox.com>
Thu, 16 Dec 2010 20:50:03 +0000 (12:50 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 16 Dec 2010 20:50:03 +0000 (12:50 -0800)
* aa/status-hilite-branch:
default color.status.branch to "same as header"
status: show branchname with a configurable color

Documentation/config.txt
builtin/commit.c
color.c
color.h
t/t7508-status.sh
wt-status.c
wt-status.h
index 3f01bd929f4cffe71eb8de1366ef6065cbf711fc..488a27cd03b99362c5abbba8884c46e1704055ec 100644 (file)
@@ -790,7 +790,8 @@ color.status.<slot>::
        one of `header` (the header text of the status message),
        `added` or `updated` (files which are added but not committed),
        `changed` (files which are changed but not added in the index),
-       `untracked` (files which are not tracked by git), or
+       `untracked` (files which are not tracked by git),
+       `branch` (the current branch), or
        `nobranch` (the color the 'no branch' warning is shown in, defaulting
        to red). The values of these variables may be specified as in
        color.branch.<slot>.
index c045c9ef8cf19b5458c279cd46250c839285a4a4..6c09857a602193857cf8907c1c1c2574053e29e1 100644 (file)
@@ -1011,6 +1011,8 @@ static int parse_status_slot(const char *var, int offset)
 {
        if (!strcasecmp(var+offset, "header"))
                return WT_STATUS_HEADER;
+       if (!strcasecmp(var+offset, "branch"))
+               return WT_STATUS_ONBRANCH;
        if (!strcasecmp(var+offset, "updated")
                || !strcasecmp(var+offset, "added"))
                return WT_STATUS_UPDATED;
diff --git a/color.c b/color.c
index 1b00554dd50d2960b4e66f229b0d2d0da8eb8c28..6a5a54ec668e08ddef0d2f27359f3ebb3272243b 100644 (file)
--- a/color.c
+++ b/color.c
@@ -211,3 +211,8 @@ int color_fprintf_ln(FILE *fp, const char *color, const char *fmt, ...)
        va_end(args);
        return r;
 }
+
+int color_is_nil(const char *c)
+{
+       return !strcmp(c, "NIL");
+}
diff --git a/color.h b/color.h
index 03ca0647485e8044d4131f2c61c37b4e9408cd2a..170ff4074d220e7e62264c4c63d1419f4a59d664 100644 (file)
--- a/color.h
+++ b/color.h
@@ -43,6 +43,9 @@
 #define GIT_COLOR_BG_MAGENTA   "\033[45m"
 #define GIT_COLOR_BG_CYAN      "\033[46m"
 
+/* A special value meaning "no color selected" */
+#define GIT_COLOR_NIL "NIL"
+
 /*
  * This variable stores the value of color.ui
  */
@@ -62,4 +65,6 @@ int color_fprintf(FILE *fp, const char *color, const char *fmt, ...);
 __attribute__((format (printf, 3, 4)))
 int color_fprintf_ln(FILE *fp, const char *color, const char *fmt, ...);
 
+int color_is_nil(const char *color);
+
 #endif /* COLOR_H */
index b73ab42936a8ea10dcdf40a6ad8b83d4a1d10056..f1dc5c3b6a36507e664e624bf9cebb1634bce335 100755 (executable)
@@ -405,12 +405,13 @@ test_expect_success 'status --porcelain ignores relative paths setting' '
 
 test_expect_success 'setup unique colors' '
 
-       git config status.color.untracked blue
+       git config status.color.untracked blue &&
+       git config status.color.branch green
 
 '
 
 cat >expect <<\EOF
-# On branch master
+# On branch <GREEN>master<RESET>
 # Changes to be committed:
 #   (use "git reset HEAD <file>..." to unstage)
 #
index 06ae161c6707e893ab723812b268016a05b950fe..123582b6cbdff90f4665fbf8db2c92d701680e4d 100644 (file)
@@ -21,11 +21,15 @@ static char default_wt_status_colors[][COLOR_MAXLEN] = {
        GIT_COLOR_RED,    /* WT_STATUS_UNMERGED */
        GIT_COLOR_GREEN,  /* WT_STATUS_LOCAL_BRANCH */
        GIT_COLOR_RED,    /* WT_STATUS_REMOTE_BRANCH */
+       GIT_COLOR_NIL,    /* WT_STATUS_ONBRANCH */
 };
 
 static const char *color(int slot, struct wt_status *s)
 {
-       return s->use_color > 0 ? s->color_palette[slot] : "";
+       const char *c = s->use_color > 0 ? s->color_palette[slot] : "";
+       if (slot == WT_STATUS_ONBRANCH && color_is_nil(c))
+               c = s->color_palette[WT_STATUS_HEADER];
+       return c;
 }
 
 void wt_status_prepare(struct wt_status *s)
@@ -625,7 +629,8 @@ static void wt_status_print_tracking(struct wt_status *s)
 
 void wt_status_print(struct wt_status *s)
 {
-       const char *branch_color = color(WT_STATUS_HEADER, s);
+       const char *branch_color = color(WT_STATUS_ONBRANCH, s);
+       const char *branch_status_color = color(WT_STATUS_HEADER, s);
 
        if (s->branch) {
                const char *on_what = "On branch ";
@@ -634,11 +639,12 @@ void wt_status_print(struct wt_status *s)
                        branch_name += 11;
                else if (!strcmp(branch_name, "HEAD")) {
                        branch_name = "";
-                       branch_color = color(WT_STATUS_NOBRANCH, s);
+                       branch_status_color = color(WT_STATUS_NOBRANCH, s);
                        on_what = "Not currently on any branch.";
                }
                color_fprintf(s->fp, color(WT_STATUS_HEADER, s), "# ");
-               color_fprintf_ln(s->fp, branch_color, "%s%s", on_what, branch_name);
+               color_fprintf(s->fp, branch_status_color, "%s", on_what);
+               color_fprintf_ln(s->fp, branch_color, "%s", branch_name);
                if (!s->is_initial)
                        wt_status_print_tracking(s);
        }
index 9df9c9fad2512d7c1d7d6456cdd645d641b5a089..20b17cf4393b8f9acce93320fb97998ad7cd609b 100644 (file)
@@ -13,7 +13,9 @@ enum color_wt_status {
        WT_STATUS_NOBRANCH,
        WT_STATUS_UNMERGED,
        WT_STATUS_LOCAL_BRANCH,
-       WT_STATUS_REMOTE_BRANCH
+       WT_STATUS_REMOTE_BRANCH,
+       WT_STATUS_ONBRANCH,
+       WT_STATUS_MAXSLOT
 };
 
 enum untracked_status_type {
@@ -46,7 +48,7 @@ struct wt_status {
        int show_ignored_files;
        enum untracked_status_type show_untracked_files;
        const char *ignore_submodule_arg;
-       char color_palette[WT_STATUS_REMOTE_BRANCH+1][COLOR_MAXLEN];
+       char color_palette[WT_STATUS_MAXSLOT][COLOR_MAXLEN];
 
        /* These are computed during processing of the individual sections */
        int commitable;