[PATCH v1 1/1] tests: add Git submodule version consistency test

John Keeping john at keeping.me.uk
Tue Mar 19 11:43:32 CET 2013


On Tue, Mar 19, 2013 at 01:01:45AM +0100, Ferry Huberts wrote:
> From: Ferry Huberts <ferry.huberts at pelagic.nl>
> 
> To ensure the versions are in sync
> 
> Signed-off-by: Ferry Huberts <ferry.huberts at pelagic.nl>
> ---
>  tests/t0001-validate-git-versions.sh | 63 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 63 insertions(+)
>  create mode 100755 tests/t0001-validate-git-versions.sh
> 
> diff --git a/tests/t0001-validate-git-versions.sh b/tests/t0001-validate-git-versions.sh
> new file mode 100755
> index 0000000..22066c0
> --- /dev/null
> +++ b/tests/t0001-validate-git-versions.sh
> @@ -0,0 +1,63 @@
> +#!/bin/sh
> +
> +. ./setup.sh
> +
> +
> +test_versions()
> +{
> +	curdir=`pwd`

Please use $(pwd) rather than backticks.

> +	cd ..

If you cd, we should do so in a subshell to avoid leaving $PWD in the
wrong place if we exit early.  I don't see any need to cd for all the
tests here though, the only time we care is when we need to find the Git
submodule version.

> +
> +	gitSubmoduleStatus=`git submodule status git`

Generally variables are written_like_this, not in camelCase.

> +	echo "gitSubmoduleStatus          = $gitSubmoduleStatus"
> +
> +	gitSubmoduleStatusFirstChar=`echo "$gitSubmoduleStatus" | cut -c -1`
> +	echo "gitSubmoduleStatusFirstChar = $gitSubmoduleStatusFirstChar"
> +
> +	# Fail the test if the Git submodule is not initialised
> +	test "$gitSubmoduleStatusFirstChar" == "-" && \
> +		echo "The Git submodule is not initialised" && \
> +		return 1 

I don't know if we need these diagnostics, can't we just get the two
versions and output the difference?

> +
> +	# Fail the test if the Git submodule is not clean
> +	test "$gitSubmoduleStatusFirstChar" != " " && \
> +		echo "The Git submodule is not clean" && \
> +		return 1
> +
> +	# Get the SHA1 from the (clean) Git submodule
> +	gitSubmoduleVersionSha=`git submodule status git| awk '{ print $1 }' | cut -c 1-`
> +	echo "gitSubmoduleVersionSha      = $gitSubmoduleVersionSha"
> +
> +	# Extract the Git version of the archive from the Makefile
> +	regex='^[[:space:]]*GIT_VER[[:space:]]*=[[:space:]]*(.*)[[:space:]]*$'
> +	archiveVersion=`grep -E "$regex" Makefile | sed -r "s/$regex/\1/"`

We can just use sed here, there's no need for grep as well:

    sed -n -e '/^GIT_VER[ 	]*=/ {
        s/^GIT_VER[ 	]*=[ 	]*//
        p
    }' Makefile

(Anyone who puts leading spaces before variables in the Makefile
deserves what they get here ;-) )

> +	echo "archiveVersion              = $archiveVersion"
> +
> +	# Compare the Git submodule version and the Makefile Git version
> +	cd git
> +	git diff --exit-code --quiet "$gitSubmoduleVersionSha..v$archiveVersion"
> +	diffExitCode=$?
> +	echo "diffExitCode                = $diffExitCode"
> +	cd ..
> +
> +	# Return to the original directory
> +	cd "$curdir"
> +	
> +	# Determine exit code
> +	test $diffExitCode -ne 0 && return 1
> +	return 0
> +}
> +
> +
> +prepare_tests 'Check Git version consistency'
> +
> +git=`which git`
> +test -n "$git" || {
> +	echo "Skipping test: git not found"
> +	tests_done
> +	exit
> +}

I don't think any of the tests will run without Git (how can they create
tests repositories?) so this is unnecessary.

> +
> +run_test 'test versions' 'test_versions'

The test should be inline in run_test, there's no need for the
test_versions function.

> +
> +tests_done


I like the idea of this, but I think we should be able to get away with
something much simpler like this:

run_test 'Git versions are consistent' '
	( cd ../git && git describe || echo "No submodule!" ) >tmp/sm_version &&
	sed -n -e "/^GIT_VER[ 	]*=/ {
		s/^GIT_VER[ 	]*=[ 	]*//
		p
	}" >tmp/make_version &&
	diff -u tmp/sm_version tmp/make_version
'


John




More information about the CGit mailing list