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}
> 

Reply via email to