Merge branch 'kb/preload-index-more'
authorJunio C Hamano <gitster@pobox.com>
Tue, 20 Nov 2012 18:32:10 +0000 (10:32 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 20 Nov 2012 18:32:10 +0000 (10:32 -0800)
Use preloadindex in more places, which has a nice speedup on systems
with slow stat calls (and even on Linux).

* kb/preload-index-more:
update-index/diff-index: use core.preloadindex to improve performance

1  2 
builtin/diff.c
builtin/update-index.c
diff --combined builtin/diff.c
index 9c70e408096fc92ed1c5056425f1014313908a75,198b9216a47e646e1372085e103cf8e72da31eba..8c2af6cb43ca62f253e07903a8e3cce1080e335b
@@@ -130,8 -130,6 +130,6 @@@ static int builtin_diff_index(struct re
                        usage(builtin_diff_usage);
                argv++; argc--;
        }
-       if (!cached)
-               setup_work_tree();
        /*
         * Make sure there is one revision (i.e. pending object),
         * and there is no revision filtering parameters.
            revs->max_count != -1 || revs->min_age != -1 ||
            revs->max_age != -1)
                usage(builtin_diff_usage);
-       if (read_cache_preload(revs->diffopt.pathspec.raw) < 0) {
-               perror("read_cache_preload");
+       if (!cached) {
+               setup_work_tree();
+               if (read_cache_preload(revs->diffopt.pathspec.raw) < 0) {
+                       perror("read_cache_preload");
+                       return -1;
+               }
+       } else if (read_cache() < 0) {
+               perror("read_cache");
                return -1;
        }
        return run_diff_index(revs, cached);
@@@ -418,3 -422,19 +422,3 @@@ int cmd_diff(int argc, const char **arg
                refresh_index_quietly();
        return result;
  }
 -
 -void setup_diff_pager(struct diff_options *opt)
 -{
 -      /*
 -       * If the user asked for our exit code, then either they want --quiet
 -       * or --exit-code. We should definitely not bother with a pager in the
 -       * former case, as we will generate no output. Since we still properly
 -       * report our exit code even when a pager is run, we _could_ run a
 -       * pager with --exit-code. But since we have not done so historically,
 -       * and because it is easy to find people oneline advising "git diff
 -       * --exit-code" in hooks and other scripts, we do not do so.
 -       */
 -      if (!DIFF_OPT_TST(opt, EXIT_WITH_STATUS) &&
 -          check_pager_config("diff") != 0)
 -              setup_pager();
 -}
diff --combined builtin/update-index.c
index 74986bf163d4dadb4497a90364c29ac71a801638,dd8d10b3d57cc5a6e9cf1d071c9d17c1b5993df6..ada1dff846f2b77d5f71d69db57a7eca5033b943
@@@ -398,7 -398,7 +398,7 @@@ static void read_index_info(int line_te
  }
  
  static const char * const update_index_usage[] = {
 -      "git update-index [options] [--] [<file>...]",
 +      N_("git update-index [options] [--] [<file>...]"),
        NULL
  };
  
@@@ -593,6 -593,7 +593,7 @@@ struct refresh_params 
  static int refresh(struct refresh_params *o, unsigned int flag)
  {
        setup_work_tree();
+       read_cache_preload(NULL);
        *o->has_errors |= refresh_cache(o->flags | flag);
        return 0;
  }
@@@ -714,83 -715,83 +715,83 @@@ int cmd_update_index(int argc, const ch
        int parseopt_state = PARSE_OPT_UNKNOWN;
        struct option options[] = {
                OPT_BIT('q', NULL, &refresh_args.flags,
 -                      "continue refresh even when index needs update",
 +                      N_("continue refresh even when index needs update"),
                        REFRESH_QUIET),
                OPT_BIT(0, "ignore-submodules", &refresh_args.flags,
 -                      "refresh: ignore submodules",
 +                      N_("refresh: ignore submodules"),
                        REFRESH_IGNORE_SUBMODULES),
                OPT_SET_INT(0, "add", &allow_add,
 -                      "do not ignore new files", 1),
 +                      N_("do not ignore new files"), 1),
                OPT_SET_INT(0, "replace", &allow_replace,
 -                      "let files replace directories and vice-versa", 1),
 +                      N_("let files replace directories and vice-versa"), 1),
                OPT_SET_INT(0, "remove", &allow_remove,
 -                      "notice files missing from worktree", 1),
 +                      N_("notice files missing from worktree"), 1),
                OPT_BIT(0, "unmerged", &refresh_args.flags,
 -                      "refresh even if index contains unmerged entries",
 +                      N_("refresh even if index contains unmerged entries"),
                        REFRESH_UNMERGED),
                {OPTION_CALLBACK, 0, "refresh", &refresh_args, NULL,
 -                      "refresh stat information",
 +                      N_("refresh stat information"),
                        PARSE_OPT_NOARG | PARSE_OPT_NONEG,
                        refresh_callback},
                {OPTION_CALLBACK, 0, "really-refresh", &refresh_args, NULL,
 -                      "like --refresh, but ignore assume-unchanged setting",
 +                      N_("like --refresh, but ignore assume-unchanged setting"),
                        PARSE_OPT_NOARG | PARSE_OPT_NONEG,
                        really_refresh_callback},
                {OPTION_LOWLEVEL_CALLBACK, 0, "cacheinfo", NULL,
 -                      "<mode> <object> <path>",
 -                      "add the specified entry to the index",
 +                      N_("<mode> <object> <path>"),
 +                      N_("add the specified entry to the index"),
                        PARSE_OPT_NOARG |       /* disallow --cacheinfo=<mode> form */
                        PARSE_OPT_NONEG | PARSE_OPT_LITERAL_ARGHELP,
                        (parse_opt_cb *) cacheinfo_callback},
 -              {OPTION_CALLBACK, 0, "chmod", &set_executable_bit, "(+/-)x",
 -                      "override the executable bit of the listed files",
 +              {OPTION_CALLBACK, 0, "chmod", &set_executable_bit, N_("(+/-)x"),
 +                      N_("override the executable bit of the listed files"),
                        PARSE_OPT_NONEG | PARSE_OPT_LITERAL_ARGHELP,
                        chmod_callback},
                {OPTION_SET_INT, 0, "assume-unchanged", &mark_valid_only, NULL,
 -                      "mark files as \"not changing\"",
 +                      N_("mark files as \"not changing\""),
                        PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, MARK_FLAG},
                {OPTION_SET_INT, 0, "no-assume-unchanged", &mark_valid_only, NULL,
 -                      "clear assumed-unchanged bit",
 +                      N_("clear assumed-unchanged bit"),
                        PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, UNMARK_FLAG},
                {OPTION_SET_INT, 0, "skip-worktree", &mark_skip_worktree_only, NULL,
 -                      "mark files as \"index-only\"",
 +                      N_("mark files as \"index-only\""),
                        PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, MARK_FLAG},
                {OPTION_SET_INT, 0, "no-skip-worktree", &mark_skip_worktree_only, NULL,
 -                      "clear skip-worktree bit",
 +                      N_("clear skip-worktree bit"),
                        PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, UNMARK_FLAG},
                OPT_SET_INT(0, "info-only", &info_only,
 -                      "add to index only; do not add content to object database", 1),
 +                      N_("add to index only; do not add content to object database"), 1),
                OPT_SET_INT(0, "force-remove", &force_remove,
 -                      "remove named paths even if present in worktree", 1),
 +                      N_("remove named paths even if present in worktree"), 1),
                OPT_SET_INT('z', NULL, &line_termination,
 -                      "with --stdin: input lines are terminated by null bytes", '\0'),
 +                      N_("with --stdin: input lines are terminated by null bytes"), '\0'),
                {OPTION_LOWLEVEL_CALLBACK, 0, "stdin", &read_from_stdin, NULL,
 -                      "read list of paths to be updated from standard input",
 +                      N_("read list of paths to be updated from standard input"),
                        PARSE_OPT_NONEG | PARSE_OPT_NOARG,
                        (parse_opt_cb *) stdin_callback},
                {OPTION_LOWLEVEL_CALLBACK, 0, "index-info", &line_termination, NULL,
 -                      "add entries from standard input to the index",
 +                      N_("add entries from standard input to the index"),
                        PARSE_OPT_NONEG | PARSE_OPT_NOARG,
                        (parse_opt_cb *) stdin_cacheinfo_callback},
                {OPTION_LOWLEVEL_CALLBACK, 0, "unresolve", &has_errors, NULL,
 -                      "repopulate stages #2 and #3 for the listed paths",
 +                      N_("repopulate stages #2 and #3 for the listed paths"),
                        PARSE_OPT_NONEG | PARSE_OPT_NOARG,
                        (parse_opt_cb *) unresolve_callback},
                {OPTION_LOWLEVEL_CALLBACK, 'g', "again", &has_errors, NULL,
 -                      "only update entries that differ from HEAD",
 +                      N_("only update entries that differ from HEAD"),
                        PARSE_OPT_NONEG | PARSE_OPT_NOARG,
                        (parse_opt_cb *) reupdate_callback},
                OPT_BIT(0, "ignore-missing", &refresh_args.flags,
 -                      "ignore files missing from worktree",
 +                      N_("ignore files missing from worktree"),
                        REFRESH_IGNORE_MISSING),
                OPT_SET_INT(0, "verbose", &verbose,
 -                      "report actions to standard output", 1),
 +                      N_("report actions to standard output"), 1),
                {OPTION_CALLBACK, 0, "clear-resolve-undo", NULL, NULL,
 -                      "(for porcelains) forget saved unresolved conflicts",
 +                      N_("(for porcelains) forget saved unresolved conflicts"),
                        PARSE_OPT_NOARG | PARSE_OPT_NONEG,
                        resolve_undo_clear_callback},
                OPT_INTEGER(0, "index-version", &preferred_index_format,
 -                          "write index in this format"),
 +                      N_("write index in this format")),
                OPT_END()
        };