From: Junio C Hamano Date: Fri, 25 Jul 2008 19:37:33 GMT Subject: Re: [PATCH] Set TAR in t/Makefile and in t4116-apply-reverse.sh Message-ID: <7v8wvpsqki.fsf@gitster.siamese.dyndns.org> In-Reply-To: <20080725185818.GA13539@leksak.fem-net> Stephan Beyer writes: > Junio C Hamano wrote: >> Stephan Beyer writes: >> >> diff --git a/Makefile b/Makefile >> >> index b003e3e..1d14209 100644 >> >> --- a/Makefile >> >> +++ b/Makefile >> >> @@ -1212,6 +1212,7 @@ GIT-CFLAGS: .FORCE-GIT-CFLAGS >> >> >> >> GIT-BUILD-OPTIONS: .FORCE-GIT-BUILD-OPTIONS >> >> @echo SHELL_PATH=\''$(SHELL_PATH_SQ)'\' >$@ >> >> + @echo TAR=\''$(subst ','\'',$(TAR))'\' >>$@ >> >> >> >> ### Detect Tck/Tk interpreter path changes >> >> ifndef NO_TCLTK >> > >> > But then TAR has to be set in test-lib.sh also, to be able to >> > invoke t5000 and t4116 directly, hasn't it? >> >> Dosen't test-lib source GIT-BUILD-OPTIONS? > > It does. Great, then. Sorry, but not quite. The above shell construct is toooootally bogus. We need this patch on top. -- >8 -- [PATCH] Makefile: fix shell quoting Makefile records paths to a few programs in GIT-BUILD-OPTIONS file. These paths need to be quoted twice: once to protect specials from the shell that runs the generated GIT-BUILD-OPTIONS file, and again to protect them (and the first level of quoting itself) from the shell that runs the "echo" inside the Makefile. You can test this by trying: $ ln -s /bin/tar "$HOME/Tes' program/tar" $ make TAR="$HOME/Tes' program/tar" test Signed-off-by: Junio C Hamano --- Makefile | 7 +++++-- t/t5000-tar-tree.sh | 10 +++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 1d14209..f13184b 100644 --- a/Makefile +++ b/Makefile @@ -1210,9 +1210,12 @@ GIT-CFLAGS: .FORCE-GIT-CFLAGS echo "$$FLAGS" >GIT-CFLAGS; \ fi +# We need to apply sq twice, once to protect from the shell +# that runs GIT-BUILD-OPTIONS, and then again to protect it +# and the first level quoting from the shell that runs "echo". GIT-BUILD-OPTIONS: .FORCE-GIT-BUILD-OPTIONS - @echo SHELL_PATH=\''$(SHELL_PATH_SQ)'\' >$@ - @echo TAR=\''$(subst ','\'',$(TAR))'\' >>$@ + @echo SHELL_PATH=\''$(subst ','\'',$(SHELL_PATH_SQ))'\' >$@ + @echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@ ### Detect Tck/Tk interpreter path changes ifndef NO_TCLTK diff --git a/t/t5000-tar-tree.sh b/t/t5000-tar-tree.sh index 5eb119e..87902f8 100755 --- a/t/t5000-tar-tree.sh +++ b/t/t5000-tar-tree.sh @@ -67,7 +67,7 @@ test_expect_success \ test_expect_success \ 'validate file modification time' \ 'mkdir extract && - $TAR xf b.tar -C extract a/a && + "$TAR" xf b.tar -C extract a/a && perl -e '\''print((stat("extract/a/a"))[9], "\n")'\'' >b.mtime && echo "1117231200" >expected.mtime && diff expected.mtime b.mtime' @@ -79,7 +79,7 @@ test_expect_success \ test_expect_success \ 'extract tar archive' \ - '(cd b && $TAR xf -)