git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Set TAR in t/Makefile and in t4116-apply-reverse.sh

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 25, 2008, 19:37 UTC
Message-ID
<7v8wvpsqki.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<20080725185818.GA13539@leksak.fem-net>
Stephan Beyer <s-beyer@gmx.net> writes:
Show 21 quoted lines
> Junio C Hamano wrote:
>> Stephan Beyer <s-beyer@gmx.net> 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 <gitster@pobox.com>
---
 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 -) <b.tar'
+    '(cd b && "$TAR" xf -) <b.tar'
 
 test_expect_success \
     'validate filenames' \
@@ -96,7 +96,7 @@ test_expect_success \
 
 test_expect_success \
     'extract tar archive with prefix' \
-    '(cd c && $TAR xf -) <c.tar'
+    '(cd c && "$TAR" xf -) <c.tar'
 
 test_expect_success \
     'validate filenames with prefix' \
@@ -116,7 +116,7 @@ test_expect_success \
 
 test_expect_success \
     'extract substfiles' \
-    '(mkdir f && cd f && $TAR xf -) <f.tar'
+    '(mkdir f && cd f && "$TAR" xf -) <f.tar'
 
 test_expect_success \
      'validate substfile contents' \
@@ -128,7 +128,7 @@ test_expect_success \
 
 test_expect_success \
     'extract substfiles from archive with prefix' \
-    '(mkdir g && cd g && $TAR xf -) <g.tar'
+    '(mkdir g && cd g && "$TAR" xf -) <g.tar'
 
 test_expect_success \
      'validate substfile contents from archive with prefix' \
-- 
1.6.0.rc0.51.g51a9e
Previous: Stephan BeyerNext: Brandon Casey
Message 17 of 23 in “perl/Makefile: update NO_PERL_MAKEMAKER section”
  1. perl/Makefile: update NO_PERL_MAKEMAKER sectionBrandon Casey, Jul 22, 2008
  2. Petr BaudisJul 22, 2008
  3. Brandon CaseyJul 23, 2008
  4. Junio C HamanoJul 23, 2008
  5. Brandon CaseyJul 23, 2008
  6. t9700/test.pl: backwards compatibility improvementsBrandon Casey, Jul 22, 2008
  7. Junio C HamanoJul 23, 2008
  8. Brandon CaseyJul 24, 2008
  9. t4116-apply-reverse.sh: use $TAR rather than tarBrandon Casey, Jul 22, 2008
  10. Set TAR in t/Makefile and in t4116-apply-reverse.shStephan Beyer, Jul 25, 2008
  11. Miklos VajnaJul 25, 2008
  12. Stephan BeyerJul 25, 2008
  13. Junio C HamanoJul 25, 2008
  14. Stephan BeyerJul 25, 2008
  15. Junio C HamanoJul 25, 2008
  16. Stephan BeyerJul 25, 2008
  17. Junio C HamanoJul 25, 2008
  18. t3200,t7201: replace '!' with test_must_failBrandon Casey, Jul 22, 2008
  19. t/: Replace diff [-u|-U0] with test_cmp to allow compilation with old diffBrandon Casey, Jul 22, 2008
  20. Miklos VajnaJul 24, 2008
  21. Brandon CaseyJul 24, 2008
  22. t7502-commit.sh: rearrange test to make more portableBrandon Casey, Jul 22, 2008
  23. t/t4202-log.sh: add newline at end of fileBrandon Casey, Jul 22, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.