On Tue, May 10, 2016 at 01:53:56PM -0700, Junio C Hamano wrote:
> Jeff King <[email protected]> writes:
>
> > I think it is clear why it works. If $strategy_opts is empty, then the
> > code we generate looks like:
> >
> > for strategy_opt in
> > do
> > ...
> > done
>
> Ah, of course. Thanks.
Here it is as a patch and commit message.
-- >8 --
Subject: [PATCH] rebase--interactive: avoid empty list in shell for-loop
The $strategy_opts variable contains a space-separated list
of strategy options, each individually shell-quoted. To loop
over each, we "unwrap" them by doing an eval like:
eval '
for opt in '"$strategy_opts"'
do
...
done
'
Note the quoting that means we expand $strategy_opts inline
in the code to be evaluated (which is the right thing
because we want the IFS-split and de-quoting). If the
variable is empty, however, we ask the shell to eval the
following code:
for opt in
do
...
done
without anything between "in" and "do". Most modern shells
are happy to treat that like a noop, but reportedly ksh88 on
AIX considers it a syntax error. So let's catch the case
that the variable is empty and skip the eval altogether
(since we know the loop would be a noop anyway).
Reported-by: Armin Kunaschik <[email protected]>
Signed-off-by: Jeff King <[email protected]>
---
git-rebase--interactive.sh | 1 +
1 file changed, 1 insertion(+)
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 9ea3075..1c6dfb6 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -82,6 +82,7 @@ rewritten_pending="$state_dir"/rewritten-pending
cr=$(printf "\015")
strategy_args=${strategy:+--strategy=$strategy}
+test -n "$strategy_opts" &&
eval '
for strategy_opt in '"$strategy_opts"'
do
--
2.8.2.660.ge43c418
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html