summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>2010-01-14 15:02:21 (GMT)
committerJunio C Hamano <gitster@pobox.com>2010-01-16 04:40:25 (GMT)
commit688cd6d2b9335f2ac20d02996215a0e6da1779b5 (patch)
tree74e37b0dfe1491b2e96df33d8bcf4718a9c87dc2
parent1f73566af5bec28cd8489c6139a9ede95817349c (diff)
downloadgit-688cd6d2b9335f2ac20d02996215a0e6da1779b5.zip
git-688cd6d2b9335f2ac20d02996215a0e6da1779b5.tar.gz
git-688cd6d2b9335f2ac20d02996215a0e6da1779b5.tar.bz2
status: only touch path we may need to check
This patch gets rid of whole-tree cache refresh and untracked file search. Instead only specified path will be looked at. Again some numbers on gentoo-x86, ~80k files: Unmodified Git: $ time git st eclass/ nothing to commit (working directory clean) real 0m3.211s user 0m1.977s sys 0m1.135s Modified Git: $ time ~/w/git/git st eclass/ nothing to commit (working directory clean) real 0m1.587s user 0m1.426s sys 0m0.111s Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin-commit.c2
-rw-r--r--wt-status.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/builtin-commit.c b/builtin-commit.c
index 592b103..d5d8eb6 100644
--- a/builtin-commit.c
+++ b/builtin-commit.c
@@ -1023,7 +1023,7 @@ int cmd_status(int argc, const char **argv, const char *prefix)
s.pathspec = get_pathspec(prefix, argv);
read_cache();
- refresh_cache(REFRESH_QUIET|REFRESH_UNMERGED);
+ refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, s.pathspec, NULL, NULL);
s.is_initial = get_sha1(s.reference, sha1) ? 1 : 0;
s.in_merge = in_merge;
wt_status_collect(&s);
diff --git a/wt-status.c b/wt-status.c
index 5d56988..65feb29 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -343,7 +343,7 @@ static void wt_status_collect_untracked(struct wt_status *s)
DIR_SHOW_OTHER_DIRECTORIES | DIR_HIDE_EMPTY_DIRECTORIES;
setup_standard_excludes(&dir);
- fill_directory(&dir, NULL);
+ fill_directory(&dir, s->pathspec);
for (i = 0; i < dir.nr; i++) {
struct dir_entry *ent = dir.entries[i];
if (!cache_name_is_other(ent->name, ent->len))