Merge branch 'tb/document-status-u-tradeoff' into maint
* tb/document-status-u-tradeoff: status: advise to consider use of -u when read_directory takes too long git status: document trade-offs in choosing parameters to the -u option
This commit is contained in:
commit
fec274b01f
@ -178,6 +178,10 @@ advice.*::
|
||||
the template shown when writing commit messages in
|
||||
linkgit:git-commit[1], and in the help message shown
|
||||
by linkgit:git-checkout[1] when switching branch.
|
||||
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.
|
||||
|
@ -46,15 +46,21 @@ OPTIONS
|
||||
Show untracked files.
|
||||
+
|
||||
The mode parameter is optional (defaults to 'all'), and is used to
|
||||
specify the handling of untracked files; when -u is not used, the
|
||||
default is 'normal', i.e. show untracked files and directories.
|
||||
specify the handling of untracked files.
|
||||
+
|
||||
The possible options are:
|
||||
+
|
||||
- 'no' - Show no untracked files
|
||||
- 'normal' - Shows untracked files and directories
|
||||
- 'no' - Show no untracked files.
|
||||
- 'normal' - Shows untracked files and directories.
|
||||
- 'all' - Also shows individual files in untracked directories.
|
||||
+
|
||||
When `-u` option is not used, untracked files and directories are
|
||||
shown (i.e. the same as specifying `normal`), to help you avoid
|
||||
forgetting to add newly created files. Because it takes extra work
|
||||
to find untracked files in the filesystem, this mode may take some
|
||||
time in a large working tree. You can use `no` to have `git status`
|
||||
return more quickly without showing untracked files.
|
||||
+
|
||||
The default can be changed using the status.showUntrackedFiles
|
||||
configuration variable documented in linkgit:git-config[1].
|
||||
|
||||
|
2
advice.c
2
advice.c
@ -8,6 +8,7 @@ int advice_push_already_exists = 1;
|
||||
int advice_push_fetch_first = 1;
|
||||
int advice_push_needs_force = 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;
|
||||
@ -25,6 +26,7 @@ static struct {
|
||||
{ "pushfetchfirst", &advice_push_fetch_first },
|
||||
{ "pushneedsforce", &advice_push_needs_force },
|
||||
{ "statushints", &advice_status_hints },
|
||||
{ "statusuoption", &advice_status_u_option },
|
||||
{ "commitbeforemerge", &advice_commit_before_merge },
|
||||
{ "resolveconflict", &advice_resolve_conflict },
|
||||
{ "implicitidentity", &advice_implicit_identity },
|
||||
|
1
advice.h
1
advice.h
@ -11,6 +11,7 @@ extern int advice_push_already_exists;
|
||||
extern int advice_push_fetch_first;
|
||||
extern int advice_push_needs_force;
|
||||
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;
|
||||
|
@ -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 &&
|
||||
|
@ -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" &&
|
||||
(
|
||||
|
@ -14,6 +14,7 @@ test_description='git status advice'
|
||||
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 &&
|
||||
|
25
wt-status.c
25
wt-status.c
@ -499,9 +499,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 |=
|
||||
@ -533,6 +538,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)
|
||||
@ -1100,6 +1113,18 @@ 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."
|
||||
" 'status -uno'"),
|
||||
s->untracked_in_ms / 1000.0);
|
||||
status_printf_ln(s, GIT_COLOR_NORMAL,
|
||||
_("may speed it up, but you have to be careful not"
|
||||
" to forget to add"));
|
||||
status_printf_ln(s, GIT_COLOR_NORMAL,
|
||||
_("new files yourself (see 'git help status')."));
|
||||
}
|
||||
} else if (s->commitable)
|
||||
status_printf_ln(s, GIT_COLOR_NORMAL, _("Untracked files not listed%s"),
|
||||
advice_status_hints
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user