461
462
static void print_ref_status(char flag, const char *summary,
463
struct ref *to, struct ref *from, const char *msg,
464
+ struct ref_push_report *report,
465
int porcelain, int summary_width)
466
{
467
+ const char *to_name;
468
+
469
+ if (report && report->ref_name)
470
+ to_name = report->ref_name;
471
+ else
472
+ to_name = to->name;
473
+
474
if (porcelain) {
475
if (from)
468
- fprintf(stdout, "%c\t%s:%s\t", flag, from->name, to->name);
476
+ fprintf(stdout, "%c\t%s:%s\t", flag, from->name, to_name);
477
else
470
- fprintf(stdout, "%c\t:%s\t", flag, to->name);
478
+ fprintf(stdout, "%c\t:%s\t", flag, to_name);
479
if (msg)
480
fprintf(stdout, "%s (%s)\n", summary, msg);
481
else
489
fprintf(stderr, " %s%c %-*s%s ", red, flag, summary_width,
490
summary, reset);
491
if (from)
484
- fprintf(stderr, "%s -> %s", prettify_refname(from->name), prettify_refname(to->name));
492
+ fprintf(stderr, "%s -> %s",
493
+ prettify_refname(from->name),
494
+ prettify_refname(to_name));
495
else
486
- fputs(prettify_refname(to->name), stderr);
496
+ fputs(prettify_refname(to_name), stderr);
497
if (msg) {
498
fputs(" (", stderr);
499
fputs(msg, stderr);
503
}
504
}
505
496
-static void print_ok_ref_status(struct ref *ref, int porcelain, int summary_width)
506
+static void print_ok_ref_status(struct ref *ref,
507
+ struct ref_push_report *report,
508
+ int porcelain, int summary_width)
509
{
510
+ struct object_id *old_oid;
511
+ struct object_id *new_oid;
512
+ const char *ref_name;
513
+ int forced_update;
514
+
515
+ if (report && report->old_oid)
516
+ old_oid = report->old_oid;
517
+ else
518
+ old_oid = &ref->old_oid;
519
+ if (report && report->new_oid)
520
+ new_oid = report->new_oid;
521
+ else
522
+ new_oid = &ref->new_oid;
523
+ if (report && report->forced_update)
524
+ forced_update = report->forced_update;
525
+ else
526
+ forced_update = ref->forced_update;
527
+ if (report && report->ref_name)
528
+ ref_name = report->ref_name;
529
+ else
530
+ ref_name = ref->name;
531
+
532
if (ref->deletion)
533
print_ref_status('-', "[deleted]", ref, NULL, NULL,
500
- porcelain, summary_width);
501
- else if (is_null_oid(&ref->old_oid))
534
+ report, porcelain, summary_width);
535
+ else if (is_null_oid(old_oid))
536
print_ref_status('*',
503
- (starts_with(ref->name, "refs/tags/")
537
+ (starts_with(ref_name, "refs/tags/")
538
? "[new tag]"
505
- : (starts_with(ref->name, "refs/heads/")
539
+ : (starts_with(ref_name, "refs/heads/")
540
? "[new branch]"
541
: "[new reference]")),
508
- ref, ref->peer_ref, NULL, porcelain, summary_width);
542
+ ref, ref->peer_ref, NULL,
543
+ report, porcelain, summary_width);
544
else {
545
struct strbuf quickref = STRBUF_INIT;
546
char type;
547
const char *msg;
548
514
- strbuf_add_unique_abbrev(&quickref, &ref->old_oid,
549
+ strbuf_add_unique_abbrev(&quickref, old_oid,
550
DEFAULT_ABBREV);
516
- if (ref->forced_update) {
551
+ if (forced_update) {
552
strbuf_addstr(&quickref, "...");
553
type = '+';
554
msg = "forced update";
557
type = ' ';
558
msg = NULL;
559
}
525
- strbuf_add_unique_abbrev(&quickref, &ref->new_oid,
560
+ strbuf_add_unique_abbrev(&quickref, new_oid,
561
DEFAULT_ABBREV);
562
563
print_ref_status(type, quickref.buf, ref, ref->peer_ref, msg,
529
- porcelain, summary_width);
564
+ report, porcelain, summary_width);
565
strbuf_release(&quickref);
566
}
567
}
568
534
-static int print_one_push_status(struct ref *ref, const char *dest, int count,
569
+static int print_one_push_report(struct ref *ref, const char *dest, int count,
570
+ struct ref_push_report *report,
571
int porcelain, int summary_width)
572
{
573
if (!count) {
579
switch(ref->status) {
580
case REF_STATUS_NONE:
581
print_ref_status('X', "[no match]", ref, NULL, NULL,
546
- porcelain, summary_width);
582
+ report, porcelain, summary_width);
583
break;
584
case REF_STATUS_REJECT_NODELETE:
585
print_ref_status('!', "[rejected]", ref, NULL,
586
"remote does not support deleting refs",
551
- porcelain, summary_width);
587
+ report, porcelain, summary_width);
588
break;
589
case REF_STATUS_UPTODATE:
590
print_ref_status('=', "[up to date]", ref,
555
- ref->peer_ref, NULL, porcelain, summary_width);
591
+ ref->peer_ref, NULL,
592
+ report, porcelain, summary_width);
593
break;
594
case REF_STATUS_REJECT_NONFASTFORWARD:
595
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
559
- "non-fast-forward", porcelain, summary_width);
596
+ "non-fast-forward",
597
+ report, porcelain, summary_width);
598
break;
599
case REF_STATUS_REJECT_ALREADY_EXISTS:
600
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
563
- "already exists", porcelain, summary_width);
601
+ "already exists",
602
+ report, porcelain, summary_width);
603
break;
604
case REF_STATUS_REJECT_FETCH_FIRST:
605
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
567
- "fetch first", porcelain, summary_width);
606
+ "fetch first",
607
+ report, porcelain, summary_width);
608
break;
609
case REF_STATUS_REJECT_NEEDS_FORCE:
610
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
571
- "needs force", porcelain, summary_width);
611
+ "needs force",
612
+ report, porcelain, summary_width);
613
break;
614
case REF_STATUS_REJECT_STALE:
615
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
575
- "stale info", porcelain, summary_width);
616
+ "stale info",
617
+ report, porcelain, summary_width);
618
break;
619
case REF_STATUS_REJECT_SHALLOW:
620
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
621
"new shallow roots not allowed",
580
- porcelain, summary_width);
622
+ report, porcelain, summary_width);
623
break;
624
case REF_STATUS_REMOTE_REJECT:
625
print_ref_status('!', "[remote rejected]", ref,
626
ref->deletion ? NULL : ref->peer_ref,
585
- ref->remote_status, porcelain, summary_width);
627
+ ref->remote_status,
628
+ report, porcelain, summary_width);
629
break;
630
case REF_STATUS_EXPECTING_REPORT:
631
print_ref_status('!', "[remote failure]", ref,
632
ref->deletion ? NULL : ref->peer_ref,
633
"remote failed to report status",
591
- porcelain, summary_width);
634
+ report, porcelain, summary_width);
635
break;
636
case REF_STATUS_ATOMIC_PUSH_FAILED:
637
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
595
- "atomic push failed", porcelain, summary_width);
638
+ "atomic push failed",
639
+ report, porcelain, summary_width);
640
break;
641
case REF_STATUS_OK:
598
- print_ok_ref_status(ref, porcelain, summary_width);
642
+ print_ok_ref_status(ref, report, porcelain, summary_width);
643
break;
644
}
645
646
return 1;
647
}
648
649
+static int print_one_push_status(struct ref *ref, const char *dest, int count,
650
+ int porcelain, int summary_width)
651
+{
652
+ struct ref_push_report *report;
653
+ int n = 0;
654
+
655
+ if (!ref->report)
656
+ return print_one_push_report(ref, dest, count,
657
+ NULL, porcelain, summary_width);
658
+
659
+ for (report = ref->report; report; report = report->next)
660
+ print_one_push_report(ref, dest, count + n++,
661
+ report, porcelain, summary_width);
662
+ return n;
663
+}
664
+
665
static int measure_abbrev(const struct object_id *oid, int sofar)
666
{
667
char hex[GIT_MAX_HEXSZ + 1];