core-tutorial: adjust to recent reality.
[git.git] / diff.c
diff --git a/diff.c b/diff.c
index bfc864d..ec51e7d 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -555,6 +555,8 @@ static void remove_tempfile(void)
 static void remove_tempfile_on_signal(int signo)
 {
        remove_tempfile();
+       signal(SIGINT, SIG_DFL);
+       raise(signo);
 }
 
 /* An external diff command takes:
@@ -650,7 +652,7 @@ static void diff_fill_sha1_info(struct diff_filespec *one)
        if (DIFF_FILE_VALID(one)) {
                if (!one->sha1_valid) {
                        struct stat st;
-                       if (stat(one->path, &st) < 0)
+                       if (lstat(one->path, &st) < 0)
                                die("stat %s", one->path);
                        if (index_path(one->sha1, one->path, &st, 0))
                                die("cannot hash %s\n", one->path);
@@ -723,7 +725,7 @@ static void run_diff(struct diff_filepair *p, struct diff_options *o)
 
        if (memcmp(one->sha1, two->sha1, 20)) {
                char one_sha1[41];
-               int abbrev = o->full_index ? 40 : DIFF_DEFAULT_INDEX_ABBREV;
+               int abbrev = o->full_index ? 40 : DEFAULT_ABBREV;
                memcpy(one_sha1, sha1_to_hex(one->sha1), 41);
 
                len += snprintf(msg + len, sizeof(msg) - len,
@@ -787,7 +789,7 @@ int diff_setup_done(struct diff_options *options)
                         * so it is safe for us to do this here.  Also
                         * it does not smudge active_cache or active_nr
                         * when it fails, so we do not have to worry about
-                        * cleaning it up oufselves either.
+                        * cleaning it up ourselves either.
                         */
                        read_cache();
        }
@@ -846,9 +848,14 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
        else if (!strcmp(arg, "--find-copies-harder"))
                options->find_copies_harder = 1;
        else if (!strcmp(arg, "--abbrev"))
-               options->abbrev = DIFF_DEFAULT_ABBREV;
-       else if (!strncmp(arg, "--abbrev=", 9))
+               options->abbrev = DEFAULT_ABBREV;
+       else if (!strncmp(arg, "--abbrev=", 9)) {
                options->abbrev = strtoul(arg + 9, NULL, 10);
+               if (options->abbrev < MINIMUM_ABBREV)
+                       options->abbrev = MINIMUM_ABBREV;
+               else if (40 < options->abbrev)
+                       options->abbrev = 40;
+       }
        else
                return 0;
        return 1;