wt-status.c: rename rename-related fields in wt_status_change_data

These field "head_path" is used for rename display only. In the next
patch we introduce another rename pair where the rename source is no
longer HEAD. Rename it to something more generic.

While at there, rename "score" as well and store the rename diff code
in a separate field instead of hardcoding key[0] (i.e. diff-index) in
porcelain v2 code.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Nguyễn Thái Ngọc Duy
2017-12-27 17:18:38 +07:00
committed by Junio C Hamano
parent ea56f97749
commit 5134ccde64
2 changed files with 29 additions and 26 deletions

View File

@ -361,8 +361,8 @@ static void wt_longstatus_print_change_data(struct wt_status *s,
switch (change_type) { switch (change_type) {
case WT_STATUS_UPDATED: case WT_STATUS_UPDATED:
status = d->index_status; status = d->index_status;
if (d->head_path) if (d->rename_source)
one_name = d->head_path; one_name = d->rename_source;
break; break;
case WT_STATUS_CHANGED: case WT_STATUS_CHANGED:
if (d->new_submodule_commits || d->dirty_submodule) { if (d->new_submodule_commits || d->dirty_submodule) {
@ -392,7 +392,7 @@ static void wt_longstatus_print_change_data(struct wt_status *s,
die("BUG: unhandled diff status %c", status); die("BUG: unhandled diff status %c", status);
len = label_width - utf8_strwidth(what); len = label_width - utf8_strwidth(what);
assert(len >= 0); assert(len >= 0);
if (status == DIFF_STATUS_COPIED || status == DIFF_STATUS_RENAMED) if (one_name != two_name)
status_printf_more(s, c, "%s%.*s%s -> %s", status_printf_more(s, c, "%s%.*s%s -> %s",
what, len, padding, one, two); what, len, padding, one, two);
else else
@ -532,8 +532,9 @@ static void wt_status_collect_updated_cb(struct diff_queue_struct *q,
case DIFF_STATUS_COPIED: case DIFF_STATUS_COPIED:
case DIFF_STATUS_RENAMED: case DIFF_STATUS_RENAMED:
d->head_path = xstrdup(p->one->path); d->rename_source = xstrdup(p->one->path);
d->score = p->score * 100 / MAX_SCORE; d->rename_score = p->score * 100 / MAX_SCORE;
d->rename_status = p->status;
/* fallthru */ /* fallthru */
case DIFF_STATUS_MODIFIED: case DIFF_STATUS_MODIFIED:
case DIFF_STATUS_TYPE_CHANGED: case DIFF_STATUS_TYPE_CHANGED:
@ -1691,13 +1692,14 @@ static void wt_shortstatus_status(struct string_list_item *it,
putchar(' '); putchar(' ');
if (s->null_termination) { if (s->null_termination) {
fprintf(stdout, "%s%c", it->string, 0); fprintf(stdout, "%s%c", it->string, 0);
if (d->head_path) if (d->rename_source)
fprintf(stdout, "%s%c", d->head_path, 0); fprintf(stdout, "%s%c", d->rename_source, 0);
} else { } else {
struct strbuf onebuf = STRBUF_INIT; struct strbuf onebuf = STRBUF_INIT;
const char *one; const char *one;
if (d->head_path) {
one = quote_path(d->head_path, s->prefix, &onebuf); if (d->rename_source) {
one = quote_path(d->rename_source, s->prefix, &onebuf);
if (*one != '"' && strchr(one, ' ') != NULL) { if (*one != '"' && strchr(one, ' ') != NULL) {
putchar('"'); putchar('"');
strbuf_addch(&onebuf, '"'); strbuf_addch(&onebuf, '"');
@ -2001,10 +2003,10 @@ static void wt_porcelain_v2_print_changed_entry(
struct wt_status *s) struct wt_status *s)
{ {
struct wt_status_change_data *d = it->util; struct wt_status_change_data *d = it->util;
struct strbuf buf_index = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
struct strbuf buf_head = STRBUF_INIT; struct strbuf buf_from = STRBUF_INIT;
const char *path_index = NULL; const char *path = NULL;
const char *path_head = NULL; const char *path_from = NULL;
char key[3]; char key[3];
char submodule_token[5]; char submodule_token[5];
char sep_char, eol_char; char sep_char, eol_char;
@ -2023,8 +2025,8 @@ static void wt_porcelain_v2_print_changed_entry(
*/ */
sep_char = '\0'; sep_char = '\0';
eol_char = '\0'; eol_char = '\0';
path_index = it->string; path = it->string;
path_head = d->head_path; path_from = d->rename_source;
} else { } else {
/* /*
* Path(s) are C-quoted if necessary. Current path is ALWAYS first. * Path(s) are C-quoted if necessary. Current path is ALWAYS first.
@ -2034,27 +2036,27 @@ static void wt_porcelain_v2_print_changed_entry(
*/ */
sep_char = '\t'; sep_char = '\t';
eol_char = '\n'; eol_char = '\n';
path_index = quote_path(it->string, s->prefix, &buf_index); path = quote_path(it->string, s->prefix, &buf);
if (d->head_path) if (d->rename_source)
path_head = quote_path(d->head_path, s->prefix, &buf_head); path_from = quote_path(d->rename_source, s->prefix, &buf_from);
} }
if (path_head) if (path_from)
fprintf(s->fp, "2 %s %s %06o %06o %06o %s %s %c%d %s%c%s%c", fprintf(s->fp, "2 %s %s %06o %06o %06o %s %s %c%d %s%c%s%c",
key, submodule_token, key, submodule_token,
d->mode_head, d->mode_index, d->mode_worktree, d->mode_head, d->mode_index, d->mode_worktree,
oid_to_hex(&d->oid_head), oid_to_hex(&d->oid_index), oid_to_hex(&d->oid_head), oid_to_hex(&d->oid_index),
key[0], d->score, d->rename_status, d->rename_score,
path_index, sep_char, path_head, eol_char); path, sep_char, path_from, eol_char);
else else
fprintf(s->fp, "1 %s %s %06o %06o %06o %s %s %s%c", fprintf(s->fp, "1 %s %s %06o %06o %06o %s %s %s%c",
key, submodule_token, key, submodule_token,
d->mode_head, d->mode_index, d->mode_worktree, d->mode_head, d->mode_index, d->mode_worktree,
oid_to_hex(&d->oid_head), oid_to_hex(&d->oid_index), oid_to_hex(&d->oid_head), oid_to_hex(&d->oid_index),
path_index, eol_char); path, eol_char);
strbuf_release(&buf_index); strbuf_release(&buf);
strbuf_release(&buf_head); strbuf_release(&buf_from);
} }
/* /*

View File

@ -38,10 +38,11 @@ struct wt_status_change_data {
int worktree_status; int worktree_status;
int index_status; int index_status;
int stagemask; int stagemask;
int score;
int mode_head, mode_index, mode_worktree; int mode_head, mode_index, mode_worktree;
struct object_id oid_head, oid_index; struct object_id oid_head, oid_index;
char *head_path; int rename_status;
int rename_score;
char *rename_source;
unsigned dirty_submodule : 2; unsigned dirty_submodule : 2;
unsigned new_submodule_commits : 1; unsigned new_submodule_commits : 1;
}; };