| OLD | NEW |
| (Empty) |
| 1 #!/usr/bin/env python | |
| 2 # Copyright (c) 2013 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 """Generate local manifest in an Android repository. | |
| 7 | |
| 8 This is used to generate a local manifest in an Android repository. The purpose | |
| 9 of the generated manifest is to remove the set of projects that exist under a | |
| 10 certain path. | |
| 11 """ | |
| 12 | |
| 13 from optparse import OptionParser | |
| 14 import os | |
| 15 import xml.etree.ElementTree as ET | |
| 16 | |
| 17 def createLocalManifest(manifest_path, local_manifest_path, path_to_exclude, | |
| 18 pinned_projects=None): | |
| 19 manifest_tree = ET.parse(manifest_path) | |
| 20 local_manifest_root = ET.Element('manifest') | |
| 21 | |
| 22 def remove_project(project): | |
| 23 remove_project = ET.SubElement(local_manifest_root, 'remove-project') | |
| 24 remove_project.set('name', project.get('name')) | |
| 25 | |
| 26 def pin_project(project, revision): | |
| 27 pin_project = ET.SubElement(local_manifest_root, 'project') | |
| 28 pin_project.set('name', project.get('name')) | |
| 29 if project.get('path') != None: | |
| 30 pin_project.set('path', project.get('path')) | |
| 31 pin_project.set('revision', revision) | |
| 32 | |
| 33 for project in manifest_tree.getroot().findall('project'): | |
| 34 project_path = project.get('path') | |
| 35 project_name = project.get('name') | |
| 36 exclude_project = ((project_path != None and | |
| 37 project_path.startswith(path_to_exclude)) or | |
| 38 (project_path == None and | |
| 39 project_name.startswith(path_to_exclude))) | |
| 40 if exclude_project: | |
| 41 print 'Excluding project name="%s" path="%s"' % (project_name, | |
| 42 project_path) | |
| 43 remove_project(project) | |
| 44 continue | |
| 45 | |
| 46 pinned_projects = pinned_projects or [] | |
| 47 for pinned in pinned_projects: | |
| 48 if pinned['path'] == project_path and pinned['name'] == project_name: | |
| 49 remove_project(project) | |
| 50 pin_project(project, pinned['revision']) | |
| 51 break | |
| 52 | |
| 53 local_manifest_tree = ET.ElementTree(local_manifest_root) | |
| 54 local_manifest_dir = os.path.dirname(local_manifest_path) | |
| 55 if not os.path.exists(local_manifest_dir): | |
| 56 os.makedirs(local_manifest_dir) | |
| 57 local_manifest_tree.write(local_manifest_path, | |
| 58 xml_declaration=True, | |
| 59 encoding='UTF-8', | |
| 60 method='xml') | |
| 61 | |
| 62 def main(): | |
| 63 usage = 'usage: %prog [options] <android_build_top> <path_to_exclude>' | |
| 64 parser = OptionParser(usage=usage) | |
| 65 parser.add_option('--ndk-revision', dest='ndk_revision', | |
| 66 help='pin the ndk project at a particular REVISION', | |
| 67 metavar='REVISION', default=None) | |
| 68 parser.add_option('--manifest_filename', dest='manifest_filename', | |
| 69 help='name of the manifest file', default='default.xml') | |
| 70 (options, args) = parser.parse_args() | |
| 71 | |
| 72 if len(args) != 2: | |
| 73 parser.error('Wrong number of arguments.') | |
| 74 | |
| 75 android_build_top = args[0] | |
| 76 path_to_exclude = args[1] | |
| 77 | |
| 78 manifest_filename = options.manifest_filename | |
| 79 | |
| 80 manifest_path = os.path.join(android_build_top, '.repo/manifests', | |
| 81 manifest_filename) | |
| 82 local_manifest_path = os.path.join(android_build_top, | |
| 83 '.repo/local_manifest.xml') | |
| 84 | |
| 85 pinned_projects = [] | |
| 86 if options.ndk_revision: | |
| 87 pinned_projects = [{ | |
| 88 'path': 'ndk', | |
| 89 'name': 'platform/ndk', | |
| 90 'revision' : options.ndk_revision, | |
| 91 },] | |
| 92 | |
| 93 print 'Path to exclude: %s' % path_to_exclude | |
| 94 print 'Path to manifest file: %s' % manifest_path | |
| 95 createLocalManifest(manifest_path, local_manifest_path, path_to_exclude, | |
| 96 pinned_projects) | |
| 97 print 'Local manifest created in: %s' % local_manifest_path | |
| 98 | |
| 99 if __name__ == '__main__': | |
| 100 main() | |
| OLD | NEW |