From mboxrd@z Thu Jan 1 00:00:00 1970 From: mailings at hupie.com (Ferry Huberts) Date: Tue, 19 Mar 2013 21:45:23 +0100 Subject: [PATCH v1 1/1] tests: add Git submodule version consistency test In-Reply-To: <20130319203333.GE2283@serenity.lan> References: <1363651305-30614-1-git-send-email-mailings@hupie.com> <20130319104332.GA2283@serenity.lan> <514847B5.10407@hupie.com> <20130319112651.GC2283@serenity.lan> <20130319200029.GD2283@serenity.lan> <5148C8EE.2020008@hupie.com> <20130319203333.GE2283@serenity.lan> Message-ID: <5148CE63.4010408@hupie.com> On 19/03/13 21:33, John Keeping wrote: > On Tue, Mar 19, 2013 at 09:22:06PM +0100, Ferry Huberts wrote: >> >> >> On 19/03/13 21:00, John Keeping wrote: >>> Subject: [PATCH] tests: check that Git version are in sync >>> >>> This ensures that the Git version pointed at by the submodule is the >>> same as the one that will be fetched using "make get-git". >>> >>> Suggested-by: Ferry Huberts >>> Signed-off-by: John Keeping >>> --- >>> This is an enhanced version of what I posted earlier, which now checks >>> that the correct Git version is available even if "make get-git" has >>> been used to fetch it, by examining Git's GIT-VERSION-FILE. >> >> I don't agree with that. >> IMHO we should check that the submodule SHA as stored in the repository >> matches the version specified in the Makefile. >> >> Now you check 2 versions that might be 'dirty' against each other; the >> version in the Makefile to whatever someone has put in the git >> directory. That can easily pass testing locally but fail testing once >> committed (commit dirty Makefile but forget to adjust submodule SHA to >> match 'development' git directory unpacked from a random git tar download). > > The test using GIT-VERSION-FILE will catch this, that's generated during > the Git build process to match precisely what is built (including a > dirty flag). > Goes to prove that I don't know enough about the Git build process :-) >> I'd prefer a situation in which we make sure that we test as close to a >> clean checkout as possible, which means that we should use committed >> state (when possible). > > The second check is doing that (or close to it, we're checking staged > state rather than committed state, which is better in the case that > you've got a commit ready and want to sanity check it before typing "git > commit"). Fair enough. > > I think the combination of these two tests gives what you want, the > GIT-VERSION-FILE tests that the version of Git being used to build CGit > matches the Makefile and the "git ls-files --stage -- git" test checks > that what's in the index matches. We could change that to "git ls-tree > HEAD -- git" but I think that is unnecessarily annoying for people > trying out new Git versions. > Agree Reviewed-by: Ferry Huberts >>> >>> I also changed the submodule test to check the version of the submodule >>> in the index rather than whatever happens to be checked out. I think >>> this is a more sensible test for people who are experimenting with >>> different Git versions. >>> >>> tests/t0001-validate-git-versions.sh | 36 ++++++++++++++++++++++++++++++++++++ >>> 1 file changed, 36 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..3378358 >>> --- /dev/null >>> +++ b/tests/t0001-validate-git-versions.sh >>> @@ -0,0 +1,36 @@ >>> +#!/bin/sh >>> + >>> +. ./setup.sh >>> + >>> +prepare_tests 'Check Git version is correct' >>> + >>> +run_test 'extract Git version from Makefile' ' >>> + sed -n -e "/^GIT_VER[ ]*=/ { >>> + s/^GIT_VER[ ]*=[ ]*// >>> + p >>> + }" ../Makefile >trash/makefile_version >>> +' >>> + >>> +run_test 'test Git version matches Makefile' ' >>> + ( cat ../git/GIT-VERSION-FILE || echo "No GIT-VERSION-FILE" ) | >>> + sed -e "s/GIT_VERSION[ ]*=[ ]*//" >trash/git_version && >>> + diff -u trash/git_version trash/makefile_version >>> +' >>> + >>> +run_test 'test submodule version matches Makefile' ' >>> + if ! test -e ../git/.git >>> + then >>> + echo "git/ is not a Git repository" >&2 >>> + else >>> + ( >>> + cd .. && >>> + sm_sha1=$(git ls-files --stage -- git | >>> + sed -e "s/^[0-9]* \\([0-9a-f]*\\) [0-9] .*$/\\1/") && >>> + cd git && >>> + git describe --match "v[0-9]*" $sm_sha1 >>> + ) | sed -e "s/^v//" >trash/sm_version && >>> + diff -u trash/sm_version trash/makefile_version >>> + fi >>> +' >>> + >>> +tests_done >>> >> >> -- >> Ferry Huberts >> >> _______________________________________________ >> cgit mailing list >> cgit at hjemli.net >> http://hjemli.net/mailman/listinfo/cgit -- Ferry Huberts