| 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()
|
|
|