@@ -2728,11 +2728,8 @@ rerere.enabled::
`$GIT_DIR`, e.g. if "rerere" was previously used in the
repository.
-reset.quietDefault::
- Sets the default value of the "quiet" option for the reset command.
- Choosing "quiet" can optimize the performance of the reset command
- by avoiding the scan of all files in the repo looking for additional
- unstaged changes. Defaults to false.
+reset.quiet::
+ When set to true, 'git reset' will default to the '--quiet' option.
include::sendemail-config.txt[]
@@ -95,9 +95,7 @@ OPTIONS
-q::
--quiet::
- Be quiet, only report errors. Can optimize the performance of reset
- by avoiding scaning all files in the repo looking for additional
- unstaged changes.
+ Be quiet, only report errors.
EXAMPLES
@@ -25,6 +25,8 @@
#include "submodule.h"
#include "submodule-config.h"
+#define REFRESH_INDEX_DELAY_WARNING_IN_MS (2 * 1000)
+
static const char * const git_reset_usage[] = {
N_("git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]"),
N_("git reset [-q] [<tree-ish>] [--] <paths>..."),
@@ -306,7 +308,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
};
git_config(git_reset_config, NULL);
- git_config_get_bool("reset.quietDefault", &quiet);
+ git_config_get_bool("reset.quiet", &quiet);
argc = parse_options(argc, argv, prefix, options, git_reset_usage,
PARSE_OPT_KEEP_DASHDASH);
@@ -376,9 +378,19 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
int flags = quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN;
if (read_from_tree(&pathspec, &oid, intent_to_add))
return 1;
- if (get_git_work_tree())
- refresh_index(&the_index, flags, quiet ? &pathspec : NULL, NULL,
+ if (!quiet && get_git_work_tree()) {
+ uint64_t t_begin, t_delta_in_ms;
+
+ t_begin = getnanotime();
+ refresh_index(&the_index, flags, NULL, NULL,
_("Unstaged changes after reset:"));
+ t_delta_in_ms = (getnanotime() - t_begin) / 1000000;
+ if (t_delta_in_ms > REFRESH_INDEX_DELAY_WARNING_IN_MS) {
+ printf(_("\nIt took %.2f seconds to enumerate unstaged changes after reset. You can\n"
+ "use '--quiet' to avoid this. Set the config setting reset.quiet to true\n"
+ "to make this the default."), t_delta_in_ms / 1000.0);
+ }
+ }
} else {
int err = reset_index(&oid, reset_type, quiet);
if (reset_type == KEEP && !err)
From: Ben Peart <benpeart@microsoft.com> This itteration avoids the refresh_index() call completely if 'quiet'. The advantage of this is that "git refresh" without any pathspec is also significantly sped up. Also added a notification if finding unstaged changes after reset takes longer than 2 seconds to make users aware of the option to speed it up if they don't need the unstaged changes after reset to be output. It also renames the new config setting reset.quietDefault to reset.quiet. Base Ref: Web-Diff: https://github.com/benpeart/git/commit/50d3415ef1 Checkout: git fetch https://github.com/benpeart/git reset-refresh-index-v2 && git checkout 50d3415ef1 ### Interdiff (v1..v2): ### Patches Ben Peart (3): reset: don't compute unstaged changes after reset when --quiet reset: add new reset.quiet config setting reset: warn when refresh_index() takes more than 2 seconds Documentation/config.txt | 3 +++ builtin/reset.c | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) base-commit: ca63497355222acefcca02b9cbb540a4768f3286