Merge branch 'ar/decorate-color'
authorJunio C Hamano <gitster@pobox.com>
Wed, 30 Jun 2010 18:55:40 +0000 (11:55 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 30 Jun 2010 18:55:40 +0000 (11:55 -0700)
* ar/decorate-color:
Add test for correct coloring of git log --decoration
Allow customizable commit decorations colors
log --decorate: Colorize commit decorations
log-tree.c: Use struct name_decoration's type for classifying decoration
commit.h: add 'type' to struct name_decoration

1  2 
Documentation/config.txt
builtin/log.c
commit.h
diff --combined Documentation/config.txt
index 4c491045c9fa8fba7e154af85686557598e90320,89cb487bd1dd79768e7bfb48e7cd1efbd86e74ea..72949e71ac0996c3a6af7ff98c4de5bb4a457625
@@@ -196,17 -196,20 +196,17 @@@ core.quotepath:
        quoted without `-z` regardless of the setting of this
        variable.
  
 -core.autocrlf::
 -      If true, makes git convert `CRLF` at the end of lines in text files to
 -      `LF` when reading from the work tree, and convert in reverse when
 -      writing to the work tree.  The variable can be set to
 -      'input', in which case the conversion happens only while
 -      reading from the work tree but files are written out to the work
 -      tree with `LF` at the end of lines.  A file is considered
 -      "text" (i.e. be subjected to the autocrlf mechanism) based on
 -      the file's `crlf` attribute, or if `crlf` is unspecified,
 -      based on the file's contents.  See linkgit:gitattributes[5].
 +core.eol::
 +      Sets the line ending type to use in the working directory for
 +      files that have the `text` property set.  Alternatives are
 +      'lf', 'crlf' and 'native', which uses the platform's native
 +      line ending.  The default value is `native`.  See
 +      linkgit:gitattributes[5] for more information on end-of-line
 +      conversion.
  
  core.safecrlf::
 -      If true, makes git check if converting `CRLF` as controlled by
 -      `core.autocrlf` is reversible.  Git will verify if a command
 +      If true, makes git check if converting `CRLF` is reversible when
 +      end-of-line conversion is active.  Git will verify if a command
        modifies a file in the work tree either directly or indirectly.
        For example, committing a file followed by checking out the
        same file should yield the original file in the work tree.  If
        irreversible conversion but continue the operation.
  +
  CRLF conversion bears a slight chance of corrupting data.
 -autocrlf=true will convert CRLF to LF during commit and LF to
 +When it is enabled, git will convert CRLF to LF during commit and LF to
  CRLF during checkout.  A file that contains a mixture of LF and
  CRLF before the commit cannot be recreated by git.  For text
  files this is the right thing to do: it corrects line endings
@@@ -240,25 -243,15 +240,25 @@@ converting CRLFs corrupts data
  +
  Note, this safety check does not mean that a checkout will generate a
  file identical to the original file for a different setting of
 -`core.autocrlf`, but only for the current one.  For example, a text
 -file with `LF` would be accepted with `core.autocrlf=input` and could
 -later be checked out with `core.autocrlf=true`, in which case the
 +`core.eol` and `core.autocrlf`, but only for the current one.  For
 +example, a text file with `LF` would be accepted with `core.eol=lf`
 +and could later be checked out with `core.eol=crlf`, in which case the
  resulting file would contain `CRLF`, although the original file
  contained `LF`.  However, in both work trees the line endings would be
  consistent, that is either all `LF` or all `CRLF`, but never mixed.  A
  file with mixed line endings would be reported by the `core.safecrlf`
  mechanism.
  
 +core.autocrlf::
 +      Setting this variable to "true" is almost the same as setting
 +      the `text` attribute to "auto" on all files except that text
 +      files are not guaranteed to be normalized: files that contain
 +      `CRLF` in the repository will not be touched.  Use this
 +      setting if you want to have `CRLF` line endings in your
 +      working directory even though the repository does not have
 +      normalized line endings.  This variable can be set to 'input',
 +      in which case no output conversion is performed.
 +
  core.symlinks::
        If false, symbolic links are checked out as small plain files that
        contain the link text. linkgit:git-update-index[1] and
@@@ -690,6 -683,11 +690,11 @@@ color.diff.<slot>:
        (highlighting whitespace errors). The values of these variables may be
        specified as in color.branch.<slot>.
  
+ color.decorate.<slot>::
+       Use customized color for 'git log --decorate' output.  `<slot>` is one
+       of `branch`, `remoteBranch`, `tag`, `stash` or `HEAD` for local
+       branches, remote tracking branches, tags, stash and HEAD, respectively.
  color.grep::
        When set to `always`, always highlight matches.  When `false` (or
        `never`), never.  When set to `true` or `auto`, use color only
@@@ -889,12 -887,6 +894,12 @@@ format.subjectprefix:
        The default for format-patch is to output files with the '[PATCH]'
        subject prefix. Use this variable to change that prefix.
  
 +format.signature::
 +      The default for format-patch is to output a signature containing
 +      the git version number. Use this variable to change that default.
 +      Set this variable to the empty string ("") to suppress
 +      signature generation.
 +
  format.suffix::
        The default for format-patch is to output files with the suffix
        `.patch`. Use this variable to change that suffix (make sure to
@@@ -992,15 -984,13 +997,15 @@@ gitcvs.logfile:
        various stuff. See linkgit:git-cvsserver[1].
  
  gitcvs.usecrlfattr::
 -      If true, the server will look up the `crlf` attribute for
 -      files to determine the '-k' modes to use. If `crlf` is set,
 -      the '-k' mode will be left blank, so cvs clients will
 -      treat it as text. If `crlf` is explicitly unset, the file
 +      If true, the server will look up the end-of-line conversion
 +      attributes for files to determine the '-k' modes to use. If
 +      the attributes force git to treat a file as text,
 +      the '-k' mode will be left blank so cvs clients will
 +      treat it as text. If they suppress text conversion, the file
        will be set with '-kb' mode, which suppresses any newline munging
 -      the client might otherwise do. If `crlf` is not specified,
 -      then 'gitcvs.allbinary' is used. See linkgit:gitattributes[5].
 +      the client might otherwise do. If the attributes do not allow
 +      the file type to be determined, then 'gitcvs.allbinary' is
 +      used. See linkgit:gitattributes[5].
  
  gitcvs.allbinary::
        This is used if 'gitcvs.usecrlfattr' does not resolve
diff --combined builtin/log.c
index 7cb9317af7d7de95197244b60cb90fbac8ddd947,0835866b153599ce504e32f5e7231b305718d4e9..08b872263cd646ec9d7dc8ad91273c71b1af2b69
@@@ -296,6 -296,9 +296,9 @@@ static int git_log_config(const char *v
                default_show_root = git_config_bool(var, value);
                return 0;
        }
+       if (!prefixcmp(var, "color.decorate."))
+               return parse_decorate_color_config(var, 15, value);
        return git_diff_ui_config(var, value, cb);
  }
  
@@@ -535,13 -538,13 +538,13 @@@ static void add_header(const char *valu
                len--;
  
        if (!strncasecmp(value, "to: ", 4)) {
 -              item = string_list_append(value + 4, &extra_to);
 +              item = string_list_append(&extra_to, value + 4);
                len -= 4;
        } else if (!strncasecmp(value, "cc: ", 4)) {
 -              item = string_list_append(value + 4, &extra_cc);
 +              item = string_list_append(&extra_cc, value + 4);
                len -= 4;
        } else {
 -              item = string_list_append(value, &extra_hdr);
 +              item = string_list_append(&extra_hdr, value);
        }
  
        item->string[len] = '\0';
  
  #define THREAD_SHALLOW 1
  #define THREAD_DEEP 2
 -static int thread = 0;
 -static int do_signoff = 0;
 +static int thread;
 +static int do_signoff;
 +static const char *signature = git_version_string;
  
  static int git_format_config(const char *var, const char *value, void *cb)
  {
        if (!strcmp(var, "format.to")) {
                if (!value)
                        return config_error_nonbool(var);
 -              string_list_append(value, &extra_to);
 +              string_list_append(&extra_to, value);
                return 0;
        }
        if (!strcmp(var, "format.cc")) {
                if (!value)
                        return config_error_nonbool(var);
 -              string_list_append(value, &extra_cc);
 +              string_list_append(&extra_cc, value);
                return 0;
        }
        if (!strcmp(var, "diff.color") || !strcmp(var, "color.diff")) {
                do_signoff = git_config_bool(var, value);
                return 0;
        }
 +      if (!strcmp(var, "format.signature"))
 +              return git_config_string(&signature, var, value);
  
        return git_log_config(var, value, cb);
  }
@@@ -706,12 -706,6 +709,12 @@@ static void gen_message_id(struct rev_i
        info->message_id = strbuf_detach(&buf, NULL);
  }
  
 +static void print_signature(void)
 +{
 +      if (signature && *signature)
 +              printf("-- \n%s\n\n", signature);
 +}
 +
  static void make_cover_letter(struct rev_info *rev, int use_stdout,
                              int numbered, int numbered_files,
                              struct commit *origin,
        diff_flush(&opts);
  
        printf("\n");
 +      print_signature();
  }
  
  static const char *clean_message_id(const char *msg_id)
@@@ -959,7 -952,7 +962,7 @@@ static int to_callback(const struct opt
        if (unset)
                string_list_clear(&extra_to, 0);
        else
 -              string_list_append(arg, &extra_to);
 +              string_list_append(&extra_to, arg);
        return 0;
  }
  
@@@ -968,7 -961,7 +971,7 @@@ static int cc_callback(const struct opt
        if (unset)
                string_list_clear(&extra_cc, 0);
        else
 -              string_list_append(arg, &extra_cc);
 +              string_list_append(&extra_cc, arg);
        return 0;
  }
  
@@@ -1045,8 -1038,6 +1048,8 @@@ int cmd_format_patch(int argc, const ch
                { OPTION_CALLBACK, 0, "thread", &thread, "style",
                            "enable message threading, styles: shallow, deep",
                            PARSE_OPT_OPTARG, thread_callback },
 +              OPT_STRING(0, "signature", &signature, "signature",
 +                          "add a signature"),
                OPT_END()
        };
  
                rev.ref_message_ids = xcalloc(1, sizeof(struct string_list));
        if (in_reply_to) {
                const char *msgid = clean_message_id(in_reply_to);
 -              string_list_append(msgid, rev.ref_message_ids);
 +              string_list_append(rev.ref_message_ids, msgid);
        }
        rev.numbered_files = numbered_files;
        rev.patch_suffix = fmt_patch_suffix;
                                    && (!cover_letter || rev.nr > 1))
                                        free(rev.message_id);
                                else
 -                                      string_list_append(rev.message_id,
 -                                                         rev.ref_message_ids);
 +                                      string_list_append(rev.ref_message_ids,
 +                                                         rev.message_id);
                        }
                        gen_message_id(&rev, sha1_to_hex(commit->object.sha1));
                }
                                       mime_boundary_leader,
                                       rev.mime_boundary);
                        else
 -                              printf("-- \n%s\n\n", git_version_string);
 +                              print_signature();
                }
                if (!use_stdout)
                        fclose(stdout);
diff --combined commit.h
index e958a7c3dfbb3ff76410dc83e47d0ffa950af9ea,ba818fccbeae11e69e3677b1abb120579f0246bb..eb2b8ac3cd5f375e70354e8c364abd036b0966ed
+++ b/commit.h
@@@ -28,6 -28,7 +28,7 @@@ extern const char *commit_type
  extern struct decoration name_decoration;
  struct name_decoration {
        struct name_decoration *next;
+       int type;
        char name[1];
  };
  
@@@ -60,7 -61,7 +61,7 @@@ enum cmit_fmt 
        CMIT_FMT_EMAIL,
        CMIT_FMT_USERFORMAT,
  
 -      CMIT_FMT_UNSPECIFIED,
 +      CMIT_FMT_UNSPECIFIED
  };
  
  struct pretty_print_context