зеркало из https://github.com/microsoft/git.git
Merge branch 'bw/diff-metainfo-color'
* bw/diff-metainfo-color: diff: fix coloring of extended diff headers
This commit is contained in:
Коммит
448598b508
61
diff.c
61
diff.c
|
@ -1706,21 +1706,21 @@ static void builtin_diff(const char *name_a,
|
|||
if (lbl[0][0] == '/') {
|
||||
/* /dev/null */
|
||||
strbuf_addf(&header, "%snew file mode %06o%s\n", set, two->mode, reset);
|
||||
if (xfrm_msg && xfrm_msg[0])
|
||||
strbuf_addf(&header, "%s%s%s\n", set, xfrm_msg, reset);
|
||||
if (xfrm_msg)
|
||||
strbuf_addstr(&header, xfrm_msg);
|
||||
}
|
||||
else if (lbl[1][0] == '/') {
|
||||
strbuf_addf(&header, "%sdeleted file mode %06o%s\n", set, one->mode, reset);
|
||||
if (xfrm_msg && xfrm_msg[0])
|
||||
strbuf_addf(&header, "%s%s%s\n", set, xfrm_msg, reset);
|
||||
if (xfrm_msg)
|
||||
strbuf_addstr(&header, xfrm_msg);
|
||||
}
|
||||
else {
|
||||
if (one->mode != two->mode) {
|
||||
strbuf_addf(&header, "%sold mode %06o%s\n", set, one->mode, reset);
|
||||
strbuf_addf(&header, "%snew mode %06o%s\n", set, two->mode, reset);
|
||||
}
|
||||
if (xfrm_msg && xfrm_msg[0])
|
||||
strbuf_addf(&header, "%s%s%s\n", set, xfrm_msg, reset);
|
||||
if (xfrm_msg)
|
||||
strbuf_addstr(&header, xfrm_msg);
|
||||
|
||||
/*
|
||||
* we do not run diff between different kind
|
||||
|
@ -2379,30 +2379,36 @@ static void fill_metainfo(struct strbuf *msg,
|
|||
struct diff_filespec *one,
|
||||
struct diff_filespec *two,
|
||||
struct diff_options *o,
|
||||
struct diff_filepair *p)
|
||||
struct diff_filepair *p,
|
||||
int use_color)
|
||||
{
|
||||
const char *set = diff_get_color(use_color, DIFF_METAINFO);
|
||||
const char *reset = diff_get_color(use_color, DIFF_RESET);
|
||||
|
||||
strbuf_init(msg, PATH_MAX * 2 + 300);
|
||||
switch (p->status) {
|
||||
case DIFF_STATUS_COPIED:
|
||||
strbuf_addf(msg, "similarity index %d%%", similarity_index(p));
|
||||
strbuf_addstr(msg, "\ncopy from ");
|
||||
strbuf_addf(msg, "%ssimilarity index %d%%",
|
||||
set, similarity_index(p));
|
||||
strbuf_addf(msg, "%s\n%scopy from ", reset, set);
|
||||
quote_c_style(name, msg, NULL, 0);
|
||||
strbuf_addstr(msg, "\ncopy to ");
|
||||
strbuf_addf(msg, "%s\n%scopy to ", reset, set);
|
||||
quote_c_style(other, msg, NULL, 0);
|
||||
strbuf_addch(msg, '\n');
|
||||
strbuf_addf(msg, "%s\n", reset);
|
||||
break;
|
||||
case DIFF_STATUS_RENAMED:
|
||||
strbuf_addf(msg, "similarity index %d%%", similarity_index(p));
|
||||
strbuf_addstr(msg, "\nrename from ");
|
||||
strbuf_addf(msg, "%ssimilarity index %d%%",
|
||||
set, similarity_index(p));
|
||||
strbuf_addf(msg, "%s\n%srename from ", reset, set);
|
||||
quote_c_style(name, msg, NULL, 0);
|
||||
strbuf_addstr(msg, "\nrename to ");
|
||||
strbuf_addf(msg, "%s\n%srename to ", reset, set);
|
||||
quote_c_style(other, msg, NULL, 0);
|
||||
strbuf_addch(msg, '\n');
|
||||
strbuf_addf(msg, "%s\n", reset);
|
||||
break;
|
||||
case DIFF_STATUS_MODIFIED:
|
||||
if (p->score) {
|
||||
strbuf_addf(msg, "dissimilarity index %d%%\n",
|
||||
similarity_index(p));
|
||||
strbuf_addf(msg, "%sdissimilarity index %d%%%s\n",
|
||||
set, similarity_index(p), reset);
|
||||
break;
|
||||
}
|
||||
/* fallthru */
|
||||
|
@ -2419,15 +2425,13 @@ static void fill_metainfo(struct strbuf *msg,
|
|||
(!fill_mmfile(&mf, two) && diff_filespec_is_binary(two)))
|
||||
abbrev = 40;
|
||||
}
|
||||
strbuf_addf(msg, "index %.*s..%.*s",
|
||||
strbuf_addf(msg, "%sindex %.*s..%.*s", set,
|
||||
abbrev, sha1_to_hex(one->sha1),
|
||||
abbrev, sha1_to_hex(two->sha1));
|
||||
if (one->mode == two->mode)
|
||||
strbuf_addf(msg, " %06o", one->mode);
|
||||
strbuf_addch(msg, '\n');
|
||||
strbuf_addf(msg, "%s\n", reset);
|
||||
}
|
||||
if (msg->len)
|
||||
strbuf_setlen(msg, msg->len - 1);
|
||||
}
|
||||
|
||||
static void run_diff_cmd(const char *pgm,
|
||||
|
@ -2443,11 +2447,6 @@ static void run_diff_cmd(const char *pgm,
|
|||
const char *xfrm_msg = NULL;
|
||||
int complete_rewrite = (p->status == DIFF_STATUS_MODIFIED) && p->score;
|
||||
|
||||
if (msg) {
|
||||
fill_metainfo(msg, name, other, one, two, o, p);
|
||||
xfrm_msg = msg->len ? msg->buf : NULL;
|
||||
}
|
||||
|
||||
if (!DIFF_OPT_TST(o, ALLOW_EXTERNAL))
|
||||
pgm = NULL;
|
||||
else {
|
||||
|
@ -2456,6 +2455,16 @@ static void run_diff_cmd(const char *pgm,
|
|||
pgm = drv->external;
|
||||
}
|
||||
|
||||
if (msg) {
|
||||
/*
|
||||
* don't use colors when the header is intended for an
|
||||
* external diff driver
|
||||
*/
|
||||
fill_metainfo(msg, name, other, one, two, o, p,
|
||||
DIFF_OPT_TST(o, COLOR_DIFF) && !pgm);
|
||||
xfrm_msg = msg->len ? msg->buf : NULL;
|
||||
}
|
||||
|
||||
if (pgm) {
|
||||
run_external_diff(pgm, name, other, one, two, xfrm_msg,
|
||||
complete_rewrite);
|
||||
|
|
Загрузка…
Ссылка в новой задаче