Merge branch 'bc/submodule-foreach-stdin-fix-1.7.4' into maint

* bc/submodule-foreach-stdin-fix-1.7.4:
  git-submodule.sh: preserve stdin for the command spawned by foreach
  t/t7407: demonstrate that the command called by 'submodule foreach' loses stdin
This commit is contained in:
Junio C Hamano 2011-08-16 11:23:26 -07:00
commit d5c756e99e
2 changed files with 23 additions and 1 deletions

View file

@ -300,6 +300,10 @@ cmd_foreach()
toplevel=$(pwd)
# dup stdin so that it can be restored when running the external
# command in the subshell (and a recursive call to this function)
exec 3<&0
module_list |
while read mode sha1 stage path
do
@ -316,7 +320,7 @@ cmd_foreach()
then
cmd_foreach "--recursive" "$@"
fi
) ||
) <&3 3<&- ||
die "Stopping at '$path'; script returned non-zero status."
fi
done

View file

@ -292,4 +292,22 @@ test_expect_success 'use "update --recursive nested1" to checkout all submodules
)
'
test_expect_success 'command passed to foreach retains notion of stdin' '
(
cd super &&
git submodule foreach echo success >../expected &&
yes | git submodule foreach "read y && test \"x\$y\" = xy && echo success" >../actual
) &&
test_cmp expected actual
'
test_expect_success 'command passed to foreach --recursive retains notion of stdin' '
(
cd clone2 &&
git submodule foreach --recursive echo success >../expected &&
yes | git submodule foreach --recursive "read y && test \"x\$y\" = xy && echo success" >../actual
) &&
test_cmp expected actual
'
test_done