hash-object: cleanup handling of command line options
git hash-object used to process the --stdin command line argument before reading subsequent arguments. This caused 'git hash-object --stdin -w' to fail to actually write the object into the database, while '-w --stdin' properly did. Now git hash-object first reads all arguments, and then processes them. This regresses one insane use case. git hash-object used to allow multiple --stdin arguments on the command line: $ git hash-object --stdin --stdin foo ^D bar ^D Now git hash-object errors out if --stdin is given more than once. Reported by Josh Triplett through http://bugs.debian.org/464432 Signed-off-by: Gerrit Pape <pape@smarden.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
fd74cb0874
commit
8a2f5e5b03
@ -41,6 +41,7 @@ int main(int argc, char **argv)
|
||||
const char *prefix = NULL;
|
||||
int prefix_length = -1;
|
||||
int no_more_flags = 0;
|
||||
int hashstdin = 0;
|
||||
|
||||
git_config(git_default_config);
|
||||
|
||||
@ -65,13 +66,20 @@ int main(int argc, char **argv)
|
||||
else if (!strcmp(argv[i], "--help"))
|
||||
usage(hash_object_usage);
|
||||
else if (!strcmp(argv[i], "--stdin")) {
|
||||
hash_stdin(type, write_object);
|
||||
if (hashstdin)
|
||||
die("Multiple --stdin arguments are not supported");
|
||||
hashstdin = 1;
|
||||
}
|
||||
else
|
||||
usage(hash_object_usage);
|
||||
}
|
||||
else {
|
||||
const char *arg = argv[i];
|
||||
|
||||
if (hashstdin) {
|
||||
hash_stdin(type, write_object);
|
||||
hashstdin = 0;
|
||||
}
|
||||
if (0 <= prefix_length)
|
||||
arg = prefix_filename(prefix, prefix_length,
|
||||
arg);
|
||||
@ -79,5 +87,7 @@ int main(int argc, char **argv)
|
||||
no_more_flags = 1;
|
||||
}
|
||||
}
|
||||
if (hashstdin)
|
||||
hash_stdin(type, write_object);
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user