Browse Source
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>maint


2 changed files with 46 additions and 1 deletions
@ -0,0 +1,35 @@
@@ -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 |
Loading…
Reference in new issue