X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=checkout-index.c;h=f1e716d4126c7dc9a0fd1be665dee9f8d0fbc87e;hb=287f860054345505e4f737466279efa6c3ff04b5;hp=dab3778a9585bcfde98be436255542df13aacddb;hpb=8fc66df237afce0b4318657f166b3583831949f3;p=git.git diff --git a/checkout-index.c b/checkout-index.c index dab3778a..f1e716d4 100644 --- a/checkout-index.c +++ b/checkout-index.c @@ -34,6 +34,9 @@ */ #include "cache.h" +static const char *prefix; +static int prefix_length; + static struct checkout state = { .base_dir = "", .base_dir_len = 0, @@ -69,6 +72,10 @@ static int checkout_all(void) struct cache_entry *ce = active_cache[i]; if (ce_stage(ce)) continue; + if (prefix && *prefix && + ( ce_namelen(ce) <= prefix_length || + memcmp(prefix, ce->name, prefix_length) )) + continue; if (checkout_entry(ce, &state) < 0) errs++; } @@ -91,6 +98,9 @@ int main(int argc, char **argv) int newfd = -1; int all = 0; + prefix = setup_git_directory(); + prefix_length = prefix ? strlen(prefix) : 0; + if (read_cache() < 0) { die("invalid cache"); } @@ -155,7 +165,7 @@ int main(int argc, char **argv) if (all) die("git-checkout-index: don't mix '--all' and explicit filenames"); - checkout_file(arg); + checkout_file(prefix_path(prefix, prefix_length, arg)); } if (all)