combine-diff: split header printing into its own function

This is a pretty big logical chunk, so it makes the function a bit more readable to have it split out. In addition, it will make it easier to add an alternate code path for binary diffs in a future patch. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed May 23, 2011 at 16:16 UTC 7c978a068f0575a90570e4579c71a5f641bdfad3
1 file changed +74 -61
combine-diff.c
+74 -61
@@ -681,6 +681,78 @@ static void dump_quoted_path(const char *head,
681 puts(buf.buf);
682 }
683
684 +static void show_combined_header(struct combine_diff_path *elem,
685 + int num_parent,
686 + int dense,
687 + struct rev_info *rev,
688 + int mode_differs)
689 +{
690 + struct diff_options *opt = &rev->diffopt;
691 + int abbrev = DIFF_OPT_TST(opt, FULL_INDEX) ? 40 : DEFAULT_ABBREV;
692 + const char *a_prefix = opt->a_prefix ? opt->a_prefix : "a/";
693 + const char *b_prefix = opt->b_prefix ? opt->b_prefix : "b/";
694 + int use_color = DIFF_OPT_TST(opt, COLOR_DIFF);
695 + const char *c_meta = diff_get_color(use_color, DIFF_METAINFO);
696 + const char *c_reset = diff_get_color(use_color, DIFF_RESET);
697 + const char *abb;
698 + int added = 0;
699 + int deleted = 0;
700 + int i;
701 +
702 + if (rev->loginfo && !rev->no_commit_id)
703 + show_log(rev);
704 +
705 + dump_quoted_path(dense ? "diff --cc " : "diff --combined ",
706 + "", elem->path, c_meta, c_reset);
707 + printf("%sindex ", c_meta);
708 + for (i = 0; i < num_parent; i++) {
709 + abb = find_unique_abbrev(elem->parent[i].sha1,
710 + abbrev);
711 + printf("%s%s", i ? "," : "", abb);
712 + }
713 + abb = find_unique_abbrev(elem->sha1, abbrev);
714 + printf("..%s%s\n", abb, c_reset);
715 +
716 + if (mode_differs) {
717 + deleted = !elem->mode;
718 +
719 + /* We say it was added if nobody had it */
720 + added = !deleted;
721 + for (i = 0; added && i < num_parent; i++)
722 + if (elem->parent[i].status !=
723 + DIFF_STATUS_ADDED)
724 + added = 0;
725 + if (added)
726 + printf("%snew file mode %06o",
727 + c_meta, elem->mode);
728 + else {
729 + if (deleted)
730 + printf("%sdeleted file ", c_meta);
731 + printf("mode ");
732 + for (i = 0; i < num_parent; i++) {
733 + printf("%s%06o", i ? "," : "",
734 + elem->parent[i].mode);
735 + }
736 + if (elem->mode)
737 + printf("..%06o", elem->mode);
738 + }
739 + printf("%s\n", c_reset);
740 + }
741 +
742 + if (added)
743 + dump_quoted_path("--- ", "", "/dev/null",
744 + c_meta, c_reset);
745 + else
746 + dump_quoted_path("--- ", a_prefix, elem->path,
747 + c_meta, c_reset);
748 + if (deleted)
749 + dump_quoted_path("+++ ", "", "/dev/null",
750 + c_meta, c_reset);
751 + else
752 + dump_quoted_path("+++ ", b_prefix, elem->path,
753 + c_meta, c_reset);
754 +}
755 +
756 static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
757 int dense, struct rev_info *rev)
758 {
@@ -692,13 +764,9 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
764 int mode_differs = 0;
765 int i, show_hunks;
766 int working_tree_file = is_null_sha1(elem->sha1);
695 - int abbrev = DIFF_OPT_TST(opt, FULL_INDEX) ? 40 : DEFAULT_ABBREV;
696 - const char *a_prefix, *b_prefix;
767 mmfile_t result_file;
768
769 context = opt->context;
700 - a_prefix = opt->a_prefix ? opt->a_prefix : "a/";
701 - b_prefix = opt->b_prefix ? opt->b_prefix : "b/";
770
771 /* Read the result of merge first */
772 if (!working_tree_file)
@@ -832,63 +900,8 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
900 show_hunks = make_hunks(sline, cnt, num_parent, dense);
901
902 if (show_hunks || mode_differs || working_tree_file) {
835 - const char *abb;
836 - int use_color = DIFF_OPT_TST(opt, COLOR_DIFF);
837 - const char *c_meta = diff_get_color(use_color, DIFF_METAINFO);
838 - const char *c_reset = diff_get_color(use_color, DIFF_RESET);
839 - int added = 0;
840 - int deleted = 0;
841 -
842 - if (rev->loginfo && !rev->no_commit_id)
843 - show_log(rev);
844 - dump_quoted_path(dense ? "diff --cc " : "diff --combined ",
845 - "", elem->path, c_meta, c_reset);
846 - printf("%sindex ", c_meta);
847 - for (i = 0; i < num_parent; i++) {
848 - abb = find_unique_abbrev(elem->parent[i].sha1,
849 - abbrev);
850 - printf("%s%s", i ? "," : "", abb);
851 - }
852 - abb = find_unique_abbrev(elem->sha1, abbrev);
853 - printf("..%s%s\n", abb, c_reset);
854 -
855 - if (mode_differs) {
856 - deleted = !elem->mode;
857 -
858 - /* We say it was added if nobody had it */
859 - added = !deleted;
860 - for (i = 0; added && i < num_parent; i++)
861 - if (elem->parent[i].status !=
862 - DIFF_STATUS_ADDED)
863 - added = 0;
864 - if (added)
865 - printf("%snew file mode %06o",
866 - c_meta, elem->mode);
867 - else {
868 - if (deleted)
869 - printf("%sdeleted file ", c_meta);
870 - printf("mode ");
871 - for (i = 0; i < num_parent; i++) {
872 - printf("%s%06o", i ? "," : "",
873 - elem->parent[i].mode);
874 - }
875 - if (elem->mode)
876 - printf("..%06o", elem->mode);
877 - }
878 - printf("%s\n", c_reset);
879 - }
880 - if (added)
881 - dump_quoted_path("--- ", "", "/dev/null",
882 - c_meta, c_reset);
883 - else
884 - dump_quoted_path("--- ", a_prefix, elem->path,
885 - c_meta, c_reset);
886 - if (deleted)
887 - dump_quoted_path("+++ ", "", "/dev/null",
888 - c_meta, c_reset);
889 - else
890 - dump_quoted_path("+++ ", b_prefix, elem->path,
891 - c_meta, c_reset);
903 + show_combined_header(elem, num_parent, dense, rev,
904 + mode_differs);
905 dump_sline(sline, cnt, num_parent,
906 DIFF_OPT_TST(opt, COLOR_DIFF), result_deleted);
907 }