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

Side by Side 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/python
2 # Copyright (c) 2009 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """Script to grab a list of ebuilds which cannot be safely mirrored.
7
8 Some ebuilds do not have the proper versioning magic to be able to be safely
9 mirrored. We would like to phase them out gradually, by updating a list which
10 can be safely cached.
11 """
12
13 import os
14 import re
15 import StringIO
16 import tarfile
17 import urllib
18
19
20 def main():
21 # Get a tarball of chromiumos-overlay.
22 fh = urllib.urlopen('http://src.chromium.org/cgi-bin/gitweb.cgi?'
23 'p=chromiumos-overlay.git;a=snapshot;h=HEAD;sf=tgz')
24 tgz = fh.read()
25 fh.close()
26
27 # Prepare a set of files to clobber.
28 clobber_list = set()
29 # Prepare a set of files to exempt from clobbering.
30 exempt_list = set()
31
32 # Walk the tarball looking for SAFE_TO_CACHE lists and ebuilds containing
33 # CHROMEOS_ROOT.
34 tgzf = StringIO.StringIO(tgz)
35 tar = tarfile.open(fileobj=tgzf, mode='r')
36 for tinfoi in tar:
37 if not tinfoi.isdir():
38 original_name = tinfoi.name
39 tinfo = tinfoi
40 while tinfo.islnk() or tinfo.issym():
41 path = os.path.normpath(os.path.join(os.path.dirname(tinfo.name),
42 tinfo.linkname))
43 tinfo = tar.getmember(path)
44 if tinfo.name.endswith('.ebuild'):
45 # Load each ebuild.
46 fh = tar.extractfile(tinfo)
47 ebuild_data = fh.read()
48 fh.close()
49 # Add to the clobber list if it contains CHROMEOS_ROOT.
50 if 'CHROMEOS_ROOT' in ebuild_data:
51 filename = os.path.split(original_name)[1]
52 basename = os.path.splitext(filename)[0]
53 clobber_list.add(basename)
54 elif tinfo.name.endswith('/SAFE_TO_CACHE'):
55 fh = tar.extractfile(tinfo)
56 for line in fh:
57 if len(line) > 1 and line[0] != '#':
58 exempt_list.add(line.strip())
59 fh.close()
60 tar.close()
61 tgzf.close()
62
63 # Don't clobber ebuilds listed in SAFE_TO_CACHE.
64 clobber_list -= exempt_list
65
66 # Scan the current directory for any Packages files, modify to remove
67 # packages that shouldn't be cached.
68 for root, _, files in os.walk('.', topdown=False):
69 for name in files:
70 filename = os.path.join(root, name)
71 basename = os.path.split(filename)[1]
72 if basename == 'Packages':
73 # Filter out entries involving uncache-able ebuilds.
74 allowed = True
75 nlines = []
76 fh = open(filename, 'r')
77 for line in fh:
78 m = re.match('^CPV\: [^\n]+/([^/]+)[\n]$', line)
79 if m:
80 allowed = m.group(1) not in clobber_list
81 if allowed:
82 nlines.append(line)
83 fh.close()
84 # Write out new contents.
85 fh = open(filename, 'w')
86 for line in nlines:
87 fh.write(line)
88 fh.close()
89
90
91 if __name__ == '__main__':
92 main()
OLDNEW
« 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