Add "git show-ref" builtin command
[gitweb.git] / diff.c
diff --git a/diff.c b/diff.c
index 70699fd8c48754215934a8ed45db336b9db68918..6638865709888cc0ad2860ca1389a098b6f402f1 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -216,7 +216,7 @@ static char *quote_one(const char *str)
                return NULL;
        needlen = quote_c_style(str, NULL, NULL, 0);
        if (!needlen)
-               return strdup(str);
+               return xstrdup(str);
        xp = xmalloc(needlen + 1);
        quote_c_style(str, xp, NULL, 0);
        return xp;
@@ -658,7 +658,7 @@ static struct diffstat_file *diffstat_add(struct diffstat_t *diffstat,
                x->is_renamed = 1;
        }
        else
-               x->name = strdup(name_a);
+               x->name = xstrdup(name_a);
        return x;
 }
 
@@ -1588,6 +1588,12 @@ static void run_diff(struct diff_filepair *p, struct diff_options *o)
        if (hashcmp(one->sha1, two->sha1)) {
                int abbrev = o->full_index ? 40 : DEFAULT_ABBREV;
 
+               if (o->binary) {
+                       mmfile_t mf;
+                       if ((!fill_mmfile(&mf, one) && mmfile_is_binary(&mf)) ||
+                           (!fill_mmfile(&mf, two) && mmfile_is_binary(&mf)))
+                               abbrev = 40;
+               }
                len += snprintf(msg + len, sizeof(msg) - len,
                                "index %.*s..%.*s",
                                abbrev, sha1_to_hex(one->sha1),
@@ -1818,7 +1824,7 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
                options->full_index = 1;
        else if (!strcmp(arg, "--binary")) {
                options->output_format |= DIFF_FORMAT_PATCH;
-               options->full_index = options->binary = 1;
+               options->binary = 1;
        }
        else if (!strcmp(arg, "-a") || !strcmp(arg, "--text")) {
                options->text = 1;