Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Unified Diff: src/scripts/binhost_clobber.py

Issue 795002: Adding in script to clobber build packages that shouldn't be cached. (Closed)
Patch Set: Altering clobber script to clobber Packages files instead. Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/scripts/binhost_clobber.py
diff --git a/src/scripts/binhost_clobber.py b/src/scripts/binhost_clobber.py
new file mode 100755
index 0000000000000000000000000000000000000000..048429dd9da4b3010aaaba6a5bbbcef8e7d33039
--- /dev/null
+++ b/src/scripts/binhost_clobber.py
@@ -0,0 +1,92 @@
+#!/usr/bin/python
+# Copyright (c) 2009 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Script to grab a list of ebuilds which cannot be safely mirrored.
+
+Some ebuilds do not have the proper versioning magic to be able to be safely
+mirrored. We would like to phase them out gradually, by updating a list which
+can be safely cached.
+"""
+
+import os
+import re
+import StringIO
+import tarfile
+import urllib
+
+
+def main():
+ # Get a tarball of chromiumos-overlay.
+ fh = urllib.urlopen('http://src.chromium.org/cgi-bin/gitweb.cgi?'
+ 'p=chromiumos-overlay.git;a=snapshot;h=HEAD;sf=tgz')
+ tgz = fh.read()
+ fh.close()
+
+ # Prepare a set of files to clobber.
+ clobber_list = set()
+ # Prepare a set of files to exempt from clobbering.
+ exempt_list = set()
+
+ # Walk the tarball looking for SAFE_TO_CACHE lists and ebuilds containing
+ # CHROMEOS_ROOT.
+ tgzf = StringIO.StringIO(tgz)
+ tar = tarfile.open(fileobj=tgzf, mode='r')
+ for tinfoi in tar:
+ if not tinfoi.isdir():
+ original_name = tinfoi.name
+ tinfo = tinfoi
+ while tinfo.islnk() or tinfo.issym():
+ path = os.path.normpath(os.path.join(os.path.dirname(tinfo.name),
+ tinfo.linkname))
+ tinfo = tar.getmember(path)
+ if tinfo.name.endswith('.ebuild'):
+ # Load each ebuild.
+ fh = tar.extractfile(tinfo)
+ ebuild_data = fh.read()
+ fh.close()
+ # Add to the clobber list if it contains CHROMEOS_ROOT.
+ if 'CHROMEOS_ROOT' in ebuild_data:
+ filename = os.path.split(original_name)[1]
+ basename = os.path.splitext(filename)[0]
+ clobber_list.add(basename)
+ elif tinfo.name.endswith('/SAFE_TO_CACHE'):
+ fh = tar.extractfile(tinfo)
+ for line in fh:
+ if len(line) > 1 and line[0] != '#':
+ exempt_list.add(line.strip())
+ fh.close()
+ tar.close()
+ tgzf.close()
+
+ # Don't clobber ebuilds listed in SAFE_TO_CACHE.
+ clobber_list -= exempt_list
+
+ # Scan the current directory for any Packages files, modify to remove
+ # packages that shouldn't be cached.
+ for root, _, files in os.walk('.', topdown=False):
+ for name in files:
+ filename = os.path.join(root, name)
+ basename = os.path.split(filename)[1]
+ if basename == 'Packages':
+ # Filter out entries involving uncache-able ebuilds.
+ allowed = True
+ nlines = []
+ fh = open(filename, 'r')
+ for line in fh:
+ m = re.match('^CPV\: [^\n]+/([^/]+)[\n]$', line)
+ if m:
+ allowed = m.group(1) not in clobber_list
+ if allowed:
+ nlines.append(line)
+ fh.close()
+ # Write out new contents.
+ fh = open(filename, 'w')
+ for line in nlines:
+ fh.write(line)
+ fh.close()
+
+
+if __name__ == '__main__':
+ main()
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698