diff options
author | Gerrit Pape <pape@smarden.org> | 2008-02-21 10:06:47 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-02-22 09:32:49 -0800 |
commit | 8a2f5e5b032ca73e19ad1425b75c63234eb166fa (patch) | |
tree | a18fc4f43a2d2214237c5bac0e96593209614e4d /hash-object.c | |
parent | fd74cb0874126876227a958f6250323a4a4478a5 (diff) | |
download | git-8a2f5e5b032ca73e19ad1425b75c63234eb166fa.tar.gz git-8a2f5e5b032ca73e19ad1425b75c63234eb166fa.tar.xz |
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>
Diffstat (limited to 'hash-object.c')
-rw-r--r-- | hash-object.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/hash-object.c b/hash-object.c index 0a58f3f12..61e7160b3 100644 --- a/hash-object.c +++ b/hash-object.c @@ -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; } |