Give python a chance to find "backported" modules
[git.git] / checkout-index.c
index f32513c..dab3778 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;
 }
 
@@ -82,8 +87,9 @@ static struct cache_file cache_file;
 
 int main(int argc, char **argv)
 {
-       int i, force_filename = 0;
+       int i;
        int newfd = -1;
+       int all = 0;
 
        if (read_cache() < 0) {
                die("invalid cache");
@@ -91,58 +97,70 @@ int main(int argc, char **argv)
 
        for (i = 1; i < argc; i++) {
                const char *arg = argv[i];
-               if (!force_filename) {
-                       if (!strcmp(arg, "-a")) {
-                               checkout_all();
-                               continue;
-                       }
-                       if (!strcmp(arg, "--")) {
-                               force_filename = 1;
-                               continue;
-                       }
-                       if (!strcmp(arg, "-f")) {
-                               state.force = 1;
-                               continue;
-                       }
-                       if (!strcmp(arg, "-q")) {
-                               state.quiet = 1;
-                               continue;
-                       }
-                       if (!strcmp(arg, "-n")) {
-                               state.not_new = 1;
-                               continue;
-                       }
-                       if (!strcmp(arg, "-u")) {
-                               state.refresh_cache = 1;
-                               if (newfd < 0)
-                                       newfd = hold_index_file_for_update
-                                               (&cache_file,
-                                                get_index_file());
-                               if (newfd < 0)
-                                       die("cannot open index.lock file.");
-                               continue;
-                       }
-                       if (!memcmp(arg, "--prefix=", 9)) {
-                               state.base_dir = arg+9;
-                               state.base_dir_len = strlen(state.base_dir);
-                               continue;
-                       }
-                       if (arg[0] == '-')
-                               usage(checkout_cache_usage);
+
+               if (!strcmp(arg, "--")) {
+                       i++;
+                       break;
+               }
+               if (!strcmp(arg, "-a") || !strcmp(arg, "--all")) {
+                       all = 1;
+                       continue;
+               }
+               if (!strcmp(arg, "-f") || !strcmp(arg, "--force")) {
+                       state.force = 1;
+                       continue;
+               }
+               if (!strcmp(arg, "-q") || !strcmp(arg, "--quiet")) {
+                       state.quiet = 1;
+                       continue;
+               }
+               if (!strcmp(arg, "-n") || !strcmp(arg, "--no-create")) {
+                       state.not_new = 1;
+                       continue;
                }
-               if (state.base_dir_len) {
-                       /* when --prefix is specified we do not
-                        * want to update cache.
-                        */
-                       if (state.refresh_cache) {
-                               close(newfd); newfd = -1;
-                               rollback_index_file(&cache_file);
-                       }
-                       state.refresh_cache = 0;
+               if (!strcmp(arg, "-u") || !strcmp(arg, "--index")) {
+                       state.refresh_cache = 1;
+                       if (newfd < 0)
+                               newfd = hold_index_file_for_update
+                                       (&cache_file,
+                                        get_index_file());
+                       if (newfd < 0)
+                               die("cannot open index.lock file.");
+                       continue;
+               }
+               if (!memcmp(arg, "--prefix=", 9)) {
+                       state.base_dir = arg+9;
+                       state.base_dir_len = strlen(state.base_dir);
+                       continue;
+               }
+               if (arg[0] == '-')
+                       usage(checkout_cache_usage);
+               break;
+       }
+
+       if (state.base_dir_len) {
+               /* when --prefix is specified we do not
+                * want to update cache.
+                */
+               if (state.refresh_cache) {
+                       close(newfd); newfd = -1;
+                       rollback_index_file(&cache_file);
                }
+               state.refresh_cache = 0;
+       }
+
+       /* Check out named files first */
+       for ( ; i < argc; i++) {
+               const char *arg = argv[i];
+
+               if (all)
+                       die("git-checkout-index: don't mix '--all' and explicit filenames");
                checkout_file(arg);
        }
 
+       if (all)
+               checkout_all();
+
        if (0 <= newfd &&
            (write_cache(newfd, active_cache, active_nr) ||
             commit_index_file(&cache_file)))