summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlav Vitters <olav@vitters.nl>2014-07-04 14:29:59 +0200
committerOlav Vitters <olav@vitters.nl>2014-07-04 14:29:59 +0200
commit09e7468c712da9f2192ccb2790754fda9480dd14 (patch)
tree37f154c38947328c35f5bfc515a9118120fc73cc
parent0d79bfeeeea7305b666d1fb0eca69d50f7314acb (diff)
downloadmgagnome-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-xmgagnome66
1 files changed, 51 insertions, 15 deletions
diff --git a/mgagnome b/mgagnome
index 2492f91..411b1ee 100755
--- a/mgagnome
+++ b/mgagnome
@@ -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