Code

mingw: work around irregular failures of unlink on windows
[git.git] / diff.c
diff --git a/diff.c b/diff.c
index d156ff252fda8830f75401a6b31f87c03250f775..6991ed4e17343a3104d3fd518b5d85d0913e9259 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -2391,10 +2391,14 @@ int diff_populate_filespec(struct diff_filespec *s, int size_only)
        }
        else {
                enum object_type type;
-               if (size_only)
+               if (size_only) {
                        type = sha1_object_info(s->sha1, &s->size);
-               else {
+                       if (type < 0)
+                               die("unable to read %s", sha1_to_hex(s->sha1));
+               } else {
                        s->data = read_sha1_file(s->sha1, &type, &s->size);
+                       if (!s->data)
+                               die("unable to read %s", sha1_to_hex(s->sha1));
                        s->should_free = 1;
                }
        }
@@ -3148,12 +3152,12 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
        else if (!prefixcmp(arg, "-B") || !prefixcmp(arg, "--break-rewrites=") ||
                 !strcmp(arg, "--break-rewrites")) {
                if ((options->break_opt = diff_scoreopt_parse(arg)) == -1)
-                       return -1;
+                       return error("invalid argument to -B: %s", arg+2);
        }
        else if (!prefixcmp(arg, "-M") || !prefixcmp(arg, "--detect-renames=") ||
                 !strcmp(arg, "--detect-renames")) {
                if ((options->rename_score = diff_scoreopt_parse(arg)) == -1)
-                       return -1;
+                       return error("invalid argument to -M: %s", arg+2);
                options->detect_rename = DIFF_DETECT_RENAME;
        }
        else if (!prefixcmp(arg, "-C") || !prefixcmp(arg, "--detect-copies=") ||
@@ -3161,7 +3165,7 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
                if (options->detect_rename == DIFF_DETECT_COPY)
                        DIFF_OPT_SET(options, FIND_COPIES_HARDER);
                if ((options->rename_score = diff_scoreopt_parse(arg)) == -1)
-                       return -1;
+                       return error("invalid argument to -C: %s", arg+2);
                options->detect_rename = DIFF_DETECT_COPY;
        }
        else if (!strcmp(arg, "--no-renames"))