From b7dc24298dc69ffb62fd69cd735c0672b2e27dd2 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Fri, 16 Apr 2010 10:37:32 -0700 Subject: [PATCH] Makefile: Add an explicit version file to the repository. We do this so that "git archive" produces a usable tar file without us having to post-modify it, (since tools like git-buildpackage might not give us an easy way to hook into the tar-file-creation step). To support this we also have to change our preference to prefer the git-described-based version (if available) and only if not available do we fallback to using what's in the "version" file. Finally, we also ovverride this preference when releasing, (where what's in the "version" file wins). Note that using our Makefile's rule to create a tar file still will insert the git-based version into the tar file. This is useful for creating snapshots which will correctly report the git version from which they were created. --- Makefile.local | 27 +++++++++++++++++++-------- version | 1 + 2 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 version diff --git a/Makefile.local b/Makefile.local index 53a4a94b..24612c1d 100644 --- a/Makefile.local +++ b/Makefile.local @@ -9,7 +9,13 @@ # Between releases, (such as when compiling notmuch from the git # repository), we let git append identification of the actual commit. PACKAGE=notmuch -VERSION:=$(shell if [ -f version ]; then cat version; else git describe --match '[0-9.]*'; fi) + +VERSION:=$(shell cat version) +ifneq ($(MAKECMDGOALS),release) +ifneq ($(MAKECMDGOALS),release-message) +VERSION:=$(shell if git describe > /dev/null 2>&1; then git describe --match '[0-9.]*'; else cat version; fi) +endif +endif RELEASE_HOST=notmuchmail.org RELEASE_DIR=/srv/notmuchmail.org/www/releases @@ -50,9 +56,9 @@ test: all $(TAR_FILE): git archive --format=tar --prefix=$(PACKAGE)-$(VERSION)/ HEAD > $(TAR_FILE).tmp - echo $(VERSION) > version - tar --append -f $(TAR_FILE).tmp --transform s_^_$(PACKAGE)-$(VERSION)/_ version - rm version + echo $(VERSION) > version.tmp + tar --append -f $(TAR_FILE).tmp --transform s_^_$(PACKAGE)-$(VERSION)/_ --transform 's_.tmp$$__' version.tmp + rm version.tmp gzip < $(TAR_FILE).tmp > $(TAR_FILE) @echo "Source is ready for release in $(TAR_FILE)" @@ -68,18 +74,23 @@ dist: $(TAR_FILE) # We invoke make recursively only to force ordering of our phony # targets in the case of parallel invocation of make (-j). +# +# We carefully ensure that our VERSION variable is passed down to any +# sub-ordinate make invocations (which won't otherwhise know that they +# are part of the release and need to take the version from the +# version file). .PHONY: release release: verify-no-dirty-code - $(MAKE) test - $(MAKE) $(GPG_FILE) - $(MAKE) verify-newer + $(MAKE) VERSION=$(VERSION) test + $(MAKE) VERSION=$(VERSION) $(GPG_FILE) + $(MAKE) VERSION=$(VERSION) verify-newer scp $(TAR_FILE) $(SHA1_FILE) $(GPG_FILE) $(RELEASE_HOST):$(RELEASE_DIR) ssh $(RELEASE_HOST) "rm -f $(RELEASE_DIR)/LATEST-$(PACKAGE)-[0-9]* && ln -s $(TAR_FILE) $(RELEASE_DIR)/LATEST-$(PACKAGE)-$(VERSION)" mkdir -p releases mv $(TAR_FILE) $(SHA1_FILE) $(GPG_FILE) releases git tag -s -m "$(PACKAGE) $(VERSION) release" $(VERSION) git push origin $(VERSION) - $(MAKE) release-message > $(PACKAGE)-$(VERSION).announce + $(MAKE) VERSION=$(VERSION) release-message > $(PACKAGE)-$(VERSION).announce @echo "Please send a release announcement using $(PACKAGE)-$(VERSION).announce as a template." .PHONY: release-message diff --git a/version b/version new file mode 100644 index 00000000..49d59571 --- /dev/null +++ b/version @@ -0,0 +1 @@ +0.1 -- 2.43.0