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

Side by Side Diff: scripts/common/archive_utils.py

Issue 2407183003: Revert of Enable saving the same file in multiple archives (Closed)
Patch Set: Created 4 years, 2 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 | scripts/common/archive_utils_unittest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Set of common operations/utilities for build archiving.""" 5 """Set of common operations/utilities for build archiving."""
6 6
7 import glob 7 import glob
8 import os 8 import os
9 import platform 9 import platform
10 import re 10 import re
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 symbol_staging_url = 'http://clients2.google.com/cr/staging_symbol' 71 symbol_staging_url = 'http://clients2.google.com/cr/staging_symbol'
72 72
73 73
74 class FilesCfgParser(object): 74 class FilesCfgParser(object):
75 """Class to process a FILES.cfg style listing of build files.""" 75 """Class to process a FILES.cfg style listing of build files."""
76 76
77 def __init__(self, files_file, buildtype, arch): 77 def __init__(self, files_file, buildtype, arch):
78 self._buildtype = buildtype 78 self._buildtype = buildtype
79 self._arch = arch 79 self._arch = arch
80 self._files_cfg = self._ParseFilesCfg(files_file) 80 self._files_cfg = self._ParseFilesCfg(files_file)
81 self._files_list = self._FilterFilesCfg() 81 self.files_dict = self._FilterFilesCfg()
82 82
83 def _SetArch(self, value): 83 def _SetArch(self, value):
84 """Set build arch and reset files_list to reflect new build criteria.""" 84 """Set build arch and reset files_dict to reflect new build criteria."""
85 self._arch = value 85 self._arch = value
86 del self._files_list[:] 86 self.files_dict.clear()
87 self._files_list.extend(self._FilterFilesCfg()) 87 self.files_dict.update(self._FilterFilesCfg())
88 88
89 arch = property(fset=_SetArch) 89 arch = property(fset=_SetArch)
90 90
91 def _SetBuildType(self, value): 91 def _SetBuildType(self, value):
92 """Set build type and reset files_list to reflect new build criteria.""" 92 """Set build type and reset files_dict to reflect new build criteria."""
93 self._buildtype = value 93 self._buildtype = value
94 del self._files_list[:] 94 self.files_dict.clear()
95 self._files_list.extend(self._FilterFilesCfg()) 95 self.files_dict.update(self._FilterFilesCfg())
96 96
97 buildtype = property(fset=_SetBuildType) 97 buildtype = property(fset=_SetBuildType)
98 98
99 def _FilterFilesCfg(self): 99 def _FilterFilesCfg(self):
100 """Return a list of file items that match the current build criteria.""" 100 """Return a dict of file items that match the current build criteria."""
101 files_list = [] 101 files_dict = {}
102 for fileobj in self._files_cfg: 102 for fileobj in self._files_cfg:
103 if self._buildtype not in fileobj['buildtype']: 103 if self._buildtype not in fileobj['buildtype']:
104 continue 104 continue
105 if not fileobj.get('arch') or self._arch in fileobj['arch']: 105 if not fileobj.get('arch') or self._arch in fileobj['arch']:
106 files_list.append(fileobj) 106 files_dict[fileobj['filename']] = fileobj
107 return files_list 107 return files_dict
108 108
109 @staticmethod 109 @staticmethod
110 def _ParseFilesCfg(files_file): 110 def _ParseFilesCfg(files_file):
111 """Return the dictionary of archive file info read from the given file.""" 111 """Return the dictionary of archive file info read from the given file."""
112 if not os.path.exists(files_file): 112 if not os.path.exists(files_file):
113 raise StagingError('Files list does not exist (%s).' % files_file) 113 raise StagingError('Files list does not exist (%s).' % files_file)
114 exec_globals = {'__builtins__': None} 114 exec_globals = {'__builtins__': None}
115 115
116 execfile(files_file, exec_globals) 116 execfile(files_file, exec_globals)
117 return exec_globals['FILES'] 117 return exec_globals['FILES']
118 118
119 @classmethod 119 @classmethod
120 def IsDirectArchive(cls, archive_list): 120 def IsDirectArchive(cls, archive_list):
121 """Determine if the given archive list should be archived as-is. 121 """Determine if the given archive list should be archived as-is.
122 122
123 An archive list (from ParseArchiveLists) is archived as-is (not added to 123 An archive list (from ParseArchiveLists) is archived as-is (not added to
124 another archive file) iff: 124 another archive file) iff:
125 - There list contains a single file, and 125 - There list contains a single file, and
126 - That file has the 'direct_archive' flag or its 'archive' name matches 126 - That file has the 'direct_archive' flag or its 'archive' name matches
127 its 'filename' (an implied 'direct_archive'). 127 its 'filename' (an implied 'direct_archive').
128 """ 128 """
129 fileobj = archive_list[0] 129 fileobj = archive_list[0]
130 return (len(archive_list) == 1 and 130 return (len(archive_list) == 1 and
131 (fileobj['filename'] == fileobj['archive'] or 131 (fileobj['filename'] == fileobj['archive'] or
132 fileobj.get('direct_archive'))) 132 fileobj.get('direct_archive')))
133 133
134 def IsOptional(self, filename): 134 def IsOptional(self, filename):
135 """Determine if the given filename is marked optional for this config.""" 135 """Determine if the given filename is marked optional for this config."""
136 found_optional = False 136 return (self.files_dict.get(filename) and self._buildtype in
137 for fileobj in self._files_list: 137 self.files_dict[filename].get('optional', []))
138 if fileobj['filename'] == filename:
139 found_optional = True
140 if self._buildtype not in fileobj['optional']:
141 return False
142 return found_optional
143 138
144 def ParseGroup(self, filegroup): 139 def ParseGroup(self, filegroup):
145 """Return the list of filenames in the given group (e.g. "symbols").""" 140 """Return the list of filenames in the given group (e.g. "symbols")."""
146 return [fileobj['filename'] for fileobj in self._files_list 141 return [fileobj['filename'] for fileobj in self.files_dict.itervalues()
147 if (fileobj.get('filegroup') and filegroup in fileobj.get('filegroup')) 142 if (fileobj.get('filegroup') and filegroup in fileobj.get('filegroup'))
148 ] 143 ]
149 144
150 def ParseArchiveLists(self): 145 def ParseArchiveLists(self):
151 """Generate a dict of all the file items in all archives.""" 146 """Generate a dict of all the file items in all archives."""
152 archive_lists = {} 147 archive_lists = {}
153 for fileobj in self._files_list: 148 for fileobj in self.files_dict.itervalues():
154 if fileobj.get('archive'): 149 if fileobj.get('archive'):
155 archive_lists.setdefault(fileobj['archive'], []).append(fileobj) 150 archive_lists.setdefault(fileobj['archive'], []).append(fileobj)
156 return archive_lists 151 return archive_lists
157 152
158 def ParseLegacyList(self): 153 def ParseLegacyList(self):
159 """Return the list of 'default' filenames. 154 """Return the list of 'default' filenames.
160 155
161 Default files are either tagged as "default" filegroup or they have no 156 Default files are either tagged as "default" filegroup or they have no
162 filegroup (i.e. legacy entries from before the filegroup field was added.) 157 filegroup (i.e. legacy entries from before the filegroup field was added.)
163 """ 158 """
164 files_list = [ 159 files_list = [
165 fileobj['filename'] for fileobj in self._files_list 160 fileobj['filename'] for fileobj in self.files_dict.itervalues()
166 if (not fileobj.get('archive') and 161 if (not fileobj.get('archive') and
167 (not fileobj.get('filegroup') or 'default' in 162 (not fileobj.get('filegroup') or 'default' in
168 fileobj.get('filegroup'))) 163 fileobj.get('filegroup')))
169 ] 164 ]
170 return files_list 165 return files_list
171 166
172 167
173 def ParseFilesList(files_file, buildtype, arch): 168 def ParseFilesList(files_file, buildtype, arch):
174 """DEPRECATED: Determine the list of archive files for a given release. 169 """DEPRECATED: Determine the list of archive files for a given release.
175 170
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 raise_error=not allow_missing) 320 raise_error=not allow_missing)
326 if not os.path.exists(zip_file): 321 if not os.path.exists(zip_file):
327 raise StagingError('Failed to make zip package %s' % zip_file) 322 raise StagingError('Failed to make zip package %s' % zip_file)
328 323
329 if os.path.basename(zip_file) != archive_name: 324 if os.path.basename(zip_file) != archive_name:
330 orig_zip = zip_file 325 orig_zip = zip_file
331 zip_file = os.path.join(os.path.dirname(orig_zip), archive_name) 326 zip_file = os.path.join(os.path.dirname(orig_zip), archive_name)
332 print 'Renaming archive: "%s" -> "%s"' % (orig_zip, zip_file) 327 print 'Renaming archive: "%s" -> "%s"' % (orig_zip, zip_file)
333 chromium_utils.MoveFile(orig_zip, zip_file) 328 chromium_utils.MoveFile(orig_zip, zip_file)
334 return (zip_dir, zip_file) 329 return (zip_dir, zip_file)
OLDNEW
« no previous file with comments | « no previous file | scripts/common/archive_utils_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698