diff options
author | Olav Vitters <olav@vitters.nl> | 2014-07-04 14:29:59 +0200 |
---|---|---|
committer | Olav Vitters <olav@vitters.nl> | 2014-07-04 14:29:59 +0200 |
commit | 09e7468c712da9f2192ccb2790754fda9480dd14 (patch) | |
tree | 37f154c38947328c35f5bfc515a9118120fc73cc | |
parent | 0d79bfeeeea7305b666d1fb0eca69d50f7314acb (diff) | |
download | mgagnome-09e7468c712da9f2192ccb2790754fda9480dd14.tar mgagnome-09e7468c712da9f2192ccb2790754fda9480dd14.tar.gz mgagnome-09e7468c712da9f2192ccb2790754fda9480dd14.tar.bz2 mgagnome-09e7468c712da9f2192ccb2790754fda9480dd14.tar.xz mgagnome-09e7468c712da9f2192ccb2790754fda9480dd14.zip |
add infrastructure to clean things such as defattr
-rwxr-xr-x | mgagnome | 66 |
1 files changed, 51 insertions, 15 deletions
@@ -380,6 +380,27 @@ class SpecFile(object): def sources(self): return self._sources_and_patches(flag=1) + def clean_spec(self): + re_clean_spec = [ + # remove %defattr + ('remove defattr', re.compile(r'(?P<keeppre>^\%files[^\n]*\n)^\%defattr\(-, *root, *root\)\s*\n(?P<keeppost>)', re.MULTILINE + re.IGNORECASE)) + ] + + made_changes = False + with open(self.path, "rw") as f: + data = f.read() + for reason, regexp in re_clean_spec: + data, nr = regexp.subn(r'\g<keeppre>\g<keeppost>', data) + if nr: + made_changes = True + self._changes.append('SILENT %s' % reason) + + # Overwrite file with new version number + if made_changes: + write_file(self.path, data) + + return made_changes + @property def buildrequires(self): ts = rpm.ts() @@ -541,7 +562,8 @@ class SpecFile(object): sys.stdout.writelines(difflib.unified_diff(data_before.splitlines(True), data.splitlines(True), self.path, self.path)) write_file(self.path, data) - self._changes.append('SILENT clean buildrequirements') + if made_changes: + self._changes.append('SILENT clean buildrequirements') return made_changes @@ -1151,18 +1173,20 @@ def cmd_clean_spec(options, parser): made_changes=False - with open(s.path, "r") as f: - data = f.read() - - for mo in s.re_find_combined_br.finditer(data): - print "c", mo.group(0).strip(), mo.groupdict() - for match in s.re_br_part.findall(mo.group('unsplit')): - print "d", match +# with open(s.path, "r") as f: +# data = f.read() +# +# for mo in s.re_find_combined_br.finditer(data): +# print "c", mo.group(0).strip(), mo.groupdict() +# for match in s.re_br_part.findall(mo.group('unsplit')): +# print "d", match # Convert -devel requires into pkgconfig requires br = s.buildrequires br_old = [r for r in br.keys() if r.endswith('-devel')] changes = {} + no_alt = set() + no_change = {} for req in br_old: provides = Downstream.alternative_provides(req) provides_alt = [clean_pkgconfig_prov(prov) for prov in provides if prov.startswith('pkgconfig(')] @@ -1180,20 +1204,32 @@ def cmd_clean_spec(options, parser): if check in provides_alt: change_to = check break - print req, "=>", change_to, '(%s)' % ', '.join(provides_alt) - if change_to is not None: changes[req] = change_to + if len(provides_alt): + if change_to is None: no_change[req] = provides_alt + else: + no_alt.add(req) + + if change_to is not None: changes[req] = change_to + + if s.clean_spec(): made_changes=True if options.doit: if s.update_br(changes): made_changes=True - elif changes: - pprint.pprint(changes) + else: + if changes: pprint.pprint(changes) + if no_alt: print "WARNING: no alternatives found for: %s" % ", ".join(sorted(no_alt)) + if no_change: pprint.pprint(no_change) # If we made it this far, checkin the changes - if made_changes and options.doit: - subprocess.check_call(['mgarepo', 'ci', '-m', s.changes], cwd=cwd) - #s.ensure_no_local_changes() + if made_changes: + if options.doit: + subprocess.check_call(['mgarepo', 'ci', '-m', s.changes], cwd=cwd) + else: + # show the diff and undo all changes + print s.changes + s.ensure_no_local_changes(force=True) def cmd_package_new_version(options, parser): # Determine the package name |