From: Ben Peart <benpe...@microsoft.com>

refresh_index() is done after a reset command as an optimization.  Because
it can be an expensive call, warn the user if it takes more than 2 seconds
and tell them how to avoid it using the --quiet command line option or
reset.quiet config setting.

Signed-off-by: Ben Peart <benpe...@microsoft.com>
---
 builtin/reset.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/builtin/reset.c b/builtin/reset.c
index 3b43aee544..d95a27d52e 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -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>..."),
@@ -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 (!quiet && get_git_work_tree())
+                       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)
-- 
2.18.0.windows.1

Reply via email to