def update_setup_dirname(self, dirname): """ Update %setup or %autosetup dirname argument if needed :param dirname: required dirname """ for index, line in enumerate(self.spec_content): if line.startswith('%setup') or line.startswith('%autosetup'): args = line.split() macro = args[0] # parse macro arguments, care only about -T and -n parser = argparse.ArgumentParser() parser.add_argument('-T', action='store_true') parser.add_argument('-n', default='%{name}-%{version}') namespace, unknown = parser.parse_known_args(args[1:]) if namespace.T: # -T means not to extract Source0, so this macro instance # can be ignored continue # test if modification is really necessary if dirname != rpm.expandMacro(namespace.n): new_dirname = dirname # get %{name} and %{version} macros macros = [ m for m in MacroHelper.filter(self.macros, level=-3) if m['name'] in ('name', 'version') ] # add all macros from spec file scope macros.extend(MacroHelper.filter(self.macros, level=-1)) # ensure maximal greediness macros.sort(key=lambda k: len(k['value']), reverse=True) # substitute tokens with macros for m in macros: if m['value'] and m['value'] in dirname: new_dirname = new_dirname.replace( m['value'], '%{{{}}}'.format(m['name'])) args = [macro] args.extend(unknown) args.append('-n') args.append(new_dirname) self.spec_content[index] = '#{0}'.format(line) self.spec_content.insert(index + 1, ' '.join(args)) self.save()
def set_version(self, version): """ Method to update the version in the SPEC file :param version: string with new version :return: None """ version_re = re.compile(r'^Version:\s*(.+)') for index, line in enumerate(self.spec_content): match = version_re.search(line) if match: logger.debug("Updating version in SPEC from '%s' with '%s'", self.get_version(), version) # search for used macros in spec file scope for m in MacroHelper.filter(self.macros, level=-1, used=True): if m['name'] in match.group(1): # redefine the macro, don't touch Version tag self._set_macro(m['name'], version) return self.spec_content[index] = line.replace( match.group(1), version) break # save changes to the disc self.save()
def update_setup_dirname(self, dirname): """ Update %setup or %autosetup dirname argument if needed :param dirname: required dirname """ for index, line in enumerate(self.spec_content): if line.startswith('%setup') or line.startswith('%autosetup'): args = line.split() macro = args[0] # parse macro arguments, care only about -T and -n parser = argparse.ArgumentParser() parser.add_argument('-T', action='store_true') parser.add_argument('-n', default='%{name}-%{version}') namespace, unknown = parser.parse_known_args(args[1:]) if namespace.T: # -T means not to extract Source0, so this macro instance # can be ignored continue # test if modification is really necessary if dirname != rpm.expandMacro(namespace.n): new_dirname = dirname # get %{name} and %{version} macros macros = [m for m in MacroHelper.filter(self.macros, level=-3) if m['name'] in ('name', 'version')] # add all macros from spec file scope macros.extend(MacroHelper.filter(self.macros, level=-1)) # ensure maximal greediness macros.sort(key=lambda k: len(k['value']), reverse=True) # substitute tokens with macros for m in macros: if m['value'] and m['value'] in dirname: new_dirname = new_dirname.replace(m['value'], '%{{{}}}'.format(m['name'])) args = [macro] args.extend(unknown) args.append('-n') args.append(new_dirname) self.spec_content[index] = '#{0}'.format(line) self.spec_content.insert(index + 1, ' '.join(args)) self.save()
def test_get_macros(self): rpm.addMacro('test_macro', 'test_macro value') macros = MacroHelper.dump() macros = MacroHelper.filter(macros, name='test_macro') assert len(macros) == 1 assert macros[0]['name'] == 'test_macro' assert macros[0]['value'] == 'test_macro value' assert macros[0]['level'] == -1
def test_get_macros(self): rpm.addMacro("test_macro", "test_macro value") macros = MacroHelper.dump() macros = MacroHelper.filter(macros, name="test_macro") assert len(macros) == 1 assert macros[0]["name"] == "test_macro" assert macros[0]["value"] == "test_macro value" assert macros[0]["level"] == -1
def test_get_macros(self): rpm.addMacro('test_macro', 'test_macro value') macros = MacroHelper.dump() macros = MacroHelper.filter(macros, name='test_macro') assert len(macros) == 1 assert macros[0]['name'] == 'test_macro' assert macros[0]['value'] == 'test_macro value' assert macros[0]['level'] == -1
def set_version(self, version): """ Method to update the version in the SPEC file :param version: string with new version :return: None """ version_re = re.compile('^Version:\s*(.+)') for index, line in enumerate(self.spec_content): match = version_re.search(line) if match: logger.debug("Updating version in SPEC from '%s' with '%s'", self.get_version(), version) # search for used macros in spec file scope for m in MacroHelper.filter(self.macros, level=-1, used=True): if m['name'] in match.group(1): # redefine the macro, don't touch Version tag self._set_macro(m['name'], version) return self.spec_content[index] = line.replace(match.group(1), version) break # save changes to the disc self.save()