Re: git: 16bde072b16d - main - bsd.sites.mk: Support tag names with USE_GITLAB

From: Nuno Teixeira <eduardo_at_freebsd.org>
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)