Browse Source

Merge branch 'tb/document-status-u-tradeoff'

Suggest users to look into using--untracked=no option when "git
status" takes too long.

* 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
maint
Junio C Hamano 12 years ago
parent
commit
5d04924e19
  1. 4
      Documentation/config.txt
  2. 14
      Documentation/git-status.txt
  3. 2
      advice.c
  4. 1
      advice.h
  5. 1
      t/t7060-wtstatus.sh
  6. 1
      t/t7508-status.sh
  7. 1
      t/t7512-status-help.sh
  8. 25
      wt-status.c
  9. 1
      wt-status.h

4
Documentation/config.txt

@ -178,6 +178,10 @@ advice.*:: @@ -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.

14
Documentation/git-status.txt

@ -46,15 +46,21 @@ OPTIONS @@ -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

@ -8,6 +8,7 @@ int advice_push_already_exists = 1; @@ -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 { @@ -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

@ -11,6 +11,7 @@ extern int advice_push_already_exists; @@ -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;

1
t/t7060-wtstatus.sh

@ -5,6 +5,7 @@ test_description='basic work tree status reporting' @@ -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 &&

1
t/t7508-status.sh

@ -8,6 +8,7 @@ test_description='git status' @@ -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" &&
(

1
t/t7512-status-help.sh

@ -14,6 +14,7 @@ test_description='git status advice' @@ -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

@ -496,9 +496,14 @@ static void wt_status_collect_untracked(struct wt_status *s) @@ -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 |=
@ -530,6 +535,14 @@ static void wt_status_collect_untracked(struct wt_status *s) @@ -530,6 +535,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)
@ -1097,6 +1110,18 @@ void wt_status_print(struct wt_status *s) @@ -1097,6 +1110,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

1
wt-status.h

@ -69,6 +69,7 @@ struct wt_status { @@ -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…
Cancel
Save