status: warn when a/b calculation takes too long
The ahead/behind calculation in 'git status' can be slow in some cases. Users may not realize that there are ways to avoid this computation, especially if they are not using the information. Add a warning that appears if this calculation takes more than two seconds. The warning can be disabled through the new config setting advice.statusAheadBehind. Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com> Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
06b324c1d7
commit
0a53561a62
17
wt-status.c
17
wt-status.c
@ -19,6 +19,8 @@
|
||||
#include "lockfile.h"
|
||||
#include "sequencer.h"
|
||||
|
||||
#define AB_DELAY_WARNING_IN_MS (2 * 1000)
|
||||
|
||||
static const char cut_line[] =
|
||||
"------------------------ >8 ------------------------\n";
|
||||
|
||||
@ -1085,14 +1087,29 @@ static void wt_longstatus_print_tracking(struct wt_status *s)
|
||||
struct branch *branch;
|
||||
char comment_line_string[3];
|
||||
int i;
|
||||
uint64_t t_begin = 0;
|
||||
|
||||
assert(s->branch && !s->is_initial);
|
||||
if (!skip_prefix(s->branch, "refs/heads/", &branch_name))
|
||||
return;
|
||||
branch = branch_get(branch_name);
|
||||
|
||||
t_begin = getnanotime();
|
||||
|
||||
if (!format_tracking_info(branch, &sb, s->ahead_behind_flags))
|
||||
return;
|
||||
|
||||
if (advice_status_ahead_behind_warning &&
|
||||
s->ahead_behind_flags == AHEAD_BEHIND_FULL) {
|
||||
uint64_t t_delta_in_ms = (getnanotime() - t_begin) / 1000000;
|
||||
if (t_delta_in_ms > AB_DELAY_WARNING_IN_MS) {
|
||||
strbuf_addf(&sb, _("\n"
|
||||
"It took %.2f seconds to compute the branch ahead/behind values.\n"
|
||||
"You can use '--no-ahead-behind' to avoid this.\n"),
|
||||
t_delta_in_ms / 1000.0);
|
||||
}
|
||||
}
|
||||
|
||||
i = 0;
|
||||
if (s->display_comment_prefix) {
|
||||
comment_line_string[i++] = comment_line_char;
|
||||
|
||||
Reference in New Issue
Block a user