зеркало из https://github.com/microsoft/git.git
transport: pass summary_width down the callchain
The callchain that originates at transport_print_push_status() eventually hits a single leaf function, print_ref_status(), that is used to show from what old object to what new object a ref got updated, and the width of the part that shows old and new object names used a constant TRANSPORT_SUMMARY_WIDTH. Teach the callchain to pass the width down from the top instead. This allows a future enhancement to compute the necessary display width before calling down this callchain. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
8e3f52d778
Коммит
7101e10ce7
63
transport.c
63
transport.c
|
@ -295,7 +295,9 @@ void transport_update_tracking_ref(struct remote *remote, struct ref *ref, int v
|
|||
}
|
||||
}
|
||||
|
||||
static void print_ref_status(char flag, const char *summary, struct ref *to, struct ref *from, const char *msg, int porcelain)
|
||||
static void print_ref_status(char flag, const char *summary,
|
||||
struct ref *to, struct ref *from, const char *msg,
|
||||
int porcelain, int summary_width)
|
||||
{
|
||||
if (porcelain) {
|
||||
if (from)
|
||||
|
@ -307,7 +309,7 @@ static void print_ref_status(char flag, const char *summary, struct ref *to, str
|
|||
else
|
||||
fprintf(stdout, "%s\n", summary);
|
||||
} else {
|
||||
fprintf(stderr, " %c %-*s ", flag, TRANSPORT_SUMMARY_WIDTH, summary);
|
||||
fprintf(stderr, " %c %-*s ", flag, summary_width, summary);
|
||||
if (from)
|
||||
fprintf(stderr, "%s -> %s", prettify_refname(from->name), prettify_refname(to->name));
|
||||
else
|
||||
|
@ -321,15 +323,16 @@ static void print_ref_status(char flag, const char *summary, struct ref *to, str
|
|||
}
|
||||
}
|
||||
|
||||
static void print_ok_ref_status(struct ref *ref, int porcelain)
|
||||
static void print_ok_ref_status(struct ref *ref, int porcelain, int summary_width)
|
||||
{
|
||||
if (ref->deletion)
|
||||
print_ref_status('-', "[deleted]", ref, NULL, NULL, porcelain);
|
||||
print_ref_status('-', "[deleted]", ref, NULL, NULL,
|
||||
porcelain, summary_width);
|
||||
else if (is_null_oid(&ref->old_oid))
|
||||
print_ref_status('*',
|
||||
(starts_with(ref->name, "refs/tags/") ? "[new tag]" :
|
||||
"[new branch]"),
|
||||
ref, ref->peer_ref, NULL, porcelain);
|
||||
ref, ref->peer_ref, NULL, porcelain, summary_width);
|
||||
else {
|
||||
struct strbuf quickref = STRBUF_INIT;
|
||||
char type;
|
||||
|
@ -349,12 +352,14 @@ static void print_ok_ref_status(struct ref *ref, int porcelain)
|
|||
strbuf_add_unique_abbrev(&quickref, ref->new_oid.hash,
|
||||
DEFAULT_ABBREV);
|
||||
|
||||
print_ref_status(type, quickref.buf, ref, ref->peer_ref, msg, porcelain);
|
||||
print_ref_status(type, quickref.buf, ref, ref->peer_ref, msg,
|
||||
porcelain, summary_width);
|
||||
strbuf_release(&quickref);
|
||||
}
|
||||
}
|
||||
|
||||
static int print_one_push_status(struct ref *ref, const char *dest, int count, int porcelain)
|
||||
static int print_one_push_status(struct ref *ref, const char *dest, int count,
|
||||
int porcelain, int summary_width)
|
||||
{
|
||||
if (!count) {
|
||||
char *url = transport_anonymize_url(dest);
|
||||
|
@ -364,56 +369,60 @@ static int print_one_push_status(struct ref *ref, const char *dest, int count, i
|
|||
|
||||
switch(ref->status) {
|
||||
case REF_STATUS_NONE:
|
||||
print_ref_status('X', "[no match]", ref, NULL, NULL, porcelain);
|
||||
print_ref_status('X', "[no match]", ref, NULL, NULL,
|
||||
porcelain, summary_width);
|
||||
break;
|
||||
case REF_STATUS_REJECT_NODELETE:
|
||||
print_ref_status('!', "[rejected]", ref, NULL,
|
||||
"remote does not support deleting refs", porcelain);
|
||||
"remote does not support deleting refs",
|
||||
porcelain, summary_width);
|
||||
break;
|
||||
case REF_STATUS_UPTODATE:
|
||||
print_ref_status('=', "[up to date]", ref,
|
||||
ref->peer_ref, NULL, porcelain);
|
||||
ref->peer_ref, NULL, porcelain, summary_width);
|
||||
break;
|
||||
case REF_STATUS_REJECT_NONFASTFORWARD:
|
||||
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
|
||||
"non-fast-forward", porcelain);
|
||||
"non-fast-forward", porcelain, summary_width);
|
||||
break;
|
||||
case REF_STATUS_REJECT_ALREADY_EXISTS:
|
||||
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
|
||||
"already exists", porcelain);
|
||||
"already exists", porcelain, summary_width);
|
||||
break;
|
||||
case REF_STATUS_REJECT_FETCH_FIRST:
|
||||
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
|
||||
"fetch first", porcelain);
|
||||
"fetch first", porcelain, summary_width);
|
||||
break;
|
||||
case REF_STATUS_REJECT_NEEDS_FORCE:
|
||||
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
|
||||
"needs force", porcelain);
|
||||
"needs force", porcelain, summary_width);
|
||||
break;
|
||||
case REF_STATUS_REJECT_STALE:
|
||||
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
|
||||
"stale info", porcelain);
|
||||
"stale info", porcelain, summary_width);
|
||||
break;
|
||||
case REF_STATUS_REJECT_SHALLOW:
|
||||
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
|
||||
"new shallow roots not allowed", porcelain);
|
||||
"new shallow roots not allowed",
|
||||
porcelain, summary_width);
|
||||
break;
|
||||
case REF_STATUS_REMOTE_REJECT:
|
||||
print_ref_status('!', "[remote rejected]", ref,
|
||||
ref->deletion ? NULL : ref->peer_ref,
|
||||
ref->remote_status, porcelain);
|
||||
ref->deletion ? NULL : ref->peer_ref,
|
||||
ref->remote_status, porcelain, summary_width);
|
||||
break;
|
||||
case REF_STATUS_EXPECTING_REPORT:
|
||||
print_ref_status('!', "[remote failure]", ref,
|
||||
ref->deletion ? NULL : ref->peer_ref,
|
||||
"remote failed to report status", porcelain);
|
||||
ref->deletion ? NULL : ref->peer_ref,
|
||||
"remote failed to report status",
|
||||
porcelain, summary_width);
|
||||
break;
|
||||
case REF_STATUS_ATOMIC_PUSH_FAILED:
|
||||
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
|
||||
"atomic push failed", porcelain);
|
||||
"atomic push failed", porcelain, summary_width);
|
||||
break;
|
||||
case REF_STATUS_OK:
|
||||
print_ok_ref_status(ref, porcelain);
|
||||
print_ok_ref_status(ref, porcelain, summary_width);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -427,25 +436,29 @@ void transport_print_push_status(const char *dest, struct ref *refs,
|
|||
int n = 0;
|
||||
unsigned char head_sha1[20];
|
||||
char *head;
|
||||
int summary_width = TRANSPORT_SUMMARY_WIDTH;
|
||||
|
||||
head = resolve_refdup("HEAD", RESOLVE_REF_READING, head_sha1, NULL);
|
||||
|
||||
if (verbose) {
|
||||
for (ref = refs; ref; ref = ref->next)
|
||||
if (ref->status == REF_STATUS_UPTODATE)
|
||||
n += print_one_push_status(ref, dest, n, porcelain);
|
||||
n += print_one_push_status(ref, dest, n,
|
||||
porcelain, summary_width);
|
||||
}
|
||||
|
||||
for (ref = refs; ref; ref = ref->next)
|
||||
if (ref->status == REF_STATUS_OK)
|
||||
n += print_one_push_status(ref, dest, n, porcelain);
|
||||
n += print_one_push_status(ref, dest, n,
|
||||
porcelain, summary_width);
|
||||
|
||||
*reject_reasons = 0;
|
||||
for (ref = refs; ref; ref = ref->next) {
|
||||
if (ref->status != REF_STATUS_NONE &&
|
||||
ref->status != REF_STATUS_UPTODATE &&
|
||||
ref->status != REF_STATUS_OK)
|
||||
n += print_one_push_status(ref, dest, n, porcelain);
|
||||
n += print_one_push_status(ref, dest, n,
|
||||
porcelain, summary_width);
|
||||
if (ref->status == REF_STATUS_REJECT_NONFASTFORWARD) {
|
||||
if (head != NULL && !strcmp(head, ref->name))
|
||||
*reject_reasons |= REJECT_NON_FF_HEAD;
|
||||
|
|
Загрузка…
Ссылка в новой задаче