From: Junio C Hamano Date: Tue, 18 Oct 2005 00:41:37 +0000 (-0700) Subject: Merge branch 'fixes' X-Git-Tag: v0.99.9~107 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/2b2dabc29f53c5835868029585000ee487cf6cbb?hp=-c Merge branch 'fixes' --- 2b2dabc29f53c5835868029585000ee487cf6cbb diff --combined Documentation/git-checkout-index.txt index 613dfabe71,70645ae892..589dc9ad12 --- a/Documentation/git-checkout-index.txt +++ b/Documentation/git-checkout-index.txt @@@ -1,5 -1,6 +1,5 @@@ git-checkout-index(1) ===================== -v0.1, May 2005 NAME ---- @@@ -29,8 -30,8 +29,8 @@@ OPTION forces overwrite of existing files -a:: - checks out all files in the cache (will then continue to - process listed files). + checks out all files in the cache. Cannot be used + together with explicit filenames. -n:: Don't checkout new files, only refresh files already checked @@@ -43,15 -44,9 +43,9 @@@ --:: Do not interpret any more arguments as options. - Note that the order of the flags matters: + The order of the flags used to matter, but not anymore. - git-checkout-index -a -f file.c - - will first check out all files listed in the cache (but not overwrite - any old ones), and then force-checkout `file.c` a second time (ie that - one *will* overwrite any old contents with the same filename). - - Also, just doing "git-checkout-index" does nothing. You probably meant + Just doing "git-checkout-index" does nothing. You probably meant "git-checkout-index -a". And if you want to force it, you want "git-checkout-index -f -a". @@@ -77,12 -72,12 +71,12 @@@ scripting!) The prefix ability basically makes it trivial to use git-checkout-index as an "export as tree" function. Just read the desired tree into the index, and do a - + git-checkout-index --prefix=git-export-dir/ -a - + and git-checkout-index will "export" the cache into the specified directory. - + NOTE The final "/" is important. The exported name is literally just prefixed with the specified string, so you can also do something like diff --combined checkout-index.c index 97845324be,596d320fb6..dab3778a95 --- a/checkout-index.c +++ b/checkout-index.c @@@ -63,20 -63,15 +63,20 @@@ static int checkout_file(const char *na static int checkout_all(void) { - int i; + int i, errs = 0; for (i = 0; i < active_nr ; i++) { struct cache_entry *ce = active_cache[i]; if (ce_stage(ce)) continue; if (checkout_entry(ce, &state) < 0) - return -1; + errs++; } + if (errs) + /* we have already done our error reporting. + * exit with the same code as die(). + */ + exit(128); return 0; } @@@ -87,8 -82,9 +87,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"); @@@ -96,58 -92,70 +97,70 @@@ 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 (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, "-f") || !strcmp(arg, "--force")) { + state.force = 1; + continue; + } + 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)))