summaryrefslogtreecommitdiff
path: root/hash-object.c
diff options
context:
space:
mode:
authorGerrit Pape <pape@smarden.org>2008-02-21 10:06:47 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-02-22 17:32:49 (GMT)
commit8a2f5e5b032ca73e19ad1425b75c63234eb166fa (patch)
treea18fc4f43a2d2214237c5bac0e96593209614e4d /hash-object.c
parentfd74cb0874126876227a958f6250323a4a4478a5 (diff)
downloadgit-8a2f5e5b032ca73e19ad1425b75c63234eb166fa.zip
git-8a2f5e5b032ca73e19ad1425b75c63234eb166fa.tar.gz
git-8a2f5e5b032ca73e19ad1425b75c63234eb166fa.tar.bz2
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.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/hash-object.c b/hash-object.c
index 0a58f3f..61e7160 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;
}