threads / patch / 23523

patcht0001: check syntax of sample hooks

Subject: [PATCH] t0001: check syntax of sample hooks

## tl;dr

3 messages between Apr 19, 2010 and Apr 19, 2010. Diffs are folded; open one to read it.

replies: 2people: 2as markdown or json

Jonathan Nieder· Apr 19, 2010, 08:41 UTC · lore

Make sure that the sample hooks do not use any shell features that the shell used to execute them does not support.

The documentation at the end of the sample pre-rebase script will never be executed, but "sh -n" does not know that. Convert it to a HERE document to avoid spurious failures.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
I guess this serves as a test for 502be95 (Make templates honour
SHELL_PATH and PERL_PATH, 2010-03-20).

Actually, my motivation is the second part, since I already run a test like this locally. But I thought, while fixing it, why not make it easy for others to suffer the same problem, too?

 t/t0001-init.sh                    |   15 +++++++++++++++
 templates/hooks--pre-rebase.sample |    3 +++
 2 files changed, 18 insertions(+), 0 deletions(-)
Show changes to 2 files +18 −0

t/t0001-init.sh, templates/hooks--pre-rebase.sample

diff --git a/t/t0001-init.sh b/t/t0001-init.sh
index 6757734..3e6e1ed 100755
--- a/t/t0001-init.sh
+++ b/t/t0001-init.sh
@@ -141,6 +141,21 @@ test_expect_success 'reinit' '
 	test_cmp again/empty again/err2
 '
 
+test_expect_success 'sample hooks use acceptable syntax' '
+	mkdir boring &&
+	git init boring &&
+	test -d boring/.git/hooks &&
+	fail=f &&
+	for i in boring/.git/hooks/*.sample
+	do
+		read shebang <"$i" &&
+		shell=${shebang#"#!"} &&
+		$shell -n "$i" ||
+		fail=t
+	done &&
+	test "$fail" = f
+'
+
 test_expect_success 'init with --template' '
 	mkdir template-source &&
 	echo content >template-source/file &&
diff --git a/templates/hooks--pre-rebase.sample b/templates/hooks--pre-rebase.sample
index 053f111..22a9f07 100755
--- a/templates/hooks--pre-rebase.sample
+++ b/templates/hooks--pre-rebase.sample
@@ -91,6 +91,7 @@ fi
 exit 0
 
 ################################################################
+cat <<\EOF
 
 This sample hook safeguards topic branches that have been
 published from being rewound.
@@ -167,3 +168,5 @@ To compute (2):
 	git rev-list master..topic
 
 	if this is empty, it is fully merged to "master".
+
+EOF
-- 
1.7.1.rc1
Junio C Hamano· Apr 19, 2010, 20:52 UTC · re: Jonathan Nieder · lore

Re: [PATCH] t0001: check syntax of sample hooks

Jonathan Nieder <jrnieder@gmail.com> writes:
Show 18 quoted lines
> diff --git a/t/t0001-init.sh b/t/t0001-init.sh
> index 6757734..3e6e1ed 100755
> --- a/t/t0001-init.sh
> +++ b/t/t0001-init.sh
> @@ -141,6 +141,21 @@ test_expect_success 'reinit' '
>  	test_cmp again/empty again/err2
>  '
>  
> +test_expect_success 'sample hooks use acceptable syntax' '
> +	mkdir boring &&
> +	git init boring &&
> +	test -d boring/.git/hooks &&
> +	fail=f &&
> +	for i in boring/.git/hooks/*.sample
> +	do
> +		read shebang <"$i" &&
> +		shell=${shebang#"#!"} &&
> +		$shell -n "$i" ||
"#!/Program  Files/bin/shell"???
I think, after observing what this outputs,
    $ echo 'a  b c' | (read shebang; echo "<$shebang>")
you would need something like this:
	shell=$(sed -e '1{
        	s/^#!//p
                q
	}' "$i") &&
        "$shell" -n "$i"
Show 9 quoted lines
> diff --git a/templates/hooks--pre-rebase.sample b/templates/hooks--pre-rebase.sample
> index 053f111..22a9f07 100755
> --- a/templates/hooks--pre-rebase.sample
> +++ b/templates/hooks--pre-rebase.sample
> @@ -91,6 +91,7 @@ fi
>  exit 0
>  
>  ################################################################
> +cat <<\EOF
No need to meow here; just say ":" instead.
Show 10 quoted lines
>  This sample hook safeguards topic branches that have been
>  published from being rewound.
> @@ -167,3 +168,5 @@ To compute (2):
>  	git rev-list master..topic
>  
>  	if this is empty, it is fully merged to "master".
> +
> +EOF
> -- 
> 1.7.1.rc1
Jonathan Nieder· Apr 19, 2010, 21:09 UTC · re: Junio C Hamano · lore

Re: [PATCH] t0001: check syntax of sample hooks

Junio C Hamano wrote:
> "#!/Program  Files/bin/shell"???
“#!/usr/bin/env sh”?
I will think a little more about this and look at what msysgit does.
>> +cat <<\EOF
>
> No need to meow here; just say ":" instead.
Makes sense.

Thanks, Jonathan

← back to recent threads