Re: git: 16bde072b16d - main - bsd.sites.mk: Support tag names with USE_GITLAB
Date: Wed, 12 Jul 2023 22:15:13 UTC
Hello Felix,
Nice work!
Thats nice to see clean distnames with this change:
-SHA256 (libinput-libei-xxx*_GL0*.tar.gz) = xxx
+SHA256 (libei-1.0.0.tar.bz2) = yyy
Isn't possible to have same result with USE_GITHUB?
SHA256 (ib-xarchiver-0.5.4.21*_GH0*.tar.gz) = xxx
like we have when github static tarballs are available and we use
MASTER_SITES instead of USE_GITHUB:
MASTER_SITES=
https://github.com/juzzlin/Heimer/releases/download/${DISTVERSION}/
SHA256 (heimer-4.2.0.tar.gz) = xxx (without *_GH0*)
Thanks,
Felix Palmen <zirias@freebsd.org> escreveu no dia quarta, 12/07/2023 à(s)
19:58:
> The branch main has been updated by zirias:
>
> URL:
> https://cgit.FreeBSD.org/ports/commit/?id=16bde072b16daca1c886116e602c94b5fa99c20f
>
> commit 16bde072b16daca1c886116e602c94b5fa99c20f
> Author: Felix Palmen <zirias@FreeBSD.org>
> AuthorDate: 2022-10-21 07:10:41 +0000
> Commit: Felix Palmen <zirias@FreeBSD.org>
> CommitDate: 2023-07-12 18:55:08 +0000
>
> bsd.sites.mk: Support tag names with USE_GITLAB
>
> Since quite some time, it's possible to download generated tarballs
> from
> gitlab for a tag name without knowing the corresponding git hash. This
> is preferable because you have a single source of truth about the
> software version.
>
> Support this by replacing GL_COMMIT with GL_TAGNAME which also accepts
> a
> commit hash, similar to USE_GITHUB. Unfortunately, there's a catch, the
> DISTFILE must be named exactly: ${GL_PROJECT}-${GL_TAGNAME}.tar.bz2,
> otherwise it extracts in a directory that contains the commit hash. So,
> we can't add the gitlab account or the revision suffix to make it work.
>
> Therefore, detect whether GL_TAGNAME contains a commit hash, and if it
> does, use the old behavior of deriving DISTNAME and DISTFILES.
>
> Document in CHANGES, also add a DEV_WARNING similar to USE_GITHUB when
> there's an URL in MASTER_SITES that looks like a gitlab URL. With
> support for tags, there shouldn't be any reason left to hardcode such
> an
> URL in MASTER_SITES.
>
> PR: 248967
> Approved by: portmgr (tcberner, mentor)
> Differential Revision: https://reviews.freebsd.org/D37077
> ---
> CHANGES | 16 ++++++++++++++
> Mk/Uses/kde.mk | 2 +-
> Mk/Uses/xorg-cat.mk | 2 +-
> Mk/bsd.options.mk | 2 +-
> Mk/bsd.port.mk | 8 +------
> Mk/bsd.sites.mk | 61
> +++++++++++++++++++++++++++++++++++++----------------
> 6 files changed, 63 insertions(+), 28 deletions(-)
>
> diff --git a/CHANGES b/CHANGES
> index 5e98b3ee86a4..25c7d5fa12a9 100644
> --- a/CHANGES
> +++ b/CHANGES
> @@ -10,6 +10,22 @@ in the release notes and/or placed into UPDATING.
>
> All ports committers are allowed to commit to this file.
>
> +20230712:
> +AUTHOR: zirias@FreeBSD.org
> +
> + USE_GITLAB has been changed to allow fetching by tag name. This was
> done by
> + removing the GL_COMMIT variable and introducing GL_TAGNAME instead.
> +
> + Similar to USE_GITHUB/GH_TAGNAME, you can still use a commit hash with
> + GL_TAGNAME (the full 40-character hash is required for that). If not
> + specified, GL_TAGNAME defaults to DISTVERSIONFULL.
> +
> + Note fetching by tag name might not work on gitlab installations running
> + very old versions; in that case, you must still specify a commit hash.
> +
> + For now, GL_COMMIT is still recognized but deprecated, using it will
> issue
> + a warning in developer mode.
> +
> 20230712:
> AUTHOR: 0mp@FreeBSD.org
>
> diff --git a/Mk/Uses/kde.mk b/Mk/Uses/kde.mk
> index aa9e2f39fbc4..863fe85d0c17 100644
> --- a/Mk/Uses/kde.mk
> +++ b/Mk/Uses/kde.mk
> @@ -134,7 +134,7 @@ USE_GITLAB= yes
> GL_SITE= https://invent.kde.org
> GL_ACCOUNT= ${_invent_category}
> GL_PROJECT= ${_invent_name}
> -GL_COMMIT= ${_invent_hash}
> +GL_TAGNAME= ${_invent_hash}
> . endif
> . endif
>
> diff --git a/Mk/Uses/xorg-cat.mk b/Mk/Uses/xorg-cat.mk
> index 3b64eecad9ae..0853fd6b3e3c 100644
> --- a/Mk/Uses/xorg-cat.mk
> +++ b/Mk/Uses/xorg-cat.mk
> @@ -26,7 +26,7 @@
> # * meson (experimental)
> #
> #
> -# By defining USE_GITLAB and GL_COMMIT, it is possible to pull code
> straight
> +# By defining USE_GITLAB and GL_TAGNAME, it is possible to pull code
> straight
> # from the freedesktop.org gitlab, instead of official release tarballs.
> #
> #.MAINTAINER: x11@FreeBSD.org
> diff --git a/Mk/bsd.options.mk b/Mk/bsd.options.mk
> index 90af39e1bed5..09656bb0e1e9 100644
> --- a/Mk/bsd.options.mk
> +++ b/Mk/bsd.options.mk
> @@ -184,7 +184,7 @@ _OPTIONS_FLAGS= ALL_TARGET BROKEN
> CABAL_EXECUTABLES CATEGORIES CFLAGS CONFIGURE_
> CONFLICTS CONFLICTS_BUILD CONFLICTS_INSTALL CPPFLAGS
> CXXFLAGS \
> DESKTOP_ENTRIES DISTFILES EXTRA_PATCHES EXTRACT_ONLY \
> GH_ACCOUNT GH_PROJECT GH_SUBDIR GH_TAGNAME GH_TUPLE \
> - GL_ACCOUNT GL_COMMIT GL_PROJECT GL_SITE GL_SUBDIR GL_TUPLE
> \
> + GL_ACCOUNT GL_PROJECT GL_SITE GL_SUBDIR GL_TAGNAME
> GL_TUPLE \
> IGNORE INFO INSTALL_TARGET LDFLAGS LIBS MAKE_ARGS MAKE_ENV
> \
> MASTER_SITES PATCHFILES PATCH_SITES PLIST_DIRS PLIST_FILES
> \
> PLIST_SUB PORTDOCS PORTEXAMPLES SUB_FILES SUB_LIST \
> diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk
> index 5e3c2e7fad2f..9f6dfb0452c1 100644
> --- a/Mk/bsd.port.mk
> +++ b/Mk/bsd.port.mk
> @@ -1725,7 +1725,7 @@ WRKSRC?=
> ${WRKDIR}/${GH_PROJECT_DEFAULT}-${GH_TAGNAME_EXTRACT}
> . if defined(WRKSRC)
> DEV_WARNING+= "You are using USE_GITLAB and WRKSRC is set which is
> wrong. Set GL_PROJECT, GL_ACCOUNT correctly, and/or set WRKSRC_SUBDIR and
> remove WRKSRC entirely."
> . endif
> -WRKSRC?= ${WRKDIR}/${GL_PROJECT}-${GL_COMMIT}
> +WRKSRC?= ${WRKDIR}/${GL_PROJECT}-${GL_TAGNAME}
> . endif
>
> # If the distname is not extracting into a specific subdirectory, have the
> @@ -2963,12 +2963,6 @@ DEPENDS_ARGS+= NOCLEANDEPENDS=yes
> . endif
> . endif
>
> -. if defined(USE_GITLAB) && !${USE_GITLAB:Mnodefault} &&
> empty(GL_COMMIT_DEFAULT)
> -check-makevars::
> - @${ECHO_MSG} "GL_COMMIT is a required 40 character hash for use
> USE_GITLAB"
> - @${FALSE}
> -. endif
> -
> ################################################################
> #
> # Do preliminary work to detect if we need to run the config
> diff --git a/Mk/bsd.sites.mk b/Mk/bsd.sites.mk
> index 78cb71593c4f..c6bee3798d56 100644
> --- a/Mk/bsd.sites.mk
> +++ b/Mk/bsd.sites.mk
> @@ -268,10 +268,10 @@ IGNORE?= Using master as GH_TAGNAME is invalid. \
> . if defined(GH_TUPLE)
> . for _tuple in ${GH_TUPLE}
> _t_tmp=${_tuple}
> -. if ${_t_tmp:C@^([^:]*):([^:]*):([^:]*)((:[^:/]*)?)((/.*)?)@\4@
> :S/://:C/[a-zA-Z0-9_]//g}
> +. if ${_t_tmp:C@^([^:]*):([^:]*):([^:]*)((:[^:/]*)?)((/.*)?)@\4@
> :S/://:C/[a-zA-Z0-9_.+-]//g}
> check-makevars::
> @${ECHO_MSG} "The ${_tuple} GH_TUPLE line has"
> - @${ECHO_MSG} "a tag containing something else than [a-zA-Z0-9_]"
> + @${ECHO_MSG} "a tag containing something else than [a-zA-Z0-9_.+-]"
> @${FALSE}
> . endif
> . endfor
> @@ -405,6 +405,11 @@ WWW?=
> https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/
> . endif # defined(USE_GITHUB)
> .endif # !defined(IGNORE_MASTER_SITE_GITHUB)
>
> +# Keep this before USE_GITLAB
> +.if !empty(MASTER_SITES:M*//*/*/*/-/archive/${DISTVERSIONFULL}/)
> +DEV_WARNING+= "MASTER_SITES contains
> ${MASTER_SITES:M*//*/*/*/-/archive/${DISTVERSIONFULL}/}, please use
> USE_GITLAB instead."
> +.endif
> +
> .if !defined(IGNORE_MASTER_SITE_GITLAB)
> #
> # In order to use GitLab your port must define USE_GITLAB and the
> following
> @@ -419,34 +424,40 @@ WWW?=
> https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/
> # GL_PROJECT - name of the project on GitLab
> # default: ${PORTNAME}
> #
> -# GL_COMMIT - the commit hash of the repository, must be the full
> hash and
> -# is a required variable for GitLab.
> +# GL_TAGNAME - name of the tag to download (2.0.1, hash, ...)
> +# Using the name of a branch here is incorrect. It is
> +# possible to do GL_TAGNAME= GIT_HASH to do a snapshot.
> +# default: ${DISTVERSIONFULL}
> #
> # GL_SUBDIR - directory relative to WRKSRC where to move this
> distfile's
> # content after extracting.
> #
> -# GL_TUPLE - above shortened to
> [site[:port][/webroot]:]account:project:commit:group[/subdir]
> +# GL_TUPLE - above shortened to
> [site[:port][/webroot]:]account:project:tagname:group[/subdir]
> #
> . if defined(USE_GITLAB)
> +. if !defined(GL_TAGNAME) && defined(GL_COMMIT)
> +GL_TAGNAME= ${GL_COMMIT}
> +DEV_WARNING+= "GL_COMMIT is deprecated, please use GL_TAGNAME instead"
> +. endif
> . if defined(GL_TUPLE)
> . for _tuple in ${GL_TUPLE}
> -. if ${_tuple:C@
> ^(([^:]*://[^:/]*(:[0-9]{1,5})?(/[^:]*[^/])?:)?)([^:]*):([^:]*):([^:]*)(:[^:/]*)((/.*)?)@\7@
> :S/^://:C/[a-f0-9]{40}//g}
> +. if ${_tuple:C@
> ^(([^:]*://[^:/]*(:[0-9]{1,5})?(/[^:]*[^/])?:)?)([^:]*):([^:]*):([^:]*)(:[^:/]*)((/.*)?)@\7@
> :S/^://:C/[a-zA-Z0-9_.+-]//g}
> check-makevars::
> @${ECHO_MSG} "The ${_tuple}"
> - @${ECHO_MSG} "GL_TUPLE is improperly formatted or, the commit"
> - @${ECHO_MSG} "section contains something other than [a-f0-9]"
> + @${ECHO_MSG} "GL_TUPLE is improperly formatted or, the tagname"
> + @${ECHO_MSG} "section contains something other than
> [a-zA-Z0-9_.+-]"
> @${FALSE}
> . endif
> . endfor
> GL_SITE+= ${GL_TUPLE:C@
> ^(([^:]*://[^:/]*(:[0-9]{1,5})?(/[^:]*[^/])?:)?)([^:]*):([^:]*):([^:]*)(:[^:/]*)((/.*)?)@\1\8@
> :S@::@:@}
> GL_ACCOUNT+= ${GL_TUPLE:C@
> ^(([^:]*://[^:/]*(:[0-9]{1,5})?(/[^:]*[^/])?:)?)([^:]*):([^:]*):([^:]*)(:[^:/]*)((/.*)?)@\5\8@
> }
> GL_PROJECT+= ${GL_TUPLE:C@
> ^(([^:]*://[^:/]*(:[0-9]{1,5})?(/[^:]*[^/])?:)?)([^:]*):([^:]*):([^:]*)(:[^:/]*)((/.*)?)@\6\8@
> }
> -GL_COMMIT+= ${GL_TUPLE:C@
> ^(([^:]*://[^:/]*(:[0-9]{1,5})?(/[^:]*[^/])?:)?)([^:]*):([^:]*):([^:]*)(:[^:/]*)((/.*)?)@\7\8@
> }
> +GL_TAGNAME+= ${GL_TUPLE:C@
> ^(([^:]*://[^:/]*(:[0-9]{1,5})?(/[^:]*[^/])?:)?)([^:]*):([^:]*):([^:]*)(:[^:/]*)((/.*)?)@\7\8@
> }
> GL_SUBDIR+= ${GL_TUPLE:C@
> ^(([^:]*://[^:/]*(:[0-9]{1,5})?(/[^:]*[^/])?:)?)([^:]*):([^:]*):([^:]*)(:[^:/]*)((/.*)?)@\9\8@
> :M/*:S/^\///}
> . endif
>
> . if empty(USE_GITLAB:Mnodefault)
> -MASTER_SITES+=
> ${GL_SITE}/${GL_ACCOUNT}/${GL_PROJECT}/-/archive/${GL_COMMIT}.tar.gz?dummy=/
> +MASTER_SITES+=
> ${GL_SITE}/${GL_ACCOUNT}/${GL_PROJECT}/-/archive/${GL_TAGNAME:C@
> ^[a-f0-9]{40}$@\0.tar.gz?dummy=@}/
> . endif
> GL_SITE_DEFAULT= https://gitlab.com
> GL_SITE?= ${GL_SITE_DEFAULT}
> @@ -454,8 +465,10 @@ GL_ACCOUNT_DEFAULT= ${PORTNAME}
> GL_ACCOUNT?= ${GL_ACCOUNT_DEFAULT}
> GL_PROJECT_DEFAULT= ${PORTNAME}
> GL_PROJECT?= ${GL_PROJECT_DEFAULT}
> +GL_TAGNAME_DEFAULT= ${DISTVERSIONFULL}
> +GL_TAGNAME?= ${GL_TAGNAME_DEFAULT}
> _GITLAB_GROUPS= DEFAULT
> -. for _gl_v in GL_SITE GL_ACCOUNT GL_PROJECT GL_COMMIT GL_SUBDIR
> +. for _gl_v in GL_SITE GL_ACCOUNT GL_PROJECT GL_TAGNAME GL_SUBDIR
> . for _v_ex in ${${_gl_v}}
> _GL_GROUPS= ${_v_ex:S/^${_v_ex:C@:[^/:]+$@@}//:S/^://}
> . if !empty(_GL_GROUPS)
> @@ -479,18 +492,24 @@ ${_gl_v}_DEFAULT= ${_v_ex:C@^(.*):[^/:]+$@\1@}
> GL_SITE:= ${GL_SITE_DEFAULT}
> GL_ACCOUNT:= ${GL_ACCOUNT_DEFAULT}
> GL_PROJECT:= ${GL_PROJECT_DEFAULT}
> -GL_COMMIT:= ${GL_COMMIT_DEFAULT}
> +GL_TAGNAME:= ${GL_TAGNAME_DEFAULT}
> GL_SUBDIR:= ${GL_SUBDIR_DEFAULT}
>
> _GITLAB_REV= 0
>
> -_GITLAB_EXTRACT_SUFX= .tar.gz
> +_GITLAB_EXTRACT_SUFX= .tar.gz
> +_GITLAB_TAG_EXTRACT_SUFX= .tar.bz2
>
> _GITLAB_CLONE_DIR?= ${WRKDIR}/git-clone
> _PORTS_DIRECTORIES+= ${_GITLAB_CLONE_DIR}
> . if !${USE_GITLAB:Mnodefault}
> -DISTNAME:= ${GL_ACCOUNT}-${GL_PROJECT}-${GL_COMMIT}_GL${_GITLAB_REV}
> +. if ${GL_TAGNAME:C/^[a-f0-9]{40}$//}
> +DISTNAME:= ${GL_PROJECT}-${GL_TAGNAME}
> +DISTFILES+= ${DISTNAME}${_GITLAB_TAG_EXTRACT_SUFX}
> +. else
> +DISTNAME:= ${GL_ACCOUNT}-${GL_PROJECT}-${GL_TAGNAME}_GL${_GITLAB_REV}
> DISTFILES+= ${DISTNAME}${_GITLAB_EXTRACT_SUFX}
> +. endif
> git-clone: git-clone-DEFAULT
> git-clone-DEFAULT: ${_GITLAB_CLONE_DIR}
> @git clone
> ${GL_SITE_DEFAULT}/${GL_ACCOUNT_DEFAULT}/${GL_PROJECT_DEFAULT}.git
> ${_GITLAB_CLONE_DIR}/${GL_PROJECT_DEFAULT}
> @@ -512,12 +531,18 @@ GL_SITE_${_group}= ${GL_SITE_DEFAULT}
> GL_ACCOUNT_${_group}?= ${GL_ACCOUNT_DEFAULT}
> GL_PROJECT_${_group}?= ${GL_PROJECT_DEFAULT}
>
> -_GL_TUPLE_OUT:= ${_GL_TUPLE_OUT}
> ${GL_SITE_${_group}}:${GL_ACCOUNT_${_group}}:${GL_PROJECT_${_group}}:${GL_COMMIT_${_group}}:${_group}/${GL_SUBDIR_${_group}}
> -DISTNAME_${_group}:=
> ${GL_ACCOUNT_${_group}}-${GL_PROJECT_${_group}}-${GL_COMMIT_${_group}}_GL${_GITLAB_REV}
> +_GL_TUPLE_OUT:= ${_GL_TUPLE_OUT}
> ${GL_SITE_${_group}}:${GL_ACCOUNT_${_group}}:${GL_PROJECT_${_group}}:${GL_TAGNAME_${_group}}:${_group}/${GL_SUBDIR_${_group}}
> +. if ${GL_TAGNAME_${_group}:C/^[a-f0-9]{40}$//}
> +DISTNAME_${_group}:= ${GL_PROJECT_${_group}}-${GL_TAGNAME_${_group}}
> +DISTFILE_${_group}:= ${DISTNAME_${_group}}${_GITLAB_TAG_EXTRACT_SUFX}
> +MASTER_SITES:= ${MASTER_SITES}
> ${GL_SITE_${_group}}/${GL_ACCOUNT_${_group}}/${GL_PROJECT_${_group}}/-/archive/${GL_TAGNAME_${_group}}/:${_group}
> +. else
> +DISTNAME_${_group}:=
> ${GL_ACCOUNT_${_group}}-${GL_PROJECT_${_group}}-${GL_TAGNAME_${_group}}_GL${_GITLAB_REV}
> DISTFILE_${_group}:= ${DISTNAME_${_group}}${_GITLAB_EXTRACT_SUFX}
> +MASTER_SITES:= ${MASTER_SITES}
> ${GL_SITE_${_group}}/${GL_ACCOUNT_${_group}}/${GL_PROJECT_${_group}}/-/archive/${GL_TAGNAME_${_group}}.tar.gz?dummy=/:${_group}
> +. endif
> DISTFILES:= ${DISTFILES} ${DISTFILE_${_group}}:${_group}
> -MASTER_SITES:= ${MASTER_SITES}
> ${GL_SITE_${_group}}/${GL_ACCOUNT_${_group}}/${GL_PROJECT_${_group}}/-/archive/${GL_COMMIT_${_group}}.tar.gz?dummy=/:${_group}
> -WRKSRC_${_group}:=
> ${WRKDIR}/${GL_PROJECT_${_group}}-${GL_COMMIT_${_group}}
> +WRKSRC_${_group}:=
> ${WRKDIR}/${GL_PROJECT_${_group}}-${GL_TAGNAME_${_group}}
> . if !empty(GL_SUBDIR_${_group})
> _SITES_extract:= ${_SITES_extract} 690:post-extract-gl-${_group}
> post-extract-gl-${_group}:
>
--
Nuno Teixeira
FreeBSD Committer (ports)