Merge branch 'al/ansi-color'
authorJunio C Hamano <gitster@pobox.com>
Thu, 5 Mar 2009 23:41:19 +0000 (15:41 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 5 Mar 2009 23:41:19 +0000 (15:41 -0800)
* al/ansi-color:
builtin-branch.c: Rename branch category color names
Clean up use of ANSI color sequences

1  2 
builtin-branch.c
diff.c
pretty.c
diff --combined builtin-branch.c
index 504a981ad56f73a547c11bf3e18185f67111d000,6d241c8eac5372ff4aca259897c01ffeda8eb1dc..60f70acd144f95c9502f5d8c370fea20d1d6b010
@@@ -32,18 -32,18 +32,18 @@@ static unsigned char head_sha1[20]
  
  static int branch_use_color = -1;
  static char branch_colors[][COLOR_MAXLEN] = {
-       "\033[m",       /* reset */
-       "",             /* PLAIN (normal) */
-       "\033[31m",     /* REMOTE (red) */
-       "",             /* LOCAL (normal) */
-       "\033[32m",     /* CURRENT (green) */
+       GIT_COLOR_RESET,
+       GIT_COLOR_NORMAL,       /* PLAIN */
+       GIT_COLOR_RED,          /* REMOTE */
+       GIT_COLOR_NORMAL,       /* LOCAL */
+       GIT_COLOR_GREEN,        /* CURRENT */
  };
  enum color_branch {
-       COLOR_BRANCH_RESET = 0,
-       COLOR_BRANCH_PLAIN = 1,
-       COLOR_BRANCH_REMOTE = 2,
-       COLOR_BRANCH_LOCAL = 3,
-       COLOR_BRANCH_CURRENT = 4,
+       BRANCH_COLOR_RESET = 0,
+       BRANCH_COLOR_PLAIN = 1,
+       BRANCH_COLOR_REMOTE = 2,
+       BRANCH_COLOR_LOCAL = 3,
+       BRANCH_COLOR_CURRENT = 4,
  };
  
  static enum merge_filter {
@@@ -56,15 -56,15 +56,15 @@@ static unsigned char merge_filter_ref[2
  static int parse_branch_color_slot(const char *var, int ofs)
  {
        if (!strcasecmp(var+ofs, "plain"))
-               return COLOR_BRANCH_PLAIN;
+               return BRANCH_COLOR_PLAIN;
        if (!strcasecmp(var+ofs, "reset"))
-               return COLOR_BRANCH_RESET;
+               return BRANCH_COLOR_RESET;
        if (!strcasecmp(var+ofs, "remote"))
-               return COLOR_BRANCH_REMOTE;
+               return BRANCH_COLOR_REMOTE;
        if (!strcasecmp(var+ofs, "local"))
-               return COLOR_BRANCH_LOCAL;
+               return BRANCH_COLOR_LOCAL;
        if (!strcasecmp(var+ofs, "current"))
-               return COLOR_BRANCH_CURRENT;
+               return BRANCH_COLOR_CURRENT;
        die("bad config variable '%s'", var);
  }
  
@@@ -99,7 -99,6 +99,7 @@@ static int delete_branches(int argc, co
        const char *fmt, *remote;
        int i;
        int ret = 0;
 +      struct strbuf bname = STRBUF_INIT;
  
        switch (kinds) {
        case REF_REMOTE_BRANCH:
                if (!head_rev)
                        die("Couldn't look up commit object for HEAD");
        }
 -      for (i = 0; i < argc; i++) {
 -              if (kinds == REF_LOCAL_BRANCH && !strcmp(head, argv[i])) {
 +      for (i = 0; i < argc; i++, strbuf_release(&bname)) {
 +              int len = strlen(argv[i]);
 +
 +              if (interpret_nth_last_branch(argv[i], &bname) != len)
 +                      strbuf_add(&bname, argv[i], len);
 +
 +              if (kinds == REF_LOCAL_BRANCH && !strcmp(head, bname.buf)) {
                        error("Cannot delete the branch '%s' "
 -                              "which you are currently on.", argv[i]);
 +                            "which you are currently on.", bname.buf);
                        ret = 1;
                        continue;
                }
  
                free(name);
  
 -              name = xstrdup(mkpath(fmt, argv[i]));
 +              name = xstrdup(mkpath(fmt, bname.buf));
                if (!resolve_ref(name, sha1, 1, NULL)) {
                        error("%sbranch '%s' not found.",
 -                                      remote, argv[i]);
 +                                      remote, bname.buf);
                        ret = 1;
                        continue;
                }
                if (!force &&
                    !in_merge_bases(rev, &head_rev, 1)) {
                        error("The branch '%s' is not an ancestor of "
 -                              "your current HEAD.\n"
 -                              "If you are sure you want to delete it, "
 -                              "run 'git branch -D %s'.", argv[i], argv[i]);
 +                            "your current HEAD.\n"
 +                            "If you are sure you want to delete it, "
 +                            "run 'git branch -D %s'.", bname.buf, bname.buf);
                        ret = 1;
                        continue;
                }
  
                if (delete_ref(name, sha1, 0)) {
                        error("Error deleting %sbranch '%s'", remote,
 -                             argv[i]);
 +                            bname.buf);
                        ret = 1;
                } else {
                        struct strbuf buf = STRBUF_INIT;
 -                      printf("Deleted %sbranch %s (%s).\n", remote, argv[i],
 -                              find_unique_abbrev(sha1, DEFAULT_ABBREV));
 -                      strbuf_addf(&buf, "branch.%s", argv[i]);
 +                      printf("Deleted %sbranch %s (%s).\n", remote,
 +                             bname.buf,
 +                             find_unique_abbrev(sha1, DEFAULT_ABBREV));
 +                      strbuf_addf(&buf, "branch.%s", bname.buf);
                        if (git_config_rename_section(buf.buf, NULL) < 0)
                                warning("Update of config-file failed");
                        strbuf_release(&buf);
@@@ -310,20 -303,20 +310,20 @@@ static void print_ref_item(struct ref_i
  
        switch (item->kind) {
        case REF_LOCAL_BRANCH:
-               color = COLOR_BRANCH_LOCAL;
+               color = BRANCH_COLOR_LOCAL;
                break;
        case REF_REMOTE_BRANCH:
-               color = COLOR_BRANCH_REMOTE;
+               color = BRANCH_COLOR_REMOTE;
                break;
        default:
-               color = COLOR_BRANCH_PLAIN;
+               color = BRANCH_COLOR_PLAIN;
                break;
        }
  
        c = ' ';
        if (current) {
                c = '*';
-               color = COLOR_BRANCH_CURRENT;
+               color = BRANCH_COLOR_CURRENT;
        }
  
        if (verbose) {
  
                printf("%c %s%-*s%s %s %s%s\n", c, branch_get_color(color),
                       maxwidth, item->name,
-                      branch_get_color(COLOR_BRANCH_RESET),
+                      branch_get_color(BRANCH_COLOR_RESET),
                       find_unique_abbrev(item->commit->object.sha1, abbrev),
                       stat.buf, sub);
                strbuf_release(&stat);
                strbuf_release(&subject);
        } else {
                printf("%c %s%s%s\n", c, branch_get_color(color), item->name,
-                      branch_get_color(COLOR_BRANCH_RESET));
+                      branch_get_color(BRANCH_COLOR_RESET));
        }
  }
  
diff --combined diff.c
index ff3624e9f65b928929045cf2f917ae604c0e0c3f,a3db16ea66b13dbc1715e6e54b6a2f0ae4669677..3feca1b1732c506b1c0990c489a3a0ee37078edb
--- 1/diff.c
--- 2/diff.c
+++ b/diff.c
@@@ -30,14 -30,14 +30,14 @@@ int diff_auto_refresh_index = 1
  static int diff_mnemonic_prefix;
  
  static char diff_colors[][COLOR_MAXLEN] = {
-       "\033[m",       /* reset */
-       "",             /* PLAIN (normal) */
-       "\033[1m",      /* METAINFO (bold) */
-       "\033[36m",     /* FRAGINFO (cyan) */
-       "\033[31m",     /* OLD (red) */
-       "\033[32m",     /* NEW (green) */
-       "\033[33m",     /* COMMIT (yellow) */
-       "\033[41m",     /* WHITESPACE (red background) */
+       GIT_COLOR_RESET,
+       GIT_COLOR_NORMAL,       /* PLAIN */
+       GIT_COLOR_BOLD,         /* METAINFO */
+       GIT_COLOR_CYAN,         /* FRAGINFO */
+       GIT_COLOR_RED,          /* OLD */
+       GIT_COLOR_GREEN,        /* NEW */
+       GIT_COLOR_YELLOW,       /* COMMIT */
+       GIT_COLOR_BG_RED,       /* WHITESPACE */
  };
  
  static void diff_filespec_load_driver(struct diff_filespec *one);
@@@ -2326,12 -2326,15 +2326,12 @@@ void diff_setup(struct diff_options *op
        options->break_opt = -1;
        options->rename_limit = -1;
        options->dirstat_percent = 3;
 -      DIFF_OPT_CLR(options, DIRSTAT_CUMULATIVE);
        options->context = 3;
  
        options->change = diff_change;
        options->add_remove = diff_addremove;
        if (diff_use_color_default > 0)
                DIFF_OPT_SET(options, COLOR_DIFF);
 -      else
 -              DIFF_OPT_CLR(options, COLOR_DIFF);
        options->detect_rename = diff_detect_rename_default;
  
        if (!diff_mnemonic_prefix) {
@@@ -2567,13 -2570,13 +2567,13 @@@ int diff_opt_parse(struct diff_options 
  
        /* xdiff options */
        else if (!strcmp(arg, "-w") || !strcmp(arg, "--ignore-all-space"))
 -              options->xdl_opts |= XDF_IGNORE_WHITESPACE;
 +              DIFF_XDL_SET(options, IGNORE_WHITESPACE);
        else if (!strcmp(arg, "-b") || !strcmp(arg, "--ignore-space-change"))
 -              options->xdl_opts |= XDF_IGNORE_WHITESPACE_CHANGE;
 +              DIFF_XDL_SET(options, IGNORE_WHITESPACE_CHANGE);
        else if (!strcmp(arg, "--ignore-space-at-eol"))
 -              options->xdl_opts |= XDF_IGNORE_WHITESPACE_AT_EOL;
 +              DIFF_XDL_SET(options, IGNORE_WHITESPACE_AT_EOL);
        else if (!strcmp(arg, "--patience"))
 -              options->xdl_opts |= XDF_PATIENCE_DIFF;
 +              DIFF_XDL_SET(options, PATIENCE_DIFF);
  
        /* flags options */
        else if (!strcmp(arg, "--binary")) {
                DIFF_OPT_SET(options, COLOR_DIFF);
        else if (!strcmp(arg, "--no-color"))
                DIFF_OPT_CLR(options, COLOR_DIFF);
 -      else if (!strcmp(arg, "--color-words"))
 -              options->flags |= DIFF_OPT_COLOR_DIFF | DIFF_OPT_COLOR_DIFF_WORDS;
 +      else if (!strcmp(arg, "--color-words")) {
 +              DIFF_OPT_SET(options, COLOR_DIFF);
 +              DIFF_OPT_SET(options, COLOR_DIFF_WORDS);
 +      }
        else if (!prefixcmp(arg, "--color-words=")) {
 -              options->flags |= DIFF_OPT_COLOR_DIFF | DIFF_OPT_COLOR_DIFF_WORDS;
 +              DIFF_OPT_SET(options, COLOR_DIFF);
 +              DIFF_OPT_SET(options, COLOR_DIFF_WORDS);
                options->word_regex = arg + 14;
        }
        else if (!strcmp(arg, "--exit-code"))
diff --combined pretty.c
index 6cd91491d348b9aabea902c0ea60465074e9c06e,66bae42f99ec791257a3005951dd2ab33301882f..d64212d4ccf354988977de8cf99987a21ba00039
+++ b/pretty.c
@@@ -210,13 -210,15 +210,13 @@@ static void add_merge_info(enum cmit_fm
        while (parent) {
                struct commit *p = parent->item;
                const char *hex = NULL;
 -              const char *dots;
                if (abbrev)
                        hex = find_unique_abbrev(p->object.sha1, abbrev);
                if (!hex)
                        hex = sha1_to_hex(p->object.sha1);
 -              dots = (abbrev && strlen(hex) != 40) ?  "..." : "";
                parent = parent->next;
  
 -              strbuf_addf(sb, " %s%s", hex, dots);
 +              strbuf_addf(sb, " %s", hex);
        }
        strbuf_addch(sb, '\n');
  }
@@@ -303,14 -305,23 +303,14 @@@ static char *logmsg_reencode(const stru
        return out;
  }
  
 -static int mailmap_name(struct strbuf *sb, const char *email)
 +static int mailmap_name(char *email, int email_len, char *name, int name_len)
  {
        static struct string_list *mail_map;
 -      char buffer[1024];
 -
        if (!mail_map) {
                mail_map = xcalloc(1, sizeof(*mail_map));
 -              read_mailmap(mail_map, ".mailmap", NULL);
 +              read_mailmap(mail_map, NULL);
        }
 -
 -      if (!mail_map->nr)
 -              return -1;
 -
 -      if (!map_email(mail_map, email, buffer, sizeof(buffer)))
 -              return -1;
 -      strbuf_addstr(sb, buffer);
 -      return 0;
 +      return mail_map->nr && map_user(mail_map, email, email_len, name, name_len);
  }
  
  static size_t format_person_part(struct strbuf *sb, char part,
        int start, end, tz = 0;
        unsigned long date = 0;
        char *ep;
 +      const char *name_start, *name_end, *mail_start, *mail_end, *msg_end = msg+len;
 +      char person_name[1024];
 +      char person_mail[1024];
  
        /* advance 'end' to point to email start delimiter */
        for (end = 0; end < len && msg[end] != '<'; end++)
        if (end >= len - 2)
                goto skip;
  
 +      /* Seek for both name and email part */
 +      name_start = msg;
 +      name_end = msg+end;
 +      while (name_end > name_start && isspace(*(name_end-1)))
 +              name_end--;
 +      mail_start = msg+end+1;
 +      mail_end = mail_start;
 +      while (mail_end < msg_end && *mail_end != '>')
 +              mail_end++;
 +      if (mail_end == msg_end)
 +              goto skip;
 +      end = mail_end-msg;
 +
 +      if (part == 'N' || part == 'E') { /* mailmap lookup */
 +              strlcpy(person_name, name_start, name_end-name_start+1);
 +              strlcpy(person_mail, mail_start, mail_end-mail_start+1);
 +              mailmap_name(person_mail, sizeof(person_mail), person_name, sizeof(person_name));
 +              name_start = person_name;
 +              name_end = name_start + strlen(person_name);
 +              mail_start = person_mail;
 +              mail_end = mail_start +  strlen(person_mail);
 +      }
        if (part == 'n' || part == 'N') {       /* name */
 -              while (end > 0 && isspace(msg[end - 1]))
 -                      end--;
 -              if (part != 'N' || !msg[end] || !msg[end + 1] ||
 -                  mailmap_name(sb, msg + end + 2) < 0)
 -                      strbuf_add(sb, msg, end);
 +              strbuf_add(sb, name_start, name_end-name_start);
                return placeholder_len;
        }
 -      start = ++end; /* save email start position */
 -
 -      /* advance 'end' to point to email end delimiter */
 -      for ( ; end < len && msg[end] != '>'; end++)
 -              ; /* do nothing */
 -
 -      if (end >= len)
 -              goto skip;
 -
 -      if (part == 'e') {      /* email */
 -              strbuf_add(sb, msg + start, end - start);
 +      if (part == 'e' || part == 'E') {       /* email */
 +              strbuf_add(sb, mail_start, mail_end-mail_start);
                return placeholder_len;
        }
  
@@@ -568,16 -567,16 +568,16 @@@ static size_t format_commit_item(struc
                        return end - placeholder + 1;
                }
                if (!prefixcmp(placeholder + 1, "red")) {
-                       strbuf_addstr(sb, "\033[31m");
+                       strbuf_addstr(sb, GIT_COLOR_RED);
                        return 4;
                } else if (!prefixcmp(placeholder + 1, "green")) {
-                       strbuf_addstr(sb, "\033[32m");
+                       strbuf_addstr(sb, GIT_COLOR_GREEN);
                        return 6;
                } else if (!prefixcmp(placeholder + 1, "blue")) {
-                       strbuf_addstr(sb, "\033[34m");
+                       strbuf_addstr(sb, GIT_COLOR_BLUE);
                        return 5;
                } else if (!prefixcmp(placeholder + 1, "reset")) {
-                       strbuf_addstr(sb, "\033[m");
+                       strbuf_addstr(sb, GIT_COLOR_RESET);
                        return 6;
                } else
                        return 0;