X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=combine-diff.c;h=7693884fdb7e43d0aecd77ad1c71531181d7ceee;hb=3ffe0c245f290d55b32bed8b4ae04d00983df690;hp=a38f01b13ca6748ff7db613061a7715353832462;hpb=d416df8869d803282fb254a18505eccceee9ba3e;p=git.git diff --git a/combine-diff.c b/combine-diff.c index a38f01b1..7693884f 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -1,5 +1,6 @@ #include "cache.h" #include "commit.h" +#include "blob.h" #include "diff.h" #include "diffcore.h" #include "quote.h" @@ -104,7 +105,7 @@ static char *grab_blob(const unsigned char *sha1, unsigned long *size) return xcalloc(1, 1); } blob = read_sha1_file(sha1, type, size); - if (strcmp(type, "blob")) + if (strcmp(type, blob_type)) die("object '%s' is not a blob!", sha1_to_hex(sha1)); return blob; } @@ -621,7 +622,8 @@ static void reuse_combine_diff(struct sline *sline, unsigned long cnt, } static int show_patch_diff(struct combine_diff_path *elem, int num_parent, - int dense, const char *header) + int dense, const char *header, + struct diff_options *opt) { unsigned long size, cnt, lno; char *result, *cp, *ep; @@ -630,9 +632,11 @@ static int show_patch_diff(struct combine_diff_path *elem, int num_parent, int i, show_hunks, shown_header = 0; char ourtmp_buf[TMPPATHLEN]; char *ourtmp = ourtmp_buf; + int working_tree_file = !memcmp(elem->sha1, null_sha1, 20); + int abbrev = opt->full_index ? 40 : DEFAULT_ABBREV; /* Read the result of merge first */ - if (memcmp(elem->sha1, null_sha1, 20)) { + if (!working_tree_file) { result = grab_blob(elem->sha1, &size); write_to_temp_file(ourtmp, result, size); } @@ -646,6 +650,7 @@ static int show_patch_diff(struct combine_diff_path *elem, int num_parent, int len = st.st_size; int cnt = 0; + elem->mode = canon_mode(st.st_mode); size = len; result = xmalloc(len + 1); while (cnt < len) { @@ -661,6 +666,7 @@ static int show_patch_diff(struct combine_diff_path *elem, int num_parent, else { /* deleted file */ size = 0; + elem->mode = 0; result = xmalloc(1); result[0] = 0; ourtmp = "/dev/null"; @@ -716,12 +722,12 @@ static int show_patch_diff(struct combine_diff_path *elem, int num_parent, show_hunks = make_hunks(sline, cnt, num_parent, dense); - if (show_hunks || mode_differs) { + if (show_hunks || mode_differs || working_tree_file) { const char *abb; if (header) { shown_header++; - puts(header); + printf("%s%c", header, opt->line_termination); } printf("diff --%s ", dense ? "cc" : "combined"); if (quote_c_style(elem->path, NULL, NULL, 0)) @@ -731,13 +737,11 @@ static int show_patch_diff(struct combine_diff_path *elem, int num_parent, putchar('\n'); printf("index "); for (i = 0; i < num_parent; i++) { - if (elem->parent[i].mode != elem->mode) - mode_differs = 1; abb = find_unique_abbrev(elem->parent[i].sha1, - DEFAULT_ABBREV); + abbrev); printf("%s%s", i ? "," : "", abb); } - abb = find_unique_abbrev(elem->sha1, DEFAULT_ABBREV); + abb = find_unique_abbrev(elem->sha1, abbrev); printf("..%s\n", abb); if (mode_differs) { @@ -796,7 +800,7 @@ static void show_raw_diff(struct combine_diff_path *p, int num_parent, const cha inter_name_termination = 0; if (header) - puts(header); + printf("%s%c", header, line_termination); for (i = 0; i < num_parent; i++) { if (p->parent[i].mode) @@ -861,7 +865,7 @@ int show_combined_diff(struct combine_diff_path *p, default: case DIFF_FORMAT_PATCH: - return show_patch_diff(p, num_parent, dense, header); + return show_patch_diff(p, num_parent, dense, header, opt); } }