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

Ferry Huberts mailings at hupie.com
Tue Mar 19 12:10:45 CET 2013



On 19/03/13 11:43, John Keeping wrote:
> 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
> '
>


Did you test this?
Because the submodule SHA points to the commit, not to the tag.
So the GIT_VER and submodule SHA are actually different.
That is the reason I did the git diff

It appears your script-fu is better than mine ;-)

>
> John
>

-- 
Ferry Huberts




More information about the CGit mailing list