diff options
author | Linus Torvalds <torvalds@osdl.org> | 2005-10-17 17:32:12 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-10-17 17:32:12 -0700 |
commit | a65a686f4967ecba0759289d0e918f652980e8a2 (patch) | |
tree | 94fa576c13ade9b56e87eac06404ee1ac93962ff | |
parent | 15fad5f4d750da31fbc004e6dd4c78fc0f20aca4 (diff) | |
download | git-a65a686f4967ecba0759289d0e918f652980e8a2.tar.gz |
make checkout-index '-a' flag saner.
The original semantics of pretending as if all files were
specified where '-a' appeared and using only the flags given so
far was too confusing.
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | checkout-index.c | 109 |
1 files changed, 61 insertions, 48 deletions
diff --git a/checkout-index.c b/checkout-index.c index f32513c507..596d320fb6 100644 --- a/checkout-index.c +++ b/checkout-index.c @@ -82,8 +82,9 @@ static struct cache_file cache_file; int main(int argc, char **argv) { - int i, force_filename = 0; + int i; int newfd = -1; + int all = 0; if (read_cache() < 0) { die("invalid cache"); @@ -91,58 +92,70 @@ int main(int argc, char **argv) for (i = 1; i < argc; i++) { const char *arg = argv[i]; - if (!force_filename) { - if (!strcmp(arg, "-a")) { - checkout_all(); - continue; - } - if (!strcmp(arg, "--")) { - force_filename = 1; - continue; - } - if (!strcmp(arg, "-f")) { - state.force = 1; - continue; - } - if (!strcmp(arg, "-q")) { - state.quiet = 1; - continue; - } - if (!strcmp(arg, "-n")) { - state.not_new = 1; - continue; - } - if (!strcmp(arg, "-u")) { - state.refresh_cache = 1; - if (newfd < 0) - newfd = hold_index_file_for_update - (&cache_file, - get_index_file()); - if (newfd < 0) - die("cannot open index.lock file."); - continue; - } - if (!memcmp(arg, "--prefix=", 9)) { - state.base_dir = arg+9; - state.base_dir_len = strlen(state.base_dir); - continue; - } - if (arg[0] == '-') - usage(checkout_cache_usage); + + if (!strcmp(arg, "--")) { + i++; + break; + } + if (!strcmp(arg, "-a") || !strcmp(arg, "--all")) { + all = 1; + continue; + } + if (!strcmp(arg, "-f") || !strcmp(arg, "--force")) { + state.force = 1; + continue; } - if (state.base_dir_len) { - /* when --prefix is specified we do not - * want to update cache. - */ - if (state.refresh_cache) { - close(newfd); newfd = -1; - rollback_index_file(&cache_file); - } - state.refresh_cache = 0; + if (!strcmp(arg, "-q") || !strcmp(arg, "--quiet")) { + state.quiet = 1; + continue; + } + if (!strcmp(arg, "-n") || !strcmp(arg, "--no-create")) { + state.not_new = 1; + continue; + } + if (!strcmp(arg, "-u") || !strcmp(arg, "--index")) { + state.refresh_cache = 1; + if (newfd < 0) + newfd = hold_index_file_for_update + (&cache_file, + get_index_file()); + if (newfd < 0) + die("cannot open index.lock file."); + continue; } + if (!memcmp(arg, "--prefix=", 9)) { + state.base_dir = arg+9; + state.base_dir_len = strlen(state.base_dir); + continue; + } + if (arg[0] == '-') + usage(checkout_cache_usage); + break; + } + + if (state.base_dir_len) { + /* when --prefix is specified we do not + * want to update cache. + */ + if (state.refresh_cache) { + close(newfd); newfd = -1; + rollback_index_file(&cache_file); + } + state.refresh_cache = 0; + } + + /* Check out named files first */ + for ( ; i < argc; i++) { + const char *arg = argv[i]; + + if (all) + die("git-checkout-index: don't mix '--all' and explicit filenames"); checkout_file(arg); } + if (all) + checkout_all(); + if (0 <= newfd && (write_cache(newfd, active_cache, active_nr) || commit_index_file(&cache_file))) |