On Mon, 11 Jul 2022 at 11:17:55 +0000, Klemens Nanni wrote:
> GH_* ports obviously set MASTER_SITES to MASTER_SITES_GITHUB which
> defaults github.com/${account}/${project}/archive/${commit-or-tag}.
>
> If additional patches need to be fetched, e.g. pending PRs to fix the
> local port, additional MASTER_SITES0-9 must be defined which always
> duplicate the GH_* values:
>
> MASTER_SITES0 = https://github.com/account/project/pull/
> PATCHFILES += many_fixes-{}number.patch:0
> or
> MASTER_SITES0 = https://github.com/account/project/commit/
> PATCHFILES += one_fix-{}id.patch:0
> or
> MASTER_SITES0 = https://github.com/account/project/
> PATCHFILES += many_fixes-{pull/}number.patch:0
> PATCHFILES += one_fix-{commit/}id.patch:0
>
> Not super important but a bit annoying, the automatically generated
> MASTER_SITES_GITHUB can't really be reused (without dirty make fiddling)
> so MASTER_SITES0 is always a duplicate and PATCHFILES need :0 to work.
>
>
> But all we need to make this reusable is move the "archive/" part from
> MASTER_SITES_GITHUB to GH_DISTFILE, i.e. internally do
>
> MASTER_SITES = https://github.com/account/project/
> DISTNAME = account-project-{archive/}commit_or_tag.tar.gz
> instead of
> MASTER_SITES = https://github.com/account/project/archive/
> DISTNAME = account-project-{}commit_or_tag.tar.gz
>
> since this way the aforementioned patch fetching can be simplified to
>
> PATCHFILES += many_fixes-{pull/}number.patch
> or
> PATCHFILES += one_fix-{commit/}id.patch
>
> without additional MASTER_SITES0-9.
>
> It's a rather unimportant detail but juggling with WIP ports, own PRs,
> fixes, etc. gets a little easier with this since the Makefile stays a
> bit smaller.
>
> For testing, I have fetched several ports, both using GH_COMMIT and
> GH_TAGNAME, without any failures or distinfo changes.
>
> As for the logic in bsd.port.mk itself, this also lifts the quirky
> add-trailing-slash-to-MASTER_SITES_GITHUB-only-if-GH_TAGNAME-is-set
> since it now ends with a fixed string and the additional URL paths only
> come in where GH_TAGNAME or whatever follows is definitely set.
>
> Feedback? Objection? OK?
>
I like it! I can't speak to the make voodoo but the functionality is OK
abieber@ :D
Taking it a step further.. Often times I have a MODGO_ port that has GH
patches upstream.. for example:
https://patch-diff.githubusercontent.com/raw/tailscale/tailscale/pull/4838.patch
)
I wonder if it would make sense to have an "alias" for a
MASTER_SITES entry that could be referenced in a more human
frindly/generic way. Maybe something like:
PATCHFILES += github:account/project/many_fixes-{pull/}number.patch
PATCHFILES += gitlab:account/project/one_fix-{commit/}id.patch
>
> Index: bsd.port.mk
> ===================================================================
> RCS file: /cvs/ports/infrastructure/mk/bsd.port.mk,v
> retrieving revision 1.1576
> diff -u -p -r1.1576 bsd.port.mk
> --- bsd.port.mk 6 Jul 2022 09:30:41 -0000 1.1576
> +++ bsd.port.mk 11 Jul 2022 10:59:44 -0000
> @@ -613,7 +613,7 @@ GH_PROJECT ?=
>
> .if !empty(GH_PROJECT) && !empty(GH_TAGNAME)
> DISTNAME ?=
> ${GH_PROJECT}-${GH_TAGNAME:C/^(v|V|ver|[Rr]el|[Rr]elease)[-._]?([0-9])/\2/}
> -GH_DISTFILE =
> ${GH_PROJECT}-${GH_TAGNAME:C/^(v|V|ver|[Rr]el|[Rr]elease)[-._]?([0-9])/\2/}${EXTRACT_SUFX}
> +GH_DISTFILE =
> ${GH_PROJECT}-{archive/}${GH_TAGNAME:C/^(v|V|ver|[Rr]el|[Rr]elease)[-._]?([0-9])/\2/}${EXTRACT_SUFX}
> .endif
>
> PKGNAME ?= ${DISTNAME}
> @@ -1261,7 +1261,7 @@ ERRORS += "Fatal: specifying both GH_TAG
> ERRORS += "Fatal: using master as GH_TAGNAME is invalid"
> . endif
> MASTER_SITES_GITHUB += \
> -
> https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/archive/${GH_TAGNAME:S/$/\//}
> + https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/
>
> MASTER_SITES ?= ${MASTER_SITES_GITHUB}
> HOMEPAGE ?= https://github.com/${GH_ACCOUNT}/${GH_PROJECT}
> @@ -1290,7 +1290,7 @@ _warn_checksum += ;echo ">>> MASTER_SITE
> EXTRACT_SUFX ?= .tar.gz
>
> .if !empty(GH_COMMIT)
> -GH_DISTFILE =
> ${DISTNAME}-${GH_COMMIT:C/(........).*/\1/}${EXTRACT_SUFX}{${GH_COMMIT}${EXTRACT_SUFX}}
> +GH_DISTFILE =
> ${DISTNAME}-${GH_COMMIT:C/(........).*/\1/}${EXTRACT_SUFX}{archive/${GH_COMMIT}${EXTRACT_SUFX}}
> DISTFILES ?= ${GH_DISTFILE}
> .elif defined(DISTNAME)
> DISTFILES ?= ${DISTNAME}${EXTRACT_SUFX}
>