mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
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
|
the template shown when writing commit messages in
|
||||||
linkgit:git-commit[1], and in the help message shown
|
linkgit:git-commit[1], and in the help message shown
|
||||||
by linkgit:git-checkout[1] when switching branch.
|
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::
|
commitBeforeMerge::
|
||||||
Advice shown when linkgit:git-merge[1] refuses to
|
Advice shown when linkgit:git-merge[1] refuses to
|
||||||
merge to avoid overwriting local changes.
|
merge to avoid overwriting local changes.
|
||||||
|
|
|
@ -46,15 +46,21 @@ OPTIONS
|
||||||
Show untracked files.
|
Show untracked files.
|
||||||
+
|
+
|
||||||
The mode parameter is optional (defaults to 'all'), and is used to
|
The mode parameter is optional (defaults to 'all'), and is used to
|
||||||
specify the handling of untracked files; when -u is not used, the
|
specify the handling of untracked files.
|
||||||
default is 'normal', i.e. show untracked files and directories.
|
|
||||||
+
|
+
|
||||||
The possible options are:
|
The possible options are:
|
||||||
+
|
+
|
||||||
- 'no' - Show no untracked files
|
- 'no' - Show no untracked files.
|
||||||
- 'normal' - Shows untracked files and directories
|
- 'normal' - Shows untracked files and directories.
|
||||||
- 'all' - Also shows individual files in untracked 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
|
The default can be changed using the status.showUntrackedFiles
|
||||||
configuration variable documented in linkgit:git-config[1].
|
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_fetch_first = 1;
|
||||||
int advice_push_needs_force = 1;
|
int advice_push_needs_force = 1;
|
||||||
int advice_status_hints = 1;
|
int advice_status_hints = 1;
|
||||||
|
int advice_status_u_option = 1;
|
||||||
int advice_commit_before_merge = 1;
|
int advice_commit_before_merge = 1;
|
||||||
int advice_resolve_conflict = 1;
|
int advice_resolve_conflict = 1;
|
||||||
int advice_implicit_identity = 1;
|
int advice_implicit_identity = 1;
|
||||||
|
@ -25,6 +26,7 @@ static struct {
|
||||||
{ "pushfetchfirst", &advice_push_fetch_first },
|
{ "pushfetchfirst", &advice_push_fetch_first },
|
||||||
{ "pushneedsforce", &advice_push_needs_force },
|
{ "pushneedsforce", &advice_push_needs_force },
|
||||||
{ "statushints", &advice_status_hints },
|
{ "statushints", &advice_status_hints },
|
||||||
|
{ "statusuoption", &advice_status_u_option },
|
||||||
{ "commitbeforemerge", &advice_commit_before_merge },
|
{ "commitbeforemerge", &advice_commit_before_merge },
|
||||||
{ "resolveconflict", &advice_resolve_conflict },
|
{ "resolveconflict", &advice_resolve_conflict },
|
||||||
{ "implicitidentity", &advice_implicit_identity },
|
{ "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_fetch_first;
|
||||||
extern int advice_push_needs_force;
|
extern int advice_push_needs_force;
|
||||||
extern int advice_status_hints;
|
extern int advice_status_hints;
|
||||||
|
extern int advice_status_u_option;
|
||||||
extern int advice_commit_before_merge;
|
extern int advice_commit_before_merge;
|
||||||
extern int advice_resolve_conflict;
|
extern int advice_resolve_conflict;
|
||||||
extern int advice_implicit_identity;
|
extern int advice_implicit_identity;
|
||||||
|
|
|
@ -5,6 +5,7 @@ test_description='basic work tree status reporting'
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
test_expect_success setup '
|
test_expect_success setup '
|
||||||
|
git config --global advice.statusuoption false &&
|
||||||
test_commit A &&
|
test_commit A &&
|
||||||
test_commit B oneside added &&
|
test_commit B oneside added &&
|
||||||
git checkout A^0 &&
|
git checkout A^0 &&
|
||||||
|
|
|
@ -8,6 +8,7 @@ test_description='git status'
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
test_expect_success 'status -h in broken repository' '
|
test_expect_success 'status -h in broken repository' '
|
||||||
|
git config --global advice.statusuoption false &&
|
||||||
mkdir broken &&
|
mkdir broken &&
|
||||||
test_when_finished "rm -fr broken" &&
|
test_when_finished "rm -fr broken" &&
|
||||||
(
|
(
|
||||||
|
|
|
@ -14,6 +14,7 @@ test_description='git status advice'
|
||||||
set_fake_editor
|
set_fake_editor
|
||||||
|
|
||||||
test_expect_success 'prepare for conflicts' '
|
test_expect_success 'prepare for conflicts' '
|
||||||
|
git config --global advice.statusuoption false &&
|
||||||
test_commit init main.txt init &&
|
test_commit init main.txt init &&
|
||||||
git branch conflicts &&
|
git branch conflicts &&
|
||||||
test_commit on_master main.txt on_master &&
|
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;
|
int i;
|
||||||
struct dir_struct dir;
|
struct dir_struct dir;
|
||||||
|
struct timeval t_begin;
|
||||||
|
|
||||||
if (!s->show_untracked_files)
|
if (!s->show_untracked_files)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (advice_status_u_option)
|
||||||
|
gettimeofday(&t_begin, NULL);
|
||||||
|
|
||||||
memset(&dir, 0, sizeof(dir));
|
memset(&dir, 0, sizeof(dir));
|
||||||
if (s->show_untracked_files != SHOW_ALL_UNTRACKED_FILES)
|
if (s->show_untracked_files != SHOW_ALL_UNTRACKED_FILES)
|
||||||
dir.flags |=
|
dir.flags |=
|
||||||
|
@ -533,6 +538,14 @@ static void wt_status_collect_untracked(struct wt_status *s)
|
||||||
}
|
}
|
||||||
|
|
||||||
free(dir.entries);
|
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)
|
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");
|
wt_status_print_other(s, &s->untracked, _("Untracked files"), "add");
|
||||||
if (s->show_ignored_files)
|
if (s->show_ignored_files)
|
||||||
wt_status_print_other(s, &s->ignored, _("Ignored files"), "add -f");
|
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)
|
} else if (s->commitable)
|
||||||
status_printf_ln(s, GIT_COLOR_NORMAL, _("Untracked files not listed%s"),
|
status_printf_ln(s, GIT_COLOR_NORMAL, _("Untracked files not listed%s"),
|
||||||
advice_status_hints
|
advice_status_hints
|
||||||
|
|
|
@ -69,6 +69,7 @@ struct wt_status {
|
||||||
struct string_list change;
|
struct string_list change;
|
||||||
struct string_list untracked;
|
struct string_list untracked;
|
||||||
struct string_list ignored;
|
struct string_list ignored;
|
||||||
|
uint32_t untracked_in_ms;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct wt_status_state {
|
struct wt_status_state {
|
||||||
|
|
Loading…
Reference in a new issue