From 7dfc331fc76b9d8778c5170ddbbbee3f2db5f478 Mon Sep 17 00:00:00 2001 From: Petr Menšík Date: Jul 29 2023 11:55:01 +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 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. Signed-off-by: Petr Menšík --- diff --git a/fedpkg/__init__.py b/fedpkg/__init__.py index b01ca73..60abe58 100644 --- a/fedpkg/__init__.py +++ b/fedpkg/__init__.py @@ -68,55 +68,47 @@ class Commands(pyrpkg.Commands): return FedoraLookasideCache( self.lookasidehash, self.lookaside, self.lookaside_cgi) - # 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): # 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' @@ -129,7 +121,7 @@ class Commands(pyrpkg.Commands): "--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 @@ -139,11 +131,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): + 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])): 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,