#35 Make forgemeta multicall-aware
Closed 9 months ago by ignatenkobrain. Opened 10 months ago by nim.

file added
+113

@@ -0,0 +1,113 @@

+ -- Convenience Lua functions that can be used within rpm macros

+ 

+ -- Set a spec variable

+ -- Echo the result if verbose

+ local function explicitset(rpmvar,value,verbose)

+   local value = value

+   if (value == nil) or (value == "") then

+     value = "%{nil}"

+   end

+   rpm.define(rpmvar .. " " .. value)

+   if verbose then

+     rpm.expand("%{echo:Setting %%{" .. rpmvar .. "} = " .. value .. "}")

+   end

+ end

+ 

+ -- Unset a spec variable if it is defined

+ -- Echo the result if verbose

+ local function explicitunset(rpmvar,verbose)

+   if (rpm.expand("%{" .. rpmvar .. "}") ~= "%{" .. rpmvar .. "}") then

+     rpm.define(rpmvar .. " %{nil}")

+     if verbose then

+       rpm.expand("%{echo:Unsetting %%{" .. rpmvar .. "}}")

+     end

+   end

+ end

+ 

+ -- Set a spec variable, if not already set

+ -- Echo the result if verbose

+ local function safeset(rpmvar,value,verbose)

+   if (rpm.expand("%{" .. rpmvar .. "}") == "%{" .. rpmvar .. "}") then

+     explicitset(rpmvar,value,verbose)

+   end

+ end

+ 

+ -- Alias a list of rpm variables to the same variables suffixed with 0 (and vice versa)

+ -- Echo the result if verbose

+ local function zalias(rpmvars,verbose)

+   for _, sfx in ipairs({{"","0"},{"0",""}}) do

+     for _, rpmvar in ipairs(rpmvars) do

+       local toalias = "%{?" .. rpmvar .. sfx[1] .. "}"

+       if (rpm.expand(toalias) ~= "") then

+         safeset(rpmvar .. sfx[2], toalias, verbose)

+       end

+     end

+   end

+ end

+ 

+ -- Echo the list of rpm variables, with suffix, if set

+ local function echovars(rpmvars, suffix)

+   for _, rpmvar in ipairs(rpmvars) do

+     rpmvar = rpmvar .. suffix

+     local header = string.sub("  " .. rpmvar .. ":                                               ",1,21)

+     rpm.expand("%{?" .. rpmvar .. ":%{echo:" .. header .. "%{?" .. rpmvar .. "}}}")

+   end

+ end

+ 

+ -- Returns an array, indexed by suffix, containing the non-empy values of

+ -- <rpmvar><suffix>, with suffix an integer string or the empty string

+ local function getsuffixed(rpmvar)

+   local suffixes = {}

+   zalias({rpmvar})

+   for suffix=0,9999 do

+     local value = rpm.expand("%{?" .. rpmvar .. suffix .. "}")

+     if (value ~= "") then

+       suffixes[tostring(suffix)] = value

+     end

+   end

+   -- rpm convention is to alias no suffix to zero suffix

+   -- only add no suffix if zero suffix is different

+   local value = rpm.expand("%{?" .. rpmvar .. "}")

+   if (value ~= "") and (value ~= suffixes["0"]) then

+      suffixes[""] = value

+   end

+   return suffixes

+ end

+ 

+ -- Returns the list of suffixes, including the empty string, for which

+ -- <rpmvar><suffix> is set to a non empty value

+ local function getsuffixes(rpmvar)

+   suffixes = {}

+   for suffix in pairs(getsuffixed(rpmvar)) do

+     table.insert(suffixes,suffix)

+   end

+   table.sort(suffixes,

+              function(a,b) return (tonumber(a) or 0) < (tonumber(b) or 0) end)

+   return suffixes

+ end

+ 

+ -- Returns the suffix for which <rpmvar><suffix> has a non-empty value that

+ -- matches best the beginning of the value string

+ local function getbestsuffix(rpmvar, value)

+   local best         = nil

+   local currentmatch = ""

+   for suffix, setvalue in pairs(getsuffixed(rpmvar)) do

+   if (string.len(setvalue) > string.len(currentmatch)) and

+      (string.find(value, "^" .. setvalue)) then

+       currentmatch = setvalue

+       best         = suffix

+     end

+   end

+   return best

+ end

+ 

+ return {

+   explicitset   = explicitset,

+   explicitunset = explicitunset,

+   safeset       = safeset,

+   zalias        = zalias,

+   echovars      = echovars,

+   getsuffixed   = getsuffixed,

+   getsuffixes   = getsuffixes,

+   getbestsuffix = getbestsuffix,

+ }

file added
+252

@@ -0,0 +1,252 @@

+ -- Lua code used by macros.forge and derivatives

+ 

+ -- Computes the suffix of a version string, removing vprefix if it matches

+ -- For example with vprefix 1.2.3: 1.2.3.rc2 → .rc2 but 1.2.30 → 1.2.30 not 0

+ local function getversionsuffix(vstring,vprefix)

+   if (string.sub(vstring, 1, #vprefix) == vprefix) and

+      (not string.match(string.sub(vstring, #vprefix + 1), "^%.?%d")) then

+     return string.sub(vstring, #vprefix + 1)

+   else

+     return vstring

+   end

+ end

+ 

+ -- Check if an identified url is sane

+ local function checkforgeurl(url, id, silent)

+   local checkedurl  = nil

+   local checkedid   = nil

+   local urlpatterns = {

+     gitlab = {

+       pattern     = 'https://[^/]+/[^/]+/[^/#?]+',

+       description = 'https://(…[-.])gitlab[-.]…/owner/repo'},

+     github = {

+       pattern     = 'https://[^/]+/[^/]+/[^/#?]+',

+       description = 'https://(…[-.])github[-.]…/owner/repo'},

+     ["code.googlesource.com"] = {

+       pattern     = 'https://code.googlesource.com/[^#?]*[^/#?]+',

+       description = 'https://code.googlesource.com/…/repo'},

+     ["bitbucket.org"] = {

+       pattern     = 'https://[^/]+/[^/]+/[^/#?]+',

+       description = 'https://bitbucket.org/owner/repo'}}

+   if (urlpatterns[id] ~= nil) then

+     checkedurl = string.match(url,urlpatterns[id]["pattern"])

+     if (checkedurl == nil) then

+       if not silent then

+         rpm.expand("%{error:" .. id .. " URLs must match " .. urlpatterns[id]["description"] .. " !}")

+       end

+     else

+       checkedid = id

+     end

+   end

+   return checkedurl, checkedid

+ end

+ 

+ -- Check if an url matches a known forge

+ local function idforge(url, silent)

+   local forgeurl = nil

+   local forge    = nil

+   if (url ~= "") then

+     forge = string.match(url, "^[^:]+://([^/]+)/")

+     if (forge == nil) then

+       if not silent then

+         rpm.expand("%{error:URLs must include a protocol such as https:// and a path starting with / !}")

+       end

+     else

+       if     (string.match(forge, "^gitlab[%.-]") or string.match(forge, "[%.-]gitlab[%.]")) then

+         forge = "gitlab"

+       elseif (string.match(forge, "^github[%.-]") or string.match(forge, "[%.-]github[%.]")) then

+         forge = "github"

+       end

+       forgeurl, forge = checkforgeurl(url, forge, silent)

+     end

+   end

+   return forgeurl, forge

+ end

+ 

+ -- The forgemeta macro main processing function

+ -- See the documentation in the macros.forge file for argument description

+ -- Also called directly by gometa

+ local function forgemeta(suffix, verbose, informative, silent)

+   local fedora = require "fedora.common"

+   local ismain = (suffix == "") or (suffix == "0")

+   if ismain then

+     fedora.zalias({"forgeurl", "forgesource", "forgesetupargs",

+                       "archivename", "archiveext", "archiveurl",

+                       "topdir", "extractdir", "repo", "owner",

+                       "scm", "tag", "commit", "shortcommit", "branch", "version",

+                       "date", "distprefix"}, verbose)

+   end

+   local variables = {

+     default = {

+       scm         = "git",

+       archiveext  = "tar.bz2",

+       repo        = '%{lua:print(string.match(rpm.expand("%{forgeurl' .. suffix .. '}"), "^[^:]+://[^/]+/[^/]+/([^/]+)"))}',

+       archivename = "%{repo"         .. suffix .. "}-%{ref"           .. suffix .. "}",

+       topdir      = "%{archivename"  .. suffix .. "}" },

+     gitlab = {

+       archiveurl  = "%{forgeurl"     .. suffix .. "}/-/archive/%{ref" .. suffix .. "}/%{archivename" .. suffix .. "}.%{archiveext" .. suffix .. "}" },

+     github = {

+       archiveext  = "tar.gz",

+       archivename = "%{repo"         .. suffix .. "}-%{fileref"       .. suffix .. "}",

+       archiveurl  = "%{forgeurl"     .. suffix .. "}/archive/%{ref"   .. suffix .. "}/%{archivename" .. suffix .. "}.%{archiveext" .. suffix .. "}" },

+     ["code.googlesource.com"] = {

+       archiveext  = "tar.gz",

+       repo        = '%{lua:print(string.match(rpm.expand("%{forgeurl' .. suffix .. '}"), "^[^:]+://.+/([^/?#]+)"))}',

+       archiveurl  = "%{forgeurl"     .. suffix .. "}/+archive/%{ref"  .. suffix .. "}.%{archiveext"  .. suffix .. "}",

+       topdir      = "" },

+     ["bitbucket.org"] = {

+       shortcommit = '%{lua:print(string.sub(rpm.expand("%{commit'     .. suffix .. '}"), 1, 12))}',

+       owner       = '%{lua:print(string.match(rpm.expand("%{forgeurl' .. suffix .. '}"), "^[^:]+://[^/]+/([^/]+)"))}',

+       archivename = "%{owner"        .. suffix .. "}-%{repo"          .. suffix .. "}-%{shortcommit" .. suffix .. "}",

+       archiveurl  = "%{forgeurl"     .. suffix .. "}/get/%{ref"       .. suffix .. "}.%{archiveext"  .. suffix .. "}" } }

+   -- Packaging a moving branch is quite a bad idea, but since at least Gitlab

+   -- will treat branches and tags the same way better support branches explicitly

+   -- than have packagers hijack %{tag} to download branch states

+   local spec = {}

+   for _, v in ipairs({'forgeurl','tag','commit','branch','version'}) do

+     spec[v] = rpm.expand("%{?" .. v .. suffix .. "}")

+   end

+   -- Compute the reference of the object to fetch

+   local isrelease = false

+   if     (spec["tag"]     ~= "") then       ref = "%{?tag"     .. suffix .. "}"

+   elseif (spec["commit"]  ~= "") then       ref = "%{?commit"  .. suffix .. "}"

+   elseif (spec["branch"]  ~= "") then       ref = "%{?branch"  .. suffix .. "}"

+   else                                      ref = "%{?version" .. suffix .. "}"

+                                       isrelease = true

+   end

+   if (rpm.expand(ref) == "") then

+     if (suffix == "") then

+       rpm.expand("%{error:You need to define Version:, %{commit} or %{tag} before the macro invocation !}")

+     else

+       rpm.expand("%{error:You need to define %{version" .. suffix .. "}, %{commit" .. suffix .. "} or %{tag" .. suffix .. "} before the macro invocation !}")

+     end

+   end

+   local    forgeurl = spec["forgeurl"]

+   -- For backwards compatibility only

+   local expliciturl = rpm.expand("%{?-u*}")

+   if   (expliciturl ~= "") then

+     rpm.expand("%{warn:-u use in %%forgemeta is deprecated, use -z instead to select a separate set of rpm variables!}")

+            forgeurl = expliciturl

+   end

+   local forge

+   forgeurl,   forge = idforge(forgeurl, silent)

+   if (forge ~= nil) then

+     fedora.explicitset("forgeurl" .. suffix, forgeurl, verbose)

+     -- Custom processing of quirky forges that can not be handled with simple variables

+     if (forge == "github") then

+       -- Workaround the way GitHub injects "v"s before some version strings (but not all!)

+       -- To package one of the minority of sane GitHub projects that do not munge their version

+       -- strings set tag to %{version} in your spec

+       local fileref = ref

+       if (ref == "%{?version"  .. suffix .. "}") then

+         ref = "v" .. ref

+       elseif (fileref ~= "%{?commit" .. suffix .. "}") and

+              string.match(rpm.expand(fileref), "^v[%d]") then

+         fileref = string.gsub(rpm.expand(fileref), "^v", "")

+       end

+       fedora.safeset("fileref" .. suffix, fileref, verbose)

+     elseif (forge == "code.googlesource.com") then

+       if (ref == "%{?version"  .. suffix .. "}") then

+         ref = "v" .. ref

+       end

+     elseif (forge == "bitbucket.org") then

+       if (spec["commit"] == "") then

+         rpm.expand("%{error:All BitBucket URLs require commit value knowledge: you need to define %{commit}!}")

+       end

+     end

+     fedora.safeset("ref" .. suffix, ref, verbose)

+     -- Mass setting of the remaining variables

+     for k,v in pairs(variables[forge]) do

+       fedora.safeset(k .. suffix, variables[forge][k], verbose)

+     end

+     for k,v in pairs(variables["default"]) do

+       if (variables[forge][k] == nil) then

+         fedora.safeset(k .. suffix, variables["default"][k], verbose)

+       end

+     end

+   end

+   -- Generic rules

+   for _, v in ipairs({'archiveurl','archivename','archiveext','topdir'}) do

+     spec[v] = rpm.expand("%{?" .. v .. suffix .. "}")

+   end

+   -- Source URL processing (computing the forgesource spec variable)

+   local forgesource = "%{archiveurl" .. suffix .. "}"

+   if (string.match(spec["archiveurl"], "/([^/]+)$") ~= spec["archivename"] .. "." .. spec["archiveext"]) then

+     forgesource     = "%{?archiveurl" .. suffix .. "}#/%{?archivename" .. suffix .. "}.%{archiveext" .. suffix .. "}"

+   end

+   fedora.safeset("forgesource" .. suffix, forgesource, verbose)

+   -- Setup processing      (computing the forgesetup and extractdir variables)

+   local forgesetupargs = "-n %{extractdir" .. suffix .. "}"

+   local extractdir     = "%{topdir"        .. suffix .. "}"

+   if (spec["topdir"] == "") then

+     forgesetupargs     = "-c " .. forgesetupargs

+     extractdir         = "%{archivename"   .. suffix .. "}"

+   end

+   if not ismain then

+     if (spec["topdir"] ~= "") then

+       forgesetupargs = "-T -D -b " .. suffix .. " " .. forgesetupargs

+     else

+       forgesetupargs = "-T -D -a " .. suffix .. " " .. forgesetupargs

+     end

+   end

+   fedora.safeset("forgesetupargs" .. suffix, forgesetupargs, verbose)

+   fedora.safeset("extractdir"     .. suffix, extractdir, verbose)

+   -- dist processing       (computing the correct prefix for snapshots)

+   local distprefix = ""

+   if not isrelease then

+     distprefix = rpm.expand(ref)

+     if     (ref == "%{?commit" .. suffix .. "}") then

+       distprefix = string.sub(distprefix, 1, 7)

+     elseif (ref ~= "%{?branch" .. suffix .. "}") then

+       distprefix = string.gsub(distprefix,      "[%p%s]+", ".")

+       local    v = string.gsub(spec["version"], "[%p%s]+", ".")

+       for _, p in ipairs({'','v','v.','version','version.'}) do

+         distprefix = getversionsuffix(distprefix, p .. v)

+       end

+       distprefix = string.gsub(distprefix, "^%.", "")

+     end

+     if (distprefix ~= "") then

+       distprefix = "%{scm"     .. suffix .. "}" .. distprefix

+       date = rpm.expand("%{?date" .. suffix .. "}")

+       if (date ~= "") then

+         distprefix = date .. distprefix

+       else

+         distprefix = "%([ -r %{_sourcedir}/%{archivename" .. suffix .. "}.%{archiveext" .. suffix .. "} ] && date +%Y%m%d -u -r %{_sourcedir}/%{archivename" .. suffix .. "}.%{archiveext" .. suffix .. "})" .. distprefix

+       end

+       distprefix = "." .. distprefix

+     end

+   end

+   if (spec["version"] ~= "") and

+      (spec["version"] ~= "0") and

+      (spec["version"] ~= rpm.expand("%{?version}")) then

+     distprefix = ".%{version" .. suffix .. "}" .. distprefix

+   end

+   if (rpm.expand(distprefix) ~= "") then

+     if not ismain then

+       distprefix = string.gsub(distprefix, "^%.", ".S")

+     end

+     fedora.safeset ("distprefix"    .. suffix, distprefix, verbose)

+   end

+   if ismain then

+     fedora.zalias({"forgeurl", "forgesource", "forgesetupargs",

+                       "archivename", "archiveext", "archiveurl",

+                       "topdir", "extractdir", "repo", "owner",

+                       "scm", "shortcommit", "distprefix"}, verbose)

+   end

+   -- Final spec variable summary if the macro was called with -i

+   if informative then

+     rpm.expand("%{echo:Packaging variables read or set by %%forgemeta}")

+     fedora.echovars({"forgeurl", "forgesource", "forgesetupargs",

+                         "archivename", "archiveext", "archiveurl",

+                         "topdir", "extractdir", "repo", "owner",

+                         "scm", "tag", "commit", "shortcommit", "branch", "version",

+                         "date", "distprefix"}, suffix)

+     fedora.echovars({"dist"},"")

+     rpm.expand("%{echo:  (snapshot date is either manually supplied or computed once %%{_sourcedir}/%%{archivename" .. suffix .. "}.%%{archiveext" .. suffix .. "} is available)}")

+   end

+ end

+ 

+ return {

+   forgemeta     = forgemeta,

+ }

+ 

file modified
+60 -238

@@ -4,12 +4,13 @@

  # The following spec variables SHOULD be set before calling the macro:

  #

  #   forgeurl  the project url on the forge, strongly recommended;

- #             alternatively, use -u <url>

  #   Version   if applicable, set it with Version: <version>

  #   tag       if applicable

  #   commit    if applicable

  #   date      if applicable (to override the mtime of the Source archive)

  #

+ #  Use -z for multiple calls to the macro

+ #

  # The macro will attempt to compute and set the following variables if they are

  # not already set by the packager:

  #

@@ -20,256 +21,77 @@

  #   archiveext     the source archive filename extensions, without leading dot

  #   archiveurl     the url that can be used to download the source archive,

  #                  without renaming

+ #   topdir         the source archive top directory (can be empty)

+ #   extractdir     the source directory created inside %{_builddir} after using

+ #                  %%forgesetup, %forgeautosetup or %{forgesetupargs}

+ #   repo           the repository name

+ #   owner          the repository owner (if used by another computed variable)

+ #   shortcommit    the commit hash clamping used by the forge, if any

  #   scm            the scm type, when packaging code snapshots: commits or tags

+ #   distprefix     the prefix that needs adding to dist to trace non-release packaging

  #

- # If the macro is unable to parse your forgeurl value set at least archivename

- # and archiveurl before calling it.

- #

- # Most of the computed variables are both overridable and optional. However,

- # the macro WILL REDEFINE %{dist} when packaging a snapshot (commit or tag).

- # The previous %{dist} value will be lost. Don’t call the macro if you don’t

- # wish %{dist} to be changed.

+ # Most of the computed variables are both overridable and optional.

  #

  # Optional parameters:

- #   -u <url>  Ignore forgeurl even if it exists and use <url> instead. Note

- #             that the macro will still end up setting <url> as the forgeurl

- #             spec variable if it manages to parse it.

+ #   -a          process all sources in one go, instead of using separate -z calls

+ #   -z <number> suffix all the read and written variable names with <number>

+ #               for example read     forgeurl<number>, version<number>…

+ #                       and generate forgesetupargs<number>, archiveurl<number>…

+ #               The macro assumes that null or nil suffix is used for the primary

+ #               package source.

  #   -s  Silently ignore problems in forgeurl, use it if it can be parsed,

  #       ignore it otherwise.

- #   -p  Restore problem handling, override -s.

  #   -v  Be verbose and print every spec variable the macro sets.

  #   -i  Print some info about the state of spec variables the macro may use or

  #       set at the end of the processing.

- %forgemeta(u:spvi) %{lua:

- local forgeurl    = rpm.expand("%{?-u*}")

- if (forgeurl == "") then

-   forgeurl        = rpm.expand("%{?forgeurl}")

- end

- local silent      = false

- local verbose     = false

- local informative = false

- if (rpm.expand("%{?-s}") ~= "") then

-   silent          = true

- end

- if (rpm.expand("%{?-p}") ~= "") then

-   silent          = false

- end

- if (rpm.expand("%{?-v}") ~= "") then

-   verbose         = true

- end

- if (rpm.expand("%{?-i}") ~= "") then

-   informative     = true

- end

- -- Packaging a moving branch is quite a bad idea, but since at least Gitlab

- -- will treat branches and tags the same way better support branches explicitly

- -- than have packagers hijack %{tag} to download branch states

- local                       tag = rpm.expand("%{?tag}")

- local                    commit = rpm.expand("%{?commit}")

- local                    branch = rpm.expand("%{?branch}")

- local                   version = rpm.expand("%{?version}")

- local                       ref = ""

- if     (tag     ~= "") then ref = "%{?tag}"

- elseif (commit  ~= "") then ref = "%{?commit}"

- elseif (branch  ~= "") then ref = "%{?branch}"

- else                        ref = "%{?version}"

- end

- if (rpm.expand(ref) == "") then

-   rpm.expand("%{error:You need to define Version:, %{commit} or %{tag} before the macro invocation !}")

- end

- -- Be explicit about the spec variables we’re setting

- local function explicitset(rpmvariable,value)

-   rpm.define(rpmvariable .. " " .. value)

-   if verbose then

-     rpm.expand("%{echo:Setting %%{" .. rpmvariable .. "} = " .. value .. "}")

-   end

- end

- -- Never ever stomp on a spec variable the packager already set

- local function safeset(rpmvariable,value)

-   if (rpm.expand("%{?" .. rpmvariable .. "}") == "") then

-     explicitset(rpmvariable,value)

-   end

- end

- -- Computes the suffix of a version string, removing vprefix if it matches

- -- For example with vprefix 1.2.3: 1.2.3.rc2 → .rc2 but 1.2.30 → 1.2.30 not 0

- local function getversionsuffix(vstring,vprefix)

-   if (string.sub(vstring, 1, #vprefix) == vprefix) and

-      (not string.match(string.sub(vstring, #vprefix + 1), "^%.?%d")) then

-     return string.sub(vstring, #vprefix + 1)

-   else

-     return vstring

-   end

- end

- -- Set spec variable values for each known software publishing service

- if (forgeurl ~= "") then

-   local forge          = string.match(forgeurl, "^[^:]+://([^/]+)/")

-   if (forge == nil) then

-     if not silent then

-       rpm.expand("%{error:URLs must include a protocol such as https:// and a path starting with / !}")

-     end

-   else

-     if (string.match(forge, "^gitlab[%.-]") or string.match(forge, "[%.-]gitlab[%.]")) then

-       forgeurl = string.match(forgeurl, "https://[^/]+/[^/]+/[^/#?]+")

-       if (forgeurl == nil) then

-         if not silent then

-           rpm.expand("%{error:Gitlab URLs must match https://(…[-.])gitlab[-.]…/owner/repo !}")

-         end

-       else

-         explicitset("forgeurl",   forgeurl)

-         safeset("archiveext",     "tar.bz2")

-         safeset("forgesetupargs", "-n %{archivename}")

-         if (ref ~= "%{?version}") then safeset("scm", "git") end

-         local repo  = string.match(forgeurl, "^[^:]+://[^/]+/[^/]+/([^/]+)")

-         safeset("archivename", repo .. "-" .. ref)

-         safeset("archiveurl",  "%{forgeurl}/-/archive/" .. ref .. "/%{archivename}.%{archiveext}")

-       end

-     end

-     if (string.match(forge, "^github[%.-]") or string.match(forge, "[%.-]github[%.]")) then

-       forgeurl = string.match(forgeurl, "https://[^/]+/[^/]+/[^/#?]+")

-       if (forgeurl == nil) then

-         if not silent then

-           rpm.expand("%{error:GitHub URLs must match https://(…[-.])github[-.]…/owner/repo !}")

-         end

-       else

-         explicitset("forgeurl",   forgeurl)

-         safeset("archiveext",     "tar.gz")

-         safeset("forgesetupargs", "-n %{archivename}")

-         -- Workaround the way GitHub injects "v"s before some version strings (but not all!)

-         -- To package one of the minority of sane GitHub projects that do not munge their version

-         -- strings set tag to %{version} in your spec

-         local fileref = ref

-         if (ref == "%{?version}") then

-           ref = "v" .. ref

-         else

-           safeset("scm", "git")

-           if (fileref ~= "%{?commit}") and string.match(rpm.expand(fileref), "^v[%d]") then

-             fileref = string.gsub(rpm.expand(fileref), "^v", "")

-           end

-         end

-         local repo = string.match(forgeurl, "^[^:]+://[^/]+/[^/]+/([^/]+)")

-         safeset("archivename", repo .. "-" .. fileref)

-         safeset("archiveurl",  "%{forgeurl}/archive/" .. ref .. "/%{archivename}.%{archiveext}")

-       end

-     end

-     if (forge == "code.googlesource.com") then

-       forgeurl = string.match(forgeurl, "https://code.googlesource.com/[^#?]*[^/#?]+")

-       if (forgeurl == nil) then

-         if not silent then

-           rpm.expand("%{error:Googlesource URLs must match https://code.googlesource.com/…/repo !}")

-         end

-       else

-         explicitset("forgeurl",   forgeurl)

-         safeset("archiveext",     "tar.gz")

-         safeset("forgesetupargs", "-c")

-         if (ref == "%{?version}") then

-           ref = "v" .. ref

-         else

-           safeset("scm", "git")

-         end

-         local repo = string.match(forgeurl, "^[^:]+://.+/([^/?#]+)")

-         safeset("archivename", repo .. "-" .. ref)

-         safeset("archiveurl",  "%{forgeurl}/+archive/" .. ref .. ".%{archiveext}")

-       end

-     end

-     if (forge == "bitbucket.org") then

-       forgeurl = string.match(forgeurl, "https://[^/]+/[^/]+/[^/#?]+")

-       if (forgeurl == nil) then

-         if not silent then

-           rpm.expand("%{error:BitBucket URLs must match https://bitbucket.org/owner/repo !}")

-         end

-       else

-         explicitset("forgeurl",   forgeurl)

-         if (commit == "") then

-           rpm.expand("%{error:All BitBucket URLs require commit value knowledge: you need to define %{commit}!}")

-         end

-         local shortcommit = string.sub(commit, 1, 12)

-         safeset("archiveext", "tar.bz2")

-         -- Default to git even though BitBucket allows choosing between several SCMs

-         -- Set scm to hg for example before calling the macro if your project does not use git

-         safeset("scm", "git")

-         local owner = string.match(forgeurl, "^[^:]+://[^/]+/([^/]+)")

-         local repo  = string.match(forgeurl, "^[^:]+://[^/]+/[^/]+/([^/]+)")

-         safeset("archivename",    owner .. "-" .. repo .. "-" .. shortcommit)

-         safeset("forgesetupargs", "-n %{archivename}")

-         if (tag ~= "") then

-           safeset("archiveurl",  "%{forgeurl}/get/%{tag}.%{archiveext}")

-         else

-           safeset("archiveurl",  "%{forgeurl}/get/%{commit}.%{archiveext}")

-         end

-       end

-     end

-     if (forge == "pagure.io") then

-       if not silent then

-         rpm.expand("%{error:https://pagure.io/pagure/issue/861 needs to be resolved before the “pagure.io”\\nsoftware publishing service can be supported.}")

-       end

-     end

-     -- Final tests to check forgeurl was successfuly parsed

-     if not silent then

-       if (rpm.expand("%{?archivename}") == "") or (rpm.expand("%{?archiveurl}") == "") then

-         rpm.expand("%{error:Automation for the “" .. forge .. "”\\nsoftware publishing service is not implemented yet.\\nPlease extend the %%forgemeta macro!}")

-       end

-     end

+ %forgemeta(az:sviu:) %{lua:

+ local      fedora = require "fedora.common"

+ local       forge = require "fedora.srpm.forge"

+ local     verbose =  rpm.expand("%{-v}") ~= ""

+ local informative =  rpm.expand("%{-i}") ~= ""

+ local      silent =  rpm.expand("%{-s}") ~= ""

+ local  processall = (rpm.expand("%{-a}") ~= "") and (rpm.expand("%{-z}") == "")

+ if processall then

+   for _,s in pairs(fedora.getsuffixes("forgeurl")) do

+     forge.forgemeta(s,verbose,informative,silent)

    end

- end

- -- Set defaults if forgeurl is missing or does not parse

- local archivename = rpm.expand("%{?archivename}")

- safeset("archiveext",       "tar.gz")

- if (archivename ~= "") then

-   safeset("forgesetupargs", "-n %{archivename}")

- end

- if (commit ~= "") or (tag ~= "") then

-   safeset("scm",            "git")

- end

- -- Source URL processing (computing the forgesource spec variable)

- local archiveurl  = rpm.expand("%{?archiveurl}")

- local archiveext  = rpm.expand("%{?archiveext}")

- if (archivename ~= "") and (archiveurl ~= "") then

-   if (string.match(archiveurl, "/([^/]+)$") == archivename .. "." .. archiveext) then

-     safeset("forgesource", "%{archiveurl}")

-   else

-     safeset("forgesource", "%{?archiveurl}#/%{?archivename}.%{archiveext}")

-   end

- end

- -- dist processing (computing the correct prefix for snapshots)

- local distprefix = rpm.expand(ref)

- if     (ref == "%{?commit}") then

-   distprefix = string.sub(distprefix, 1, 7)

- elseif (ref ~= "%{?branch}") then

-   distprefix = getversionsuffix(distprefix,        version)

-   distprefix = getversionsuffix(distprefix, "v" .. version)

-   distprefix = string.gsub(distprefix, "[.-]+", ".")

-   distprefix = string.gsub(distprefix, "^%.", "")

- end

- if (distprefix ~= "") then

-   distprefix = "%{scm}" .. distprefix

-   date = rpm.expand("%{?date}")

-   if (date ~= "") then

-     distprefix = date .. distprefix

-   else

-     distprefix = "%([ -r %{_sourcedir}/%{archivename}.%{archiveext} ] && date +%Y%m%d -u -r %{_sourcedir}/%{archivename}.%{archiveext})" .. distprefix

-   end

-   safeset ("distprefix", "." .. distprefix)

- end

- -- Final spec variable summary if the macro was called with -i

- if informative then

-   rpm.expand("%{echo:Forge-specific packaging variables}")

-   rpm.expand("%{echo:  forgeurl:        %{?forgeurl}}")

-   rpm.expand("%{echo:  forgesource:     %{?forgesource}}")

-   rpm.expand("%{echo:  forgesetupargs:  %{?forgesetupargs}}")

-   rpm.expand("%{echo:Generic packaging variables}")

-   rpm.expand("%{echo:  archivename:     %{?archivename}}")

-   rpm.expand("%{echo:  archiveext:      %{?archiveext}}")

-   rpm.expand("%{echo:  archiveurl:      %{?archiveurl}}")

-   rpm.expand("%{echo:  scm:             %{?scm}}")

-   rpm.expand("%{echo:  tag:             %{?tag}}")

-   rpm.expand("%{echo:  commit:          %{?commit}}")

-   rpm.expand("%{echo:  branch:          %{?branch}}")

-   rpm.expand("%{echo:  date:            %{?date}}")

-   rpm.expand("%{echo:  distprefix:      %{?distprefix} (snapshot date is either manually supplied or computed once %%{_sourcedir}/%%{archivename}.%%{archiveext} is available)}")

+ else

+   forge.forgemeta(rpm.expand("%{-z*}"),verbose,informative,silent)

  end

  }

  

  # Convenience macro to relay computed arguments to %setup

- %forgesetup(a:b:cDn:Tq) %setup %{?forgesetupargs} %{-a} %{-b} %{-c} %{-D} %{-n} %{-T} %{-q}

+ # Optional parameters:

+ #   -a          process all sources in one go, instead of using separate -z calls

+ #   -z <number> read %{?forgesetupargs<number>}

+ #   -v          be verbose

+ %forgesetup(az:v) %{lua:

+ local fedora = require "fedora.common"

+ if (rpm.expand("%{-z}") == "") and (rpm.expand("%{-a}") ~= "") then

+   for _,s in pairs(fedora.getsuffixes("forgesetupargs")) do

+     print(rpm.expand("%setup %{!-v:-q} %{?forgesetupargs" .. s                     .. "}\\n"))

+   end

+ else

+   print(  rpm.expand("%setup %{!-v:-q} %{?forgesetupargs" .. rpm.expand("%{-z*}") .. "}\\n"))

+ end

+ }

  

  # Convenience macro to relay computed arguments to %autosetup

- %forgeautosetup(a:b:cDn:TvNS:p:) %autosetup %{?forgesetupargs} %{-a} %{-b} %{-c} %{-D} %{-n} %{-T} %{-v} %{-N} %{-S} %{-p}

+ # Parameters relayed to %autosetup: -v -N -S -p

+ # Optional parameters:

+ #   -z <number> read %{?forgesetupargs<number>}

+ %forgeautosetup(z:vNS:p:) %{lua:

+ print(rpm.expand("%autosetup %{-v} %{-N} %{?-S} %{?-p} %{?forgesetupargs" .. rpm.expand("%{-z*}") .. "}\\n"))

+ }

+ 

+ # List files matching inclusion globs, excluding files matching exclusion blogs

+ # Parameters:

+ #  -i "<globs>" include shell globs (also takes all other macro arguments)

+ #  -x "<globs>" exclude shell globs

+ %listfiles(i:x:) %{expand:

+ while IFS= read -r -d $'\\n' finc ; do

+   printf "%s\\n" %{?-x*} \\

+     | xargs -i realpath --relative-base=. '{}' \\

+     | grep "${finc}" >/dev/null || echo "${finc}"

+ done <<< $(printf "%s\\n" %{?-i*} %* | xargs -i realpath --relative-base=. '{}' | sort -u)

+ }

file modified
+16

@@ -73,6 +73,10 @@

  # BRPs

  Source700: brp-ldconfig

  

+ # Convenience lua functions

+ Source800: common.lua

+ Source801: forge.lua

+ 

  # Documentation

  Source900: buildflags.md

  

@@ -150,6 +154,10 @@

  install -p -m 644 -t %{buildroot}%{_fileattrsdir} *.attr

  install -p -m 755 -t %{buildroot}%{_rpmconfigdir} kmod.prov

  

+ mkdir -p %{buildroot}%{_rpmluadir}/fedora/{rpm,srpm}

+ install -p -m 644 -t %{buildroot}%{_rpmluadir}/fedora common.lua

+ install -p -m 644 -t %{buildroot}%{_rpmluadir}/fedora/srpm forge.lua

+ 

  %files

  %dir %{rrcdir}

  %{rrcdir}/macros

@@ -169,6 +177,14 @@

  %{_rpmconfigdir}/macros.d/macros.forge

  %{_rpmconfigdir}/macros.d/macros.ldconfig

  %{_rpmconfigdir}/macros.d/macros.vpath

+ %dir %{_rpmluadir}/fedora

The "fedora" is a quite unfortunate directory name.

+ # files needed for rpmbuild -bs

+ %dir %{_rpmluadir}/fedora/srpm

+ # files needed for rpmbuild -ba

+ %dir %{_rpmluadir}/fedora/rpm

+ %{_rpmluadir}/fedora/*.lua

+ %{_rpmluadir}/fedora/srpm/*lua

+ 

  %doc buildflags.md

  

  %files -n kernel-rpm-macros

forge: refactor to allow multiple calls
– permit extraction of multiple archives in a single specfile
– %forgemeta, %forgesetup, %forgeautosetup: add a “-z <number>” switch to
select a specific set of rpm variables
(for example forgeurl<number> and version<number>)
– %forgemeta, %forgesetup: add a “-a” switch to process all sets in one go
(makes no sense in forgeautosetup, as you need so select specific patches)
– %forgemeta: deprecate the “-u” switch, use “-z” it’s better
(“-u” was awkward and mainly used by the %gometa macro. %gometa will now
call the lua code directly)
– %forgesetup: use “-v” for verbose processing, be quiet by default, drop “-q”
(align with %forgemeta, %forgeautosetup and %autosetup)
– %forgesetup, %forgeautosetup: only pass flags that make sense to
%setup/%autosetup; reorder to match what works in el7
– factor out complex or common lua code in separate lua modules, to allow:
– code reuse in other macros without cut and pasting
– direct lua routine invocation from other macros without going through a
rpm macro
– rpm syntax errors that point to a line in an actual lua file
— %forgemeta: refactor the logic to drop as much forge-specific code as
possible, use a single logic flow with tables of constants
– %forgemeta: export more computed info in rpm variables, such as the
%{_builddir} subdirectory an archive was extracted to (lifesaver when
processing multiple archives)
– %forgemeta: prepend secondary distprefixes with .S, to make clear they do
not apply to the main archive
– %forgemeta: add versionx to secondary distprefixes, if relevant
– %forgemeta: make tar.bz2 the default archive format

Caveats:
– forge services implement full-release downloads via tags. However the actual
syntax of such tags is not standardised. If the macro does not guess the
correct tag an upstream uses for a specific release, you will need to
set the tag value explicitly.
– GitHub lets upstreams move their projects to new URLs, keeping the old URL
active. It all works transparently except the top directory inside
generated archives always matches the new project name (even when accessed
by compatibility URLs, and even for releases that antedate the renaming).
Therefore, if macro processing of a GitHub archive suddenly fails, start by
checking if upstream didn’t rename itself.

Multicall usage example (with “-a”)
– to process a specific bloc in one of the macros use “-z <suffix>”
– suffix 0 and no suffix are synonyms
– therefore, calling the macros without “-a” or “-z” just works for the
general use case when you have a single archive to process
– caveat: forge services implement full-release

 #Gitlab: version
%global forgeurl0        https://gitlab.com/osslugaru/lugaru
Version:                 1.2

#Gitlab: tag
%global forgeurl1        https://gitlab.com/osslugaru/lugaru
%global tag1             1.1

#Gitlab: commit
%global forgeurl2        https://gitlab.com/osslugaru/lugaru
%global commit2          68488b0a11df90dca703c67e5592b93c6a269957

#Gitlab: branch
%global forgeurl3        https://gitlab.com/osslugaru/lugaru
%global branch3          v1.1

# GitHub: version
%global forgeurl4       https://github.com/google/trillian
%global version4        1.0.8

# GitHub: tag
%global forgeurl5       https://github.com/kubernetes/apiextensions-apiserver
%global version5        1.9.6
%global tag5            kubernetes-%{version5}

# Github: commit
%global forgeurl6        https://github.com/jdbranham/grafana-diagram
%global version6         1.3
%global commit6          440689793ab6da82019c5ee43b49438dfef976d5

# Github: branch
%global forgeurl7        https://github.com/rethinkdb/rethinkdb-go
%global version7         1.4.2
%global branch7          v1

# code.googlesource.com: version
%global forgeurl8        https://code.googlesource.com/gocloud
%global version8         0.20.0

# code.googlesource.com: tag
%global forgeurl9        https://code.googlesource.com/gocloud
%global tag9             v0.27.0

# code.googlesource.com: commit
%global forgeurl10      https://code.googlesource.com/google-api-go-client
%global commit10        24928b980e6919be4c72647aacd53ebcbb8c4bab
%global version10       0

# code.googlesource.com: branch
%global forgeurl11      https://code.googlesource.com/google-api-go-client
%global branch11        dartman

# bitbucket.org: version
%global forgeurl12      https://bitbucket.org/nielsenb/pdfocr
%global version12       0.3.0
%global commit12        4f5750d202d33267094621630836f1215a5efa66

# bitbucket.org: tag
%global forgeurl13      https://bitbucket.org/nielsenb/pdfocr
%global version13       0.1.4
%global tag13           v0.1.4
%global commit13        c0359843a3420769940e12019ebd68891a053bd8

# bitbucket.org: commit
%global forgeurl14      https://bitbucket.org/creachadair/shell
%global commit14        3dcd505a7ca5845388111724cc2e094581e92cc6

# bitbucket.org: branch
%global forgeurl15      https://bitbucket.org/kirbyvisp/vdjpuzzle2/
%global branch15        js-edits
%global commit15        36a3850eb4a04c05e0f7e29e7d0c196f373eb672

%forgemeta -ia

Name:           testing
Release:        1%{?dist}
Summary:        A test package

URL:            %{forgeurl}
License:        Public domain

# This useless block is due to
# https://github.com/rpm-software-management/rpm/issues/539
Source0:        %{forgesource0} 
Source1:        %{forgesource1}
Source2:        %{forgesource2}
Source3:        %{forgesource3}
Source4:        %{forgesource4}
Source5:        %{forgesource5}
Source6:        %{forgesource6}
Source7:        %{forgesource7}
Source8:        %{forgesource8}
Source9:        %{forgesource9}
Source10:       %{forgesource10}
Source11:       %{forgesource11}
Source12:       %{forgesource12}
Source13:       %{forgesource13}
Source14:       %{forgesource14}
Source15:       %{forgesource15}

%description
A test package

%prep
%forgesetup -a

%build
exit 1

%install

%files
%doc

So "backwards incompatible" could be an issue. Is it just the -u option which causes the incompatibility? Have you identified how many packages use that?

Will you backport to F28-F27? It would be really terrible if these macros were functionally different between releases, but the distrprefix stuff doesn't exist there.

Why -z? It's not particularly mnemonic of anything I can think of.

What do successive %forgeautosetup calls do with patches? Which (if any) of the three %forgeautosetup calls in that example would apply any provided patches?

It's not clear from your example if a '0' suffix is needed for the initial definition. (You use %forgeurl and %commit0.) Is that showing that the 0 is optional?

How do you want to coordinate the changes needed to %gometa?

So "backwards incompatible" could be an issue. Is it just the -u option which causes the incompatibility? Have you identified how many packages use that?

To my knowledge -u is only used by gometa (ie set by another macro never by a human, and will go away as soon as gometa is updated). It wouldn't be hard to put it back and be backwards compatible.
However I fear its presence would be very confusing to humans and they would try to use in instead of -z. I can make a separate PR that adds it in if that would make you feel better, if it happens someone is using it for lots of packages, it would just have to be pulled in during the transition period.

Will you backport to F28-F27? It would be really terrible if these macros were functionally different between releases, but the distrprefix stuff doesn't exist there.

Backporting is not terribly difficult to do, just stomp on dist explicitly at the end of the macro (that would also reintroduce the ordering problems distprefix solves, since it requires for the macro to be called before the release, otherwise strange things happen depending on when rpm evaluates things).
Again, not very difficult to add a PR that contains the backport, just don't push it to stable before this version is exercised a bit in devel.

Why -z? It's not particularly mnemonic of anything I can think of.

The flag must be available in forgemeta, gometa, setup, autosetup, goprep, go-rpm-integration as it wouldbe terrible to have a different flag in a family of macros intended to be used together, it can't be a or b since the semantics in setup are slightly different, the obvious candidates nN (for number) and i (for indice), x (as usual variable) are already taken, so I got out of ideas, z is so uncommon it's available everywhere and because it is uncommon it is easy to rememeber

(Of course the root cause is rpm's archaic flag processing that constrains us to single letter flags, someone should really deprecate it in favor of a modern implementation like lua argparse. It would only take something like an %{arg} section within function declarations, that rpm honors instead of the parenthesis content of the declaration if present. )

If you have a better idea, I'm all ears

What do successive %forgeautosetup calls do with patches? Which (if any) of the three %forgeautosetup calls in that example would apply any provided patches?

There is zero logic in %forgeautosetup to apply patches, it just relays the associated flags to autosetup, that does whatever it wants with it. The "natural" way to patch a project hosted on a forge is to fork it in another repo and just package the resulting tag/commit, so I don't use it. However the flag relaying to autosetup seemed to be ok for people that do use autosetup before.

It's not clear from your example if a '0' suffix is needed for the initial definition. (You use %forgeurl and %commit0.) Is that showing that the 0 is optional?

The macro will alias nosuffix to zerosuffix and vice versa, so 0 is mostly optional (you can break stuff by defining commit and commit0 with different values for example, but I have zero interest in supporting that use case, other parts of rpm will already break if you try this). The target usage is no suffix (one call) or zero suffix (multiple call), not no suffix ≠ zero suffix

How do you want to coordinate the changes needed to %gometa?

Unfortunately, not a lot of bright ideas here, the Red Hat people that control the associated packages are not always reactive, I can only publish both PRs and hope they are taken into account. That's why on reflexion I will also prepage the stopgap PR with -u included.

So "backwards incompatible" could be an issue. Is it just the -u option which causes the incompatibility? Have you identified how many packages use that?

To my knowledge -u is only used by gometa (ie set by another macro never by a human, and will go away as soon as gometa is updated). It wouldn't be hard to put it back and be backwards compatible.
However I fear its presence would be very confusing to humans and they would try to use in instead of -z. I can make a separate PR that adds it in if that would make you feel better, if it happens someone is using it for lots of packages, it would just have to be pulled in during the transition period.

Here we go:
https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/35

Will you backport to F28-F27? It would be really terrible if these macros were functionally different between releases, but the distprefix stuff doesn't exist there.

Backport:
https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/38

1 new commit added

  • Always echo %{dist} in information, as some releases may take several distprefixes into account
10 months ago

See also
https://github.com/gofed/go-macros/pull/58

for the corresponding changes in gometa

1 new commit added

  • Refactor for maintenability and robustness
10 months ago

6 new commits added

  • Refactor for maintenability and robustness
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

6 new commits added

  • Refactor for maintenability and robustness
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

6 new commits added

  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • add versionx to secondary distprefixes, if relevant
  • reintroduce bitbucket quirks message
  • make tar.bz2 the default archive format
  • make checking for main variable block a boolean
10 months ago

2 new commits added

  • forge: factor-out lua routines to stop duplicating them in a in several golang packaging macros
  • fix buglet in error message when no reference has been defined
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in a in several golang packaging macros
  • fix buglet in error message when no reference has been defined
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • add versionx to secondary distprefixes, if relevant
  • reintroduce bitbucket quirks message
  • make tar.bz2 the default archive format
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in a in several golang packaging macros
  • fix buglet in error message when no reference has been defined
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • add versionx to secondary distprefixes, if relevant
  • reintroduce bitbucket quirks message
  • make tar.bz2 the default archive format
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in a in several golang packaging macros
  • fix buglet in error message when no reference has been defined
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • add versionx to secondary distprefixes, if relevant
  • reintroduce bitbucket quirks message
  • make tar.bz2 the default archive format
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in a in several golang packaging macros
  • fix buglet in error message when no reference has been defined
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • add versionx to secondary distprefixes, if relevant
  • reintroduce bitbucket quirks message
  • make tar.bz2 the default archive format
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in a in several golang packaging macros
  • fix buglet in error message when no reference has been defined
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • add versionx to secondary distprefixes, if relevant
  • reintroduce bitbucket quirks message
  • make tar.bz2 the default archive format
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

1 new commit added

  • forge: add more lua routines
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in a in several golang packaging macros
  • fix buglet in error message when no reference has been defined
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • add versionx to secondary distprefixes, if relevant
  • reintroduce bitbucket quirks message
  • make tar.bz2 the default archive format
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in a in several golang packaging macros
  • fix buglet in error message when no reference has been defined
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • add versionx to secondary distprefixes, if relevant
  • reintroduce bitbucket quirks message
  • make tar.bz2 the default archive format
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • add versionx to secondary distprefixes, if relevant
  • reintroduce bitbucket quirks message
  • make tar.bz2 the default archive format
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

rebased onto 1430e20eed2213ba5c13db043880318a9e8a7b46

10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
10 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
9 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
9 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
9 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
9 months ago

14 new commits added

  • forge: factor-out lua routines to stop duplicating them in packaging macros
  • fix buglet in error message when no reference has been defined
  • reorder argument passing in forge*setup, as required by old el7 rpm versions
  • make checking for main variable block a boolean
  • Refactor for maintenability and robustness
  • add versionx to secondary distprefixes, if relevant
  • Always echo %{dist} in information, as some releases may take several distprefixes into account
  • Make forgemeta multicall-aware
  • prepend secondary distprefixes with .S, to make clear they do not apply to the main archive
  • reintroduce bitbucket quirks message
  • switch to distprefix, implement branch support, refactor the logic to be simpler to understand and maintain
  • remove explicit linebreaks, recent rpm versions insert them by default
  • make tar.bz2 the default archive format
  • simplify gitlab processing thanks to https://gitlab.com/gitlab-org/gitlab-ce/issues/38830
9 months ago

rebased onto 87aa3fc61a217ea8b3485f1a136f9c1fa0477aae

9 months ago

rebased onto a74b65cfb6d9a51a50771cd3dbf2b4ac9b535f6e

9 months ago

rebased onto 9c39f38b0e498e502b8bd9e20a4ef14b8315c4db

9 months ago

Ok this one should be cleaner and close to final mergeable state

rebased onto cb2e708e6ff83dcdd6ee12607e71b24c07985816

9 months ago

rebased onto 1383af5f82ba9ebdb63519565b3a5e8d8ea9aff6

9 months ago

rebased onto fc7d774f36013ca44608bc5131130784d4fd5e80

9 months ago

So people may have noticed a lot of the lua multiplexing code tries to solve generic rpm multiplexing problems which are not forge specific.

Therefore, I've opened
https://github.com/rpm-software-management/rpm/issues/573

to give upstream rpm a requirement basis to solve those generic problems better in the rpm core. I doubt it will be done in a month, though.

In the meanwhile, baring this perfect generic upstream solution, I need this code now in my Fedora packages (Go and fonts packages).

1 new commit added

  • use %{_rpmluadir}
9 months ago

rebased onto ed796b5

9 months ago

1 new commit added

  • swith lua subdir to fedora
9 months ago

1 new commit added

  • split lua dir, so macro writers dissociate bits that end up by default in buildroots from the others
9 months ago

1 new commit added

  • forge: fix lua import
9 months ago

Pull-Request has been closed by ignatenkobrain

9 months ago

The "fedora" is a quite unfortunate directory name.

We chose it rather deliberately.

Metadata
Flags
simple-koji-ci
success
Build completed for eb2c3efb
9 months ago
simple-koji-ci
success
Build completed for 260b57d7
9 months ago
simple-koji-ci
success
Build completed for 52cfb9cb
9 months ago
simple-koji-ci
success
Build completed for ed796b5a
9 months ago
simple-koji-ci
success
Build completed for 2b722ade
9 months ago
simple-koji-ci
success
Build completed for fc7d774f
9 months ago
simple-koji-ci
success
Build completed for 1383af5f
9 months ago
simple-koji-ci
success
Build completed for cb2e708e
9 months ago
simple-koji-ci
success
Build completed for 9c39f38b
9 months ago
simple-koji-ci
success
Build completed for a74b65cf
9 months ago
simple-koji-ci
success
Build completed for 7f160b61
9 months ago
simple-koji-ci
success
Build completed for 60981000
9 months ago
simple-koji-ci
success
Build completed for 022234c4
9 months ago
simple-koji-ci
success
Build completed for 18c419b1
9 months ago
simple-koji-ci
success
Build completed for 10d199a0
9 months ago
simple-koji-ci
success
Build completed for ada8e6c0
9 months ago
simple-koji-ci
success
Build completed for bd898a45
10 months ago
simple-koji-ci
success
Build completed for 3ff7fb31
10 months ago
simple-koji-ci
success
Build completed for 468b7252
10 months ago
simple-koji-ci
success
Build completed for 3f193aa6
10 months ago
simple-koji-ci
success
Build completed for 52665f8c
10 months ago
simple-koji-ci
success
Build completed for c1d6fadc
10 months ago
simple-koji-ci
success
Build completed for 81b9147f
10 months ago
simple-koji-ci
success
Build completed for f2998140
10 months ago
simple-koji-ci
success
Build completed for 5ac4142e
10 months ago
simple-koji-ci
success
Build completed for f67d0846
10 months ago
simple-koji-ci
success
Build completed for 3c71bfc3
10 months ago
simple-koji-ci
success
Build completed for 368ba121
10 months ago
simple-koji-ci
success
Build completed for 3ae0ef80
10 months ago
simple-koji-ci
success
Build completed for 7a30b97f
10 months ago
simple-koji-ci
success
Build completed for ea69553a
10 months ago
simple-koji-ci
success
Build completed for 7b627947
10 months ago
simple-koji-ci
success
Build completed for 925514fc
10 months ago
simple-koji-ci
success
Build completed for 5276dd1d
10 months ago
simple-koji-ci
success
Build completed for 35757cc9
10 months ago
simple-koji-ci
success
Build completed for d1115cdc
10 months ago
simple-koji-ci
success
Build completed for 0d92ee0a
10 months ago
simple-koji-ci
failure
Build failed for de72d696
10 months ago
simple-koji-ci
failure
Build failed for b9d5b67e
10 months ago
simple-koji-ci
success
Build completed for b1335a72
10 months ago
simple-koji-ci
success
Build completed for 52da05cf
10 months ago
simple-koji-ci
success
Build completed for 31c467df
10 months ago
simple-koji-ci
success
Build completed for aceee26a
10 months ago
simple-koji-ci
success
Build completed for 0998201a
10 months ago
simple-koji-ci
success
Build completed for fb1d427a
10 months ago