diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2010-01-17 15:43:13 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-01-19 15:04:23 -0800 |
commit | 4e1a7baa2e466afded9ff50b9a4539b24dbd3584 (patch) | |
tree | 72d6c05f17fd3039908bd85e24510ca384a4c688 | |
parent | 688cd6d2b9335f2ac20d02996215a0e6da1779b5 (diff) | |
download | git-4e1a7baa2e466afded9ff50b9a4539b24dbd3584.tar.gz |
rm: only refresh entries that we may touch
This gets rid of the whole tree cache refresh. Instead only path that
we touch will get refreshed. We may still lstat() more than needed,
but it'd be better playing safe.
This potentially reduces a large number of lstat() on big trees. Take
gentoo-x86 tree for example, which has roughly 80k files:
Unmodified Git:
$ time git rm --cached skel.ebuild
rm 'skel.ebuild'
real 0m1.441s
user 0m0.821s
sys 0m0.531s
Modified Git:
$ time ~/w/git/git rm --cached skel.ebuild
rm 'skel.ebuild'
real 0m0.941s
user 0m0.828s
sys 0m0.091s
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-rm.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/builtin-rm.c b/builtin-rm.c index 57975dbcfd..f3772c84de 100644 --- a/builtin-rm.c +++ b/builtin-rm.c @@ -169,9 +169,10 @@ int cmd_rm(int argc, const char **argv, const char *prefix) if (read_cache() < 0) die("index file corrupt"); - refresh_cache(REFRESH_QUIET); pathspec = get_pathspec(prefix, argv); + refresh_index(&the_index, REFRESH_QUIET, pathspec, NULL, NULL); + seen = NULL; for (i = 0; pathspec[i] ; i++) /* nothing */; |