* gp/hash-stdin:
  hash-object: cleanup handling of command line options
This commit is contained in:
Junio C Hamano 2008-02-27 11:55:22 -08:00
Родитель 2f8e2e3eef 8a2f5e5b03
Коммит b82b096b8c
2 изменённых файлов: 46 добавлений и 1 удалений

Просмотреть файл

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

35
t/t5303-hash-object.sh Executable file
Просмотреть файл

@ -0,0 +1,35 @@
#!/bin/sh
test_description=git-hash-object
. ./test-lib.sh
test_expect_success \
'git hash-object -w --stdin saves the object' \
'obname=$(echo foo | git hash-object -w --stdin) &&
obpath=$(echo $obname | sed -e "s/\(..\)/\1\//") &&
test -r .git/objects/"$obpath" &&
rm -f .git/objects/"$obpath"'
test_expect_success \
'git hash-object --stdin -w saves the object' \
'obname=$(echo foo | git hash-object --stdin -w) &&
obpath=$(echo $obname | sed -e "s/\(..\)/\1\//") &&
test -r .git/objects/"$obpath" &&
rm -f .git/objects/"$obpath"'
test_expect_success \
'git hash-object --stdin file1 <file0 first operates on file0, then file1' \
'echo foo > file1 &&
obname0=$(echo bar | git hash-object --stdin) &&
obname1=$(git hash-object file1) &&
obname0new=$(echo bar | git hash-object --stdin file1 | sed -n -e 1p) &&
obname1new=$(echo bar | git hash-object --stdin file1 | sed -n -e 2p) &&
test "$obname0" = "$obname0new" &&
test "$obname1" = "$obname1new"'
test_expect_success \
'git hash-object refuses multiple --stdin arguments' \
'! git hash-object --stdin --stdin < file1'
test_done