ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Johan Corveleyn <jcor...@gmail.com>
Subject Re: ant wrapper script testing
Date Thu, 03 Nov 2016 10:36:47 GMT
On Mon, Oct 31, 2016 at 9:20 PM, Jeff Adamson <jwadamson@us.ibm.com> wrote:
>
> We will give this more thought. Ant only needs one replacement engine to work on all
platforms, but I don't know of a specific reason that nawk should not be just as capable as
sed.
>
> To summarize,
>
> Using 4-backslash replacement nawk on ubuntu:
>
> arg : -Dfoo=dollar$_backtick`_single'_double"_trailingbackslash\
> quoted_arg: "-Dfoo=dollar\$_backtick\`_single'_double\"_trailingbackslash\\"
> ....
> [echo] foo=dollar$_backtick`_single'_double"_trailingbackslash\_
>
> Using 8-backslash replacement nawk on ubuntu:
>
> arg : -Dfoo=dollar$_backtick`_single'_double"_trailingbackslash\
> quoted_arg: "-Dfoo=dollar\$_backtick\`_single'_double\"_trailingbackslash\\\\"
> ....
> [echo] foo=dollar$_backtick`_single'_double"_trailingbackslash\\_
>
> Using 4-backslash replacement nawk(?) on your machine:
>
> arg       : -Dfoo=trail\ingbackslash\
> quoted_arg: "-Dfoo=trail\ingbackslash\"
> ....
> error output (clearly failed to double the backslash during quoting)
>
> Using 8-backslash replacement nawk on your machine:
>
> arg       : -Dfoo=trail\ingbackslash\
> quoted_arg: "-Dfoo=trail\\ingbackslash\\"
> ...
> arg : -Dfoo=trail\ingbackslash\
> quoted_arg: "-Dfoo=trail\\ingbackslash\\"
>
>
> The goal of the line is to replace one backslash literal with two. The other awk patterns
are correctly replacing with two backslashes in the replacement pattern; introducing a single
new backslash literal in the output. Not sure why this backslash should be different. I think
4-backslash is the correct number unless something is doing an extra pass of interpretation
of the argument.
>
>
> Maybe the slash-string pattern is being interpreted differently. Can we try it as just
plain double-quote strings?
>
> 'awk')
> esc_arg="$(printf '%s' "$esc_arg" | "$awk_exec" '{ gsub("\\\\", "\\\\"); print }' )"
> esc_arg="$(printf '%s' "$esc_arg" | "$awk_exec" '{ gsub("\\$", "\\$"); print }' )"
> esc_arg="$(printf '%s' "$esc_arg" | "$awk_exec" '{ gsub("\"", "\\\""); print }' )"
> esc_arg="$(printf '%s' "$esc_arg" | "$awk_exec" '{ gsub("`", "\\`"); print }' )"

I'm afraid that doesn't work either:

[[
bash-4.1> diff ant.new ant.new.edited
63,66c63,66
<         esc_arg="$(printf '%s' "$esc_arg" | "$awk_exec" '{
gsub(/\\/, "\\\\"); print }' )"
<         esc_arg="$(printf '%s' "$esc_arg" | "$awk_exec" '{
gsub(/\$/, "\\$");  print }' )"
<         esc_arg="$(printf '%s' "$esc_arg" | "$awk_exec" '{
gsub(/\"/, "\\\""); print }' )"
<         esc_arg="$(printf '%s' "$esc_arg" | "$awk_exec" '{ gsub(/`/,
 "\\`");  print }' )"
---
>         esc_arg="$(printf '%s' "$esc_arg" | "$awk_exec" '{ gsub("\\\\", "\\\\"); print
}' )"
>         esc_arg="$(printf '%s' "$esc_arg" | "$awk_exec" '{ gsub("\\$", "\\$");  print
}' )"
>         esc_arg="$(printf '%s' "$esc_arg" | "$awk_exec" '{ gsub("\"", "\\\""); print
}' )"
>         esc_arg="$(printf '%s' "$esc_arg" | "$awk_exec" '{ gsub("`",  "\\`");  print
}' )"
bash-4.1> ./ant.new.edited --execdebug "-Dfoo=trail\\ingbackslash\\" -f test.xml
arg       : -Dfoo=trail\ingbackslash\
quoted_arg: "-Dfoo=trail\ingbackslash\"
arg       : -f
quoted_arg: "-f"
arg       : test.xml
quoted_arg: "test.xml"
exec "$JAVACMD" -Xmx512m -Djava.awt.headless=true -XX:MaxPermSize=140m
-classpath "$LOCALCLASSPATH" -Dant.home="$ANT_HOME"
-Dant.library.dir="$ANT_LIB"  org.apache.tools.ant.launch.Launcher
-cp "$CLASSPATH"  "-Dfoo=trail\ingbackslash\" "-f" "test.xml"
Buildfile: build.xml does not exist!
Build failed
]]


I think it would indeed be better to focus on 'sed' only now, because
we can get it to work well cross-platform. No need to make it also
work with (n)awk.

-- 
Johan

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Mime
View raw message