Return error when not checking out an entry due to dirtiness.
authorJunio C Hamano <junkio@cox.net>
Mon, 3 Oct 2005 19:44:48 +0000 (12:44 -0700)
committerJunio C Hamano <junkio@cox.net>
Wed, 5 Oct 2005 00:04:44 +0000 (17:04 -0700)
Without -f flag, 'git-checkout-index foo.c' issued an error message
when foo.c already existed in the working tree and did not match index.
However it did not return an error from the underlying checkout_entry()
function and resulted in a successful exit(0).

Signed-off-by: Junio C Hamano <junkio@cox.net>
checkout-index.c
entry.c

index f32513c..9784532 100644 (file)
@@ -63,15 +63,20 @@ static int checkout_file(const char *name)
 
 static int checkout_all(void)
 {
-       int i;
+       int i, errs = 0;
 
        for (i = 0; i < active_nr ; i++) {
                struct cache_entry *ce = active_cache[i];
                if (ce_stage(ce))
                        continue;
                if (checkout_entry(ce, &state) < 0)
-                       return -1;
+                       errs++;
        }
+       if (errs)
+               /* we have already done our error reporting.
+                * exit with the same code as die().
+                */
+               exit(128);
        return 0;
 }
 
diff --git a/entry.c b/entry.c
index b8426db..15b34eb 100644 (file)
--- a/entry.c
+++ b/entry.c
@@ -132,7 +132,7 @@ int checkout_entry(struct cache_entry *ce, struct checkout *state)
                if (!state->force) {
                        if (!state->quiet)
                                fprintf(stderr, "git-checkout-index: %s already exists\n", path);
-                       return 0;
+                       return -1;
                }
 
                /*