提交 2b2dabc2 编写于 作者: J Junio C Hamano

Merge branch 'fixes'

...@@ -29,8 +29,8 @@ OPTIONS ...@@ -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 ...@@ -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!). ...@@ -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
......
...@@ -87,8 +87,9 @@ static struct cache_file cache_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) ...@@ -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, "--")) { if (!strcmp(arg, "-a") || !strcmp(arg, "--all")) {
force_filename = 1; all = 1;
continue; 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, "-f") || !strcmp(arg, "--force")) {
/* when --prefix is specified we do not state.force = 1;
* want to update cache. continue;
*/ }
if (state.refresh_cache) { if (!strcmp(arg, "-q") || !strcmp(arg, "--quiet")) {
close(newfd); newfd = -1; state.quiet = 1;
rollback_index_file(&cache_file); continue;
}
state.refresh_cache = 0;
} }
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)))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册