git: 458dc7f30310 - main - pkgbase: fix incremental generation of packages

From: Baptiste Daroussin <bapt_at_FreeBSD.org>
Date: Thu, 10 Oct 2024 06:49:23 UTC
The branch main has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=458dc7f30310394a571fd4f2f5368acd48684652

commit 458dc7f30310394a571fd4f2f5368acd48684652
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2024-10-08 06:53:45 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2024-10-10 06:48:28 +0000

    pkgbase: fix incremental generation of packages
    
    Replace the regex trying to catch the branch name of the existing
    repository which was too naive with simpler glob matching.
    
    As a result the only case when we only use the new packages are:
    moving from alpha to beta
    moving from beta to rc
    moving from rc to release
    changing the major version number for the main git branch
    
    PR:             281393
    Differential Revision:  D46874
---
 Makefile.inc1 | 46 ++++++++++++++++++++++++++++++++--------------
 1 file changed, 32 insertions(+), 14 deletions(-)

diff --git a/Makefile.inc1 b/Makefile.inc1
index 557bbc825625..55d49d5760f2 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -571,28 +571,27 @@ VERSION=	FreeBSD ${_REVISION}-${_BRANCH:C/-p[0-9]+$//} ${TARGET_ARCH} ${SRCRELDA
 .endif
 MAJOR_REVISION=	${_REVISION:R}
 
-.if !defined(PKG_VERSION)
 _PKG_REVISION=	${_REVISION}
 _STRTIMENOW=	%Y%m%d%H%M%S
 _TIMENOW=	${_STRTIMENOW:gmtime}
 BRANCH_EXT=
 .if ${_BRANCH:MCURRENT*} || ${_BRANCH:MSTABLE*} || ${_BRANCH:MPRERELEASE*}
-_PKG_REVISION=	${MAJOR_REVISION}
-BRANCH_EXT=	snap
-EXTRA_REVISION=	.${BRANCH_EXT}${_TIMENOW}
+_PKG_REVISION:= ${MAJOR_REVISION}
+BRANCH_EXT=	${MAJOR_REVISION}.snap
+EXTRA_REVISION=	.snap${_TIMENOW}
 .elif ${_BRANCH:MALPHA*}
-BRANCH_EXT=	a${_BRANCH:C/ALPHA([0-9]+).*/\1/}
-EXTRA_REVISION=	.${BRANCH_EXT}.${_TIMENOW}
+BRANCH_EXT=	alpha
+EXTRA_REVISION=	.${_BRANCH:C/ALPHA([0-9]+).*/\1/}.${_TIMENOW}
 .elif ${_BRANCH:MBETA*}
-BRANCH_EXT=	b${_BRANCH:C/BETA([0-9]+).*/\1/}
-EXTRA_REVISION=	.${BRANCH_EXT}.${_TIMENOW}
+BRANCH_EXT=	beta
+EXTRA_REVISION=	.${_BRANCH:C/BETA([0-9]+).*/\1/}.${_TIMENOW}
 .elif ${_BRANCH:MRC*}
-BRANCH_EXT=	rc${_BRANCH:C/RC([0-9]+).*/\1/}
-EXTRA_REVISION=	.${BRANCH_EXT}.${_TIMENOW}
+BRANCH_EXT=	rc
+EXTRA_REVISION=	.rc${_BRANCH:C/RC([0-9]+).*/\1/}.${_TIMENOW}
 .elif ${_BRANCH:M*-p*}
-BRANCH_EXT=	p${_BRANCH:C/.*-p([0-9]+$)/\1/}
-EXTRA_REVISION=	${BRANCH_EXT}
+EXTRA_REVISION=	p${_BRANCH:C/.*-p([0-9]+$)/\1/}
 .endif
+.if !defined(PKG_VERSION)
 PKG_VERSION:=	${_PKG_REVISION}${EXTRA_REVISION:C/[[:space:]]//g}
 .endif
 .endif	# !defined(PKG_VERSION)
@@ -2040,7 +2039,26 @@ PKG_EXT=	pkg
 .if exists(${PKG_ABI_FILE}) && exists(${REPODIR}/${PKG_ABI})
 PKG_VERSION_FROM!=/usr/bin/readlink ${REPODIR}/${PKG_ABI}/latest
 PKG_VERSION_FROM_DIR=	${REPODIR}/${PKG_ABI}/${PKG_VERSION_FROM}
-BRANCH_EXT_FROM=	${PKG_VERSION_FROM:C/^[^[:alpha:]]+p?([[:alpha:]]*)[0-9]+$/\1/}
+# Determine the name of the branch base on the version
+# X.bY => beta
+# X.aY => alpha
+# X.rcY => rc
+# X.snap => snap
+# all others mean release
+#
+# This will be used when comparing to the branch that we are building
+# to decide if we keep old packages or new packages when only their
+# version differs
+BRANCH_EXT_FROM=
+.if ${PKG_VERSION_FROM:M*.snap*}
+BRANCH_EXT_FROM=	${PKG_VERSION_FROM:C/.snap.*$//}.snap
+.elif ${PKG_VERSION_FROM:M*.b*}
+BRANCH_EXT_FROM=	beta
+.elif ${PKG_VERSION_FROM:M*.rc*}
+BRANCH_EXT_FROM=	rc
+.elif ${PKG_VERSION_FROM:M*.a*}
+BRANCH_EXT_FROM=	alpha
+.endif
 .else
 PKG_VERSION_FROM=
 PKG_VERSION_FROM_DIR=
@@ -2081,7 +2099,7 @@ real-update-packages: stage-packages .PHONY
 	    continue; \
 	  fi ; \
 	  newsum=$$(pkg query -F ${REPODIR}/${PKG_ABI}/${PKG_VERSION}/$${newpkgname} '%X') ; \
-	  if [ "${BRANCH_EXT_FROM}" == "${BRANCH_EXT:C/[0-9]+$//}" -a "$${oldsum}" == "$${newsum}" ]; then \
+	  if [ "${BRANCH_EXT_FROM}" = "${BRANCH_EXT}" -a "$${oldsum}" = "$${newsum}" ]; then \
 	   echo "==> Keeping old ${PKG_NAME_PREFIX}-$${pkgname}-${PKG_VERSION_FROM}.${PKG_EXT}" ; \
 	   rm ${REPODIR}/${PKG_ABI}/${PKG_VERSION}/$${newpkgname} ; \
 	   cp $${pkg} ${REPODIR}/${PKG_ABI}/${PKG_VERSION} ; \