make: new changes-* rules
This commit is contained in:
		
							parent
							
								
									309a77d03e
								
							
						
					
					
						commit
						7114da4baf
					
				
							
								
								
									
										117
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										117
									
								
								Makefile
									
									
									
									
									
								
							| @ -1105,24 +1105,11 @@ haddock: \ | |||||||
| .SECONDEXPANSION: | .SECONDEXPANSION: | ||||||
| 
 | 
 | ||||||
| ########################
 | ########################
 | ||||||
| # 2017 changelog process: 
 | # changelogs
 | ||||||
| # at release time, in each package dir, make changes-show >CHANGES.org, edit, move to CHANGES. Eg:
 |  | ||||||
| # for p in  hledger-lib hledger hledger-ui hledger-web hledger-api; do (cd $p; make -f../Makefile changes-show-from-hledger-1.4 >CHANGES.org); done
 |  | ||||||
| # TODO: prints junk after failing help-system.mk include, make changes-show doesn't work from subdir, want to run from top dir; move to Shake
 |  | ||||||
| 
 | 
 | ||||||
| LASTTAG=$(shell git describe --tags --abbrev=0) | LASTTAG=$(shell git describe --tags --abbrev=0) | ||||||
| 
 | 
 | ||||||
| changes-show: $(call def-help,changes-show, show commits affecting the current directory excluding any hledger package subdirs from the last tag as org nodes newest first ) | # pre 2017:
 | ||||||
| 	@make changes-show-from-$(LASTTAG) |  | ||||||
| 
 |  | ||||||
| changes-show-from-%: #$(call def-help,changes-show-from-REV, show commits affecting the current directory excluding any hledger package subdirs from this git revision onward as org nodes newest first )
 |  | ||||||
| 	@git log --abbrev-commit --pretty=format:'ORGNODE %s (%an)%n%b%h' $*.. -- . ':!hledger' ':!hledger-*' \
 |  | ||||||
| 		| sed -e 's/^\*/-/' -e 's/^ORGNODE/*/' \
 |  | ||||||
| 		| sed -e 's/ (Simon Michael)//' |  | ||||||
| # would be nice to sort changes by case-insensitive name and reverse date, like 
 |  | ||||||
| # git ll hledger-1.9.1.. -- hledger* | grep -v doc: | sort -f -k3,3 -k1,1r
 |  | ||||||
| 
 |  | ||||||
| # old:
 |  | ||||||
| ## The last git revision referenced in the change notes. 
 | ## The last git revision referenced in the change notes. 
 | ||||||
| ## (Or, if there are no change notes, the last tag.
 | ## (Or, if there are no change notes, the last tag.
 | ||||||
| ## Tries hard to be warning free and run shell commands only when needed.)
 | ## Tries hard to be warning free and run shell commands only when needed.)
 | ||||||
| @ -1178,6 +1165,106 @@ changes-show-from-%: #$(call def-help,changes-show-from-REV, show commits affect | |||||||
| #		$(call def-help,changenotes-show-last, show the last commit recorded in $(CHANGENOTES) )
 | #		$(call def-help,changenotes-show-last, show the last commit recorded in $(CHANGENOTES) )
 | ||||||
| #	@git l -1 $(CHANGENOTESLASTREV)
 | #	@git l -1 $(CHANGENOTESLASTREV)
 | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | # 2017-2018:
 | ||||||
|  | # At release time, in each package dir, dump commit log into CHANGES.org, edit and move to CHANGES. Eg:
 | ||||||
|  | #  export FROM=hledger-1.11; make changes-show-$FROM >CHANGES.org; for p in  hledger-lib hledger hledger-ui hledger-web hledger-api; do (cd $p; make -f../Makefile changes-show-$FROM >CHANGES.org); done
 | ||||||
|  | # where FROM could be a branch name (1.11) or a specific release tag (hledger-1.11.1, more precise)
 | ||||||
|  | 
 | ||||||
|  | #only works in top dir, use changes-show-TAG instead
 | ||||||
|  | # changes-show: $(call def-help,changes-show, show commits affecting the current directory excluding any hledger package subdirs from the last tag as org nodes newest first )
 | ||||||
|  | # 	@make changes-show-from-$(LASTTAG)
 | ||||||
|  | 
 | ||||||
|  | # --abbrev-commit shortens commit hashes. --pretty sets org-like output format.
 | ||||||
|  | # ORGNODE stands in for * until any * list bullets in commit messages have been rewritten.
 | ||||||
|  | # %s summary, %an author name, %n newline if needed?, %b long description, %h hash
 | ||||||
|  | # :! args are exclude pathspecs, to exclude package dirs when running in top dir.
 | ||||||
|  | #  https://git-scm.com/docs/gitglossary.html#gitglossary-aiddefpathspecapathspec
 | ||||||
|  | # changes-show-%: #$(call def-help,changes-show-from-REV, show commits affecting the current directory excluding any hledger package subdirs from this git revision onward as org nodes newest first )
 | ||||||
|  | # 	@git log \
 | ||||||
|  | # 		--abbrev-commit --pretty=format:'ORGNODE %s (%an)%n%b' $*.. \
 | ||||||
|  | # 		--stat \
 | ||||||
|  | # 		-- . ':!hledger-lib' ':!hledger' ':!hledger-ui' ':!hledger-web' ':!hledger-api' \
 | ||||||
|  | # 	| sed \
 | ||||||
|  | # 		-e 's/^\*/-/' \
 | ||||||
|  | # 		-e 's/^ORGNODE/*/' \
 | ||||||
|  | # 		-e 's/ (Simon Michael)//' \
 | ||||||
|  | # 		-e 's/\[ci skip\]//' \
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # 2018-2019:
 | ||||||
|  | # goal: periodically, update all changelogs in place and save last seen commit
 | ||||||
|  | 
 | ||||||
|  | #changes-update:
 | ||||||
|  | 
 | ||||||
|  | changes: | ||||||
|  | 	make changes-top >CHANGES.org | ||||||
|  | 	make changes-lib >hledger-lib/CHANGES.org | ||||||
|  | 	make changes-cli >hledger/CHANGES.org | ||||||
|  | 	make changes-ui  >hledger-ui/CHANGES.org | ||||||
|  | 	make changes-web >hledger-web/CHANGES.org | ||||||
|  | 	make changes-api >hledger-api/CHANGES.org | ||||||
|  | 
 | ||||||
|  | # :! args are exclude pathspecs, https://git-scm.com/docs/gitglossary.html#gitglossary-aiddefpathspecapathspec
 | ||||||
|  | EXCLUDEPKGDIRS=\
 | ||||||
|  | 	':!hledger-lib' \
 | ||||||
|  | 	':!hledger' \
 | ||||||
|  | 	':!hledger-ui' \
 | ||||||
|  | 	':!hledger-web' \
 | ||||||
|  | 	':!hledger-api' \
 | ||||||
|  | 
 | ||||||
|  | # -E for extended regular expressions
 | ||||||
|  | # ensure bullet lists in descriptions use - not *
 | ||||||
|  | # convert ORGNODE placeholders to *
 | ||||||
|  | # strip most PKG: prefixes
 | ||||||
|  | # strip maintainer's author name
 | ||||||
|  | # strip [ci skip] lines
 | ||||||
|  | # replace consecutive newlines with one
 | ||||||
|  | # indent long descriptions
 | ||||||
|  | CLEANUPCHANGES=sed -E \
 | ||||||
|  | 		-e 's/^( )*\*/\1-/' \
 | ||||||
|  | 		-e 's/^ORGNODE/*/' \
 | ||||||
|  | 		-e 's/^\* $(PKGPREFIX): /* /' \
 | ||||||
|  | 		-e 's/ \(Simon Michael\)//' \
 | ||||||
|  | 		-e 's/
//' \ | ||||||
|  | 		-e 's/\[ci skip\]//' \
 | ||||||
|  | 		-e '/./,/^$$/!d' \
 | ||||||
|  | 		-e 's/^([^\*])/  \1/' \
 | ||||||
|  | 
 | ||||||
|  | # --abbrev-commit shortens commit hashes
 | ||||||
|  | GITLOG=git log --abbrev-commit | ||||||
|  | 
 | ||||||
|  | # verbose org-like changelog format, including hashes and --stat info for troubleshooting.
 | ||||||
|  | # ORGNODE stands in for * until any * list bullets in commit messages have been rewritten.
 | ||||||
|  | # %s=summary, %an=author name, %n=newline if needed, %b=long description, %h=hash
 | ||||||
|  | VERBOSEFMT=--pretty=format:'ORGNODE %s (%an)%n%b%h' --stat | ||||||
|  | 
 | ||||||
|  | changes-%-verbose: $(call def-help,changes-PKGID-verbose, show commits since the rev in PKGDIR/.CHANGES.seen in PKGDIR as verbose org nodes ) | ||||||
|  | 	$(eval PKGID=$*) | ||||||
|  | 	$(eval PKGDIR=$(subst -cli,,hledger-$(PKGID))) | ||||||
|  | 	$(eval PKGPREFIX=$(shell echo $(PKGDIR) | sed -e s/hledger-// -e s/^hledger$$/cli/)) | ||||||
|  | 	$(eval REV=$(shell cat $(PKGDIR)/.CHANGES.seen)) | ||||||
|  | 	@$(GITLOG) $(VERBOSEFMT) $(REV).. -- $(PKGDIR) | $(CLEANUPCHANGES) | ||||||
|  | 
 | ||||||
|  | changes-top-verbose: $(call def-help,changes-top-verbose, show commits since the rev in .CHANGES.seen excluding hledger package subdirs as verbose org nodes ) | ||||||
|  | 	$(eval REV=$(shell cat .CHANGES.seen)) | ||||||
|  | 	@$(GITLOG) $(VERBOSEFMT) $(REV).. -- . $(EXCLUDEPKGDIRS) | $(CLEANUPCHANGES) | ||||||
|  | 
 | ||||||
|  | # org-like changelog format suitable for changelogs/release notes
 | ||||||
|  | CHANGELOGFMT=--pretty=format:'ORGNODE %s (%an)%n%b' | ||||||
|  | 
 | ||||||
|  | changes-%: $(call def-help,changes-PKGDIR, show commits since the rev in PKGDIR/.CHANGES.seen in PKGDIR as changelog-ready org nodes ) | ||||||
|  | 	$(eval PKGID=$*) | ||||||
|  | 	$(eval PKGDIR=$(subst -cli,,hledger-$(PKGID))) | ||||||
|  | 	$(eval PKGPREFIX=$(shell echo $(PKGDIR) | sed -e s/hledger-// -e s/^hledger$$/cli/)) | ||||||
|  | 	$(eval REV=$(shell cat $(PKGDIR)/.CHANGES.seen)) | ||||||
|  | 	@$(GITLOG) $(CHANGELOGFMT) $(REV).. -- $(PKGDIR) | $(CLEANUPCHANGES) | ||||||
|  | 
 | ||||||
|  | changes-top: $(call def-help,changes-top, show commits since the rev in .CHANGES.seen excluding hledger package subdirs as changelog-ready org nodes ) | ||||||
|  | 	$(eval REV=$(shell cat .CHANGES.seen)) | ||||||
|  | 	@$(GITLOG) $(CHANGELOGFMT) $(REV).. -- . $(EXCLUDEPKGDIRS) | $(CLEANUPCHANGES) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| ###############################################################################
 | ###############################################################################
 | ||||||
| $(call def-help-subheading,RELEASING:) | $(call def-help-subheading,RELEASING:) | ||||||
| #$(call def-help-subheading,see also developer guide -> how to -> do a release)
 | #$(call def-help-subheading,see also developer guide -> how to -> do a release)
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user