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 /t/t5303-hash-object.sh | |
| parent | fd74cb0874126876227a958f6250323a4a4478a5 (diff) | |
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 't/t5303-hash-object.sh')
| -rwxr-xr-x | t/t5303-hash-object.sh | 35 | 
1 files changed, 35 insertions, 0 deletions
| diff --git a/t/t5303-hash-object.sh b/t/t5303-hash-object.sh new file mode 100755 index 0000000000..543c0784bd --- /dev/null +++ b/t/t5303-hash-object.sh @@ -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 | 
