From 65189cc60622b82ea749f499d950bc41e009e53e Mon Sep 17 00:00:00 2001 From: Petr Menšík Date: Sep 05 2023 00:31:40 +0000 Subject: Allow fetching release from branch basename In case fetching release information from the whole branch fails, retry with just part of branch name delimited by '-'. This should allow branches like rawhide-staging or f38-bz1234 to be recognized as a supported staging branches. Those are expected to be non-production, feature-only branches. It should not allow to build these branches as a production build. JIRA: RHELCMP-12565 Merges: https://pagure.io/fedpkg/pull-request/522 Signed-off-by: Petr Menšík --- diff --git a/fedpkg/__init__.py b/fedpkg/__init__.py index e307c3d..5933916 100644 --- a/fedpkg/__init__.py +++ b/fedpkg/__init__.py @@ -69,55 +69,47 @@ class Commands(pyrpkg.Commands): self.lookasidehash, self.lookaside, self.lookaside_cgi, attempts=self.lookaside_attempts, delay=self.lookaside_delay) - # Overloaded property loaders - def load_rpmdefines(self): - """Populate rpmdefines based on branch data""" - - # Determine runtime environment - self._runtime_disttag = self._determine_runtime_env() - - extra_rpmdefines = [] - + def _load_rpmdefines_branch(self, branch, extra_rpmdefines): # We only match the top level branch name exactly. # Anything else is too dangerous and --dist should be used # This regex works until after Fedora 99. - if re.match(r'f\d\d$', self.branch_merge): - self._distval = self.branch_merge.split('f')[1] + if re.match(r'f\d\d$', branch): + self._distval = branch.split('f')[1] self._distvar = 'fedora' self._disttag = 'fc%s' % self._distval self.mockconfig = 'fedora-%s-%s' % (self._distval, self.localarch) self.override = 'f%s-override' % self._distval self._distunset = 'rhel' # Works until RHEL 10 - elif re.match(r'el\d$', self.branch_merge) or \ - re.match(r'epel\d$', self.branch_merge): - self._distval = self.branch_merge.split('el')[1] + elif re.match(r'el\d$', branch) or \ + re.match(r'epel\d$', branch): + self._distval = branch.split('el')[1] self._distvar = 'rhel' self._disttag = 'el%s' % self._distval self.mockconfig = 'epel-%s-%s' % (self._distval, self.localarch) self.override = 'epel%s-override' % self._distval self._distunset = 'fedora' - elif re.match(r'epel\d+-playground$', self.branch_merge): - self._distval = re.search(r'\d+', self.branch_merge).group(0) + elif re.match(r'epel\d+-playground$', branch): + self._distval = re.search(r'\d+', branch).group(0) self._distvar = 'rhel' self._disttag = 'epel%s.playground' % self._distval self.mockconfig = 'epel-%s-%s' % (self._distval, self.localarch) self.override = 'epel%s-override' % self._distval self._distunset = 'fedora' - elif re.match(r'epel\d+-next$', self.branch_merge): - self._distval = re.search(r'\d+', self.branch_merge).group(0) + elif re.match(r'epel\d+-next$', branch): + self._distval = re.search(r'\d+', branch).group(0) self._distvar = 'rhel' self._disttag = 'el%s.next' % self._distval self.mockconfig = 'epel-next-%s-%s' % (self._distval, self.localarch) self.override = 'epel%s-next-override' % self._distval self._distunset = 'fedora' - elif re.match(r'olpc\d$', self.branch_merge): - self._distval = self.branch_merge.split('olpc')[1] + elif re.match(r'olpc\d$', branch): + self._distval = branch.split('olpc')[1] self._distvar = 'olpc' self._disttag = 'olpc%s' % self._distval self.override = 'dist-olpc%s-override' % self._distval self._distunset = 'rhel' - elif re.match(r'eln$', self.branch_merge): + elif re.match(r'eln$', branch): macros = self._get_build_macros('eln-candidate') self._distval = macros['eln'] self._distvar = 'eln' @@ -125,12 +117,12 @@ class Commands(pyrpkg.Commands): self.mockconfig = 'fedora-eln-%s' % self.localarch self.override = 'eln-override' self._distunset = 'fedora' - extra_rpmdefines = [ + extra_rpmdefines.extend([ "--define", "el%s 1" % macros['rhel'], "--define", "rhel %s" % macros['rhel'], - ] + ]) # rawhide (previously master branch) - elif re.match(r'(rawhide|main)$', self.branch_merge): + elif re.match(r'(rawhide|main)$', branch): self._distval = self._findrawhidebranch() self._distvar = 'fedora' self._disttag = 'fc%s' % self._distval @@ -140,11 +132,31 @@ class Commands(pyrpkg.Commands): # If we don't match one of the above, punt else: if self.dist: - msg = 'Invalid release \'%s\'.' % self.branch_merge + msg = 'Invalid release \'%s\'.' % branch + raise pyrpkg.rpkgError(msg) else: + return False + return True + + # Overloaded property loaders + def load_rpmdefines(self): + """Populate rpmdefines based on branch data""" + + # Determine runtime environment + self._runtime_disttag = self._determine_runtime_env() + + extra_rpmdefines = [] + + if not self._load_rpmdefines_branch(self.branch_merge, extra_rpmdefines): + base = self.branch_merge.split('-', 1) + # Allow branches like f38-staging + self.log.debug('Retrying with branch {}, feature {}' + .format(base[0], base[1])) + if not (len(base) > 1 and base[0].isalnum() and len(base[1]) > 0 and + self._load_rpmdefines_branch(base[0], extra_rpmdefines)): msg = ('Could not find release from branch name \'%s\'. ' 'Please specify with --release.' % self.branch_merge) - raise pyrpkg.rpkgError(msg) + raise pyrpkg.rpkgError(msg) self._rpmdefines = ["--define", "_sourcedir %s" % self.layout.sourcedir, "--define", "_specdir %s" % self.layout.specdir,