Merge branch 'fixes'

This commit is contained in:
Junio C Hamano 2005-10-17 17:41:37 -07:00
commit 2b2dabc29f
2 changed files with 68 additions and 61 deletions

View File

@ -29,8 +29,8 @@ OPTIONS
forces overwrite of existing files forces overwrite of existing files
-a:: -a::
checks out all files in the cache (will then continue to checks out all files in the cache. Cannot be used
process listed files). together with explicit filenames.
-n:: -n::
Don't checkout new files, only refresh files already checked Don't checkout new files, only refresh files already checked
@ -43,15 +43,9 @@ OPTIONS
--:: --::
Do not interpret any more arguments as options. 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 Just doing "git-checkout-index" does nothing. You probably meant
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
"git-checkout-index -a". And if you want to force it, you want "git-checkout-index -a". And if you want to force it, you want
"git-checkout-index -f -a". "git-checkout-index -f -a".
@ -77,12 +71,12 @@ scripting!).
The prefix ability basically makes it trivial to use The prefix ability basically makes it trivial to use
git-checkout-index as an "export as tree" function. Just read the git-checkout-index as an "export as tree" function. Just read the
desired tree into the index, and do a desired tree into the index, and do a
git-checkout-index --prefix=git-export-dir/ -a git-checkout-index --prefix=git-export-dir/ -a
and git-checkout-index will "export" the cache into the specified and git-checkout-index will "export" the cache into the specified
directory. directory.
NOTE The final "/" is important. The exported name is literally just NOTE The final "/" is important. The exported name is literally just
prefixed with the specified string, so you can also do something like prefixed with the specified string, so you can also do something like

View File

@ -87,8 +87,9 @@ static struct cache_file cache_file;
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int i, force_filename = 0; int i;
int newfd = -1; int newfd = -1;
int all = 0;
if (read_cache() < 0) { if (read_cache() < 0) {
die("invalid cache"); die("invalid cache");
@ -96,58 +97,70 @@ int main(int argc, char **argv)
for (i = 1; i < argc; i++) { for (i = 1; i < argc; i++) {
const char *arg = argv[i]; const char *arg = argv[i];
if (!force_filename) {
if (!strcmp(arg, "-a")) { if (!strcmp(arg, "--")) {
checkout_all(); i++;
continue; break;
}
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 (state.base_dir_len) { if (!strcmp(arg, "-a") || !strcmp(arg, "--all")) {
/* when --prefix is specified we do not all = 1;
* want to update cache. continue;
*/
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); checkout_file(arg);
} }
if (all)
checkout_all();
if (0 <= newfd && if (0 <= newfd &&
(write_cache(newfd, active_cache, active_nr) || (write_cache(newfd, active_cache, active_nr) ||
commit_index_file(&cache_file))) commit_index_file(&cache_file)))