On 15.03.13 21:06, Junio C Hamano wrote: > Torsten Bögershausen <tboegi@xxxxxx> writes: > >> > Thanks, I like that much better than mine >> > (and expere is probably a word not yet invented) > OK, then how about redoing Duy's patch like this on top? > > I've moved the timing collection from the caller to callee, and I > think the result is more readable. The message looked easier to see > with a leading blank line, so I added one. > > -- >8 -- > From: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > Date: Wed, 13 Mar 2013 19:59:16 +0700 > Subject: [PATCH] status: advise to consider use of -u when read_directory takes too long > > Introduce advice.statusUoption to suggest considering use of -u to > strike different trade-off when it took more than 2 seconds to > enumerate untracked/ignored files. > > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> > --- > Documentation/config.txt | 4 ++++ > advice.c | 2 ++ > advice.h | 1 + > t/t7060-wtstatus.sh | 1 + > t/t7508-status.sh | 1 + > t/t7512-status-help.sh | 1 + > wt-status.c | 21 +++++++++++++++++++++ > wt-status.h | 1 + > 8 files changed, 32 insertions(+) > > diff --git a/Documentation/config.txt b/Documentation/config.txt > index d1de857..a16eda5 100644 > --- a/Documentation/config.txt > +++ b/Documentation/config.txt > @@ -163,6 +163,10 @@ advice.*:: > state in the output of linkgit:git-status[1] and in > the template shown when writing commit messages in > linkgit:git-commit[1]. > + statusUoption:: > + Advise to consider using the `-u` option to linkgit:git-status[1] > + when the command takes more than 2 seconds to enumerate untracked > + files. > commitBeforeMerge:: > Advice shown when linkgit:git-merge[1] refuses to > merge to avoid overwriting local changes. > diff --git a/advice.c b/advice.c > index edfbd4a..015011f 100644 > --- a/advice.c > +++ b/advice.c > @@ -5,6 +5,7 @@ int advice_push_non_ff_current = 1; > int advice_push_non_ff_default = 1; > int advice_push_non_ff_matching = 1; > int advice_status_hints = 1; > +int advice_status_u_option = 1; > int advice_commit_before_merge = 1; > int advice_resolve_conflict = 1; > int advice_implicit_identity = 1; > @@ -19,6 +20,7 @@ static struct { > { "pushnonffdefault", &advice_push_non_ff_default }, > { "pushnonffmatching", &advice_push_non_ff_matching }, > { "statushints", &advice_status_hints }, > + { "statusuoption", &advice_status_u_option }, > { "commitbeforemerge", &advice_commit_before_merge }, > { "resolveconflict", &advice_resolve_conflict }, > { "implicitidentity", &advice_implicit_identity }, > diff --git a/advice.h b/advice.h > index f3cdbbf..e3e665d 100644 > --- a/advice.h > +++ b/advice.h > @@ -8,6 +8,7 @@ extern int advice_push_non_ff_current; > extern int advice_push_non_ff_default; > extern int advice_push_non_ff_matching; > extern int advice_status_hints; > +extern int advice_status_u_option; > extern int advice_commit_before_merge; > extern int advice_resolve_conflict; > extern int advice_implicit_identity; > diff --git a/t/t7060-wtstatus.sh b/t/t7060-wtstatus.sh > index f4f38a5..52ef06b 100755 > --- a/t/t7060-wtstatus.sh > +++ b/t/t7060-wtstatus.sh > @@ -5,6 +5,7 @@ test_description='basic work tree status reporting' > . ./test-lib.sh > > test_expect_success setup ' > + git config --global advice.statusuoption false && > test_commit A && > test_commit B oneside added && > git checkout A^0 && > diff --git a/t/t7508-status.sh b/t/t7508-status.sh > index e313ef1..15e063a 100755 > --- a/t/t7508-status.sh > +++ b/t/t7508-status.sh > @@ -8,6 +8,7 @@ test_description='git status' > . ./test-lib.sh > > test_expect_success 'status -h in broken repository' ' > + git config --global advice.statusuoption false && > mkdir broken && > test_when_finished "rm -fr broken" && > ( > diff --git a/t/t7512-status-help.sh b/t/t7512-status-help.sh > index b3f6eb9..2d53e03 100755 > --- a/t/t7512-status-help.sh > +++ b/t/t7512-status-help.sh > @@ -14,6 +14,7 @@ test_description='git status advices' > set_fake_editor > > test_expect_success 'prepare for conflicts' ' > + git config --global advice.statusuoption false && > test_commit init main.txt init && > git branch conflicts && > test_commit on_master main.txt on_master && > diff --git a/wt-status.c b/wt-status.c > index 2a9658b..6e75468 100644 > --- a/wt-status.c > +++ b/wt-status.c > @@ -496,9 +496,14 @@ static void wt_status_collect_untracked(struct wt_status *s) > { > int i; > struct dir_struct dir; > + struct timeval t_begin; > > if (!s->show_untracked_files) > return; > + > + if (advice_status_u_option) > + gettimeofday(&t_begin, NULL); > + > memset(&dir, 0, sizeof(dir)); > if (s->show_untracked_files != SHOW_ALL_UNTRACKED_FILES) > dir.flags |= > @@ -528,6 +533,14 @@ static void wt_status_collect_untracked(struct wt_status *s) > } > > free(dir.entries); > + > + if (advice_status_u_option) { > + struct timeval t_end; > + gettimeofday(&t_end, NULL); > + s->untracked_in_ms = > + (uint64_t)t_end.tv_sec * 1000 + t_end.tv_usec / 1000 - > + ((uint64_t)t_begin.tv_sec * 1000 + t_begin.tv_usec / 1000); > + } > } > > void wt_status_collect(struct wt_status *s) > @@ -1011,6 +1024,14 @@ void wt_status_print(struct wt_status *s) > wt_status_print_other(s, &s->untracked, _("Untracked files"), "add"); > if (s->show_ignored_files) > wt_status_print_other(s, &s->ignored, _("Ignored files"), "add -f"); > + if (advice_status_u_option && 2000 < s->untracked_in_ms) { > + status_printf_ln(s, GIT_COLOR_NORMAL, ""); > + status_printf_ln(s, GIT_COLOR_NORMAL, > + _("It took %.2f seconds to enumerate untracked files."), > + s->untracked_in_ms / 1000.0); > + status_printf_ln(s, GIT_COLOR_NORMAL, > + _("Consider the -u option for a possible speed-up?")); > + } > } else if (s->commitable) > status_printf_ln(s, GIT_COLOR_NORMAL, _("Untracked files not listed%s"), > advice_status_hints > diff --git a/wt-status.h b/wt-status.h > index 236b41f..09420d0 100644 > --- a/wt-status.h > +++ b/wt-status.h > @@ -69,6 +69,7 @@ struct wt_status { > struct string_list change; > struct string_list untracked; > struct string_list ignored; > + uint32_t untracked_in_ms; > }; > > struct wt_status_state { > -- 1.8.2-279-g744670c -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html > Thanks, that looks good to me: # It took 2.58 seconds to enumerate untracked files. # Consider the -u option for a possible speed-up? But: If I follow the advice as is given and use "git status -u", the result is the same. If I think loud, would it be better to say: # It took 2.58 seconds to search for untracked files. # Consider the -uno option for a possible speed-up? or # It took 2.58 seconds to search for untracked files. # Consider the -u option for a possible speed-up? # Please see git help status /Torsten -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html