On Fri, Jun 28, 2019 at 05:32:35PM -0400, Eric Sunshine wrote:
> > +# The message, filename, and contents strings are evaluated by the shell
> > inside
> > +# double-quotes, with $n set to the current commit number. So you can do:
> > +#
> > +# test_commit_bulk --filename=file --contents='modification $n'
>
> Considering that test_commit_bulk() is intended to be used within a
> test body, and considering that test bodies are almost always
> encapsulated in single quotes, recommending single quoting the value
> of --contents= seems contraindicated. Double quotes likely would be
> better.
I hoped people reading it would realize that they would need to suppress
interpolation of $ one way or another. But I guess many people who touch
the test suite aren't actually prolific shell writers.
Anyway, I'm going to look into changing this to a printf string, which
would make this easier.
> > + in_dir=${indir:+-C "$indir"}
>
> Doesn't this suffer the problem in which some older/broken
> shells[1][2][3][4] incorrectly expand this to:
That line is leftover dead code; see my response to Junio.
> Same comment applies to other instances of ${indir:+-C "$indir"} below.
Those ones are fine because of the double-quotes (and whitespace
splitting on the replacement value happens before interpolation). Try
this:
x=''
y='with spaces'
sh -c 'for i in "$@"; do echo arg: $i; done' -- \
${x:+-x "$x"} \
${y:+-y "$y"}
-Peff