Home | History | Annotate | Download | only in tools
      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 import os
     14 import sys
     15 import xml.etree.ElementTree as ET
     16 
     17 def createLocalManifest(manifest_path, local_manifest_path, path_to_exclude):
     18   manifest_tree = ET.parse(manifest_path)
     19   local_manifest_root = ET.Element('manifest')
     20   for project in manifest_tree.getroot().findall('project'):
     21     project_path = project.get('path')
     22     project_name = project.get('name')
     23     exclude_project = ((project_path != None and
     24                         project_path.startswith(path_to_exclude)) or
     25                        (project_path == None and
     26                         project_name.startswith(path_to_exclude)))
     27     if not exclude_project:
     28       continue
     29     print 'Excluding project name="%s" path="%s"' % (project_name,
     30                                                      project_path)
     31     remove_project = ET.SubElement(local_manifest_root, 'remove-project')
     32     remove_project.set('name', project.get('name'))
     33 
     34   local_manifest_tree = ET.ElementTree(local_manifest_root)
     35   local_manifest_dir = os.path.dirname(local_manifest_path)
     36   if not os.path.exists(local_manifest_dir):
     37     os.makedirs(local_manifest_dir)
     38   local_manifest_tree.write(local_manifest_path,
     39                             xml_declaration=True,
     40                             encoding='UTF-8',
     41                             method='xml')
     42 
     43 def main():
     44   if len(sys.argv) < 3:
     45     print 'Too few arguments.'
     46     sys.exit(-1)
     47 
     48   android_build_top = sys.argv[1]
     49   path_to_exclude = sys.argv[2]
     50 
     51   manifest_filename = 'default.xml'
     52   if len(sys.argv) >= 4:
     53     manifest_filename = sys.argv[3]
     54 
     55   manifest_path = os.path.join(android_build_top, '.repo/manifests',
     56                                manifest_filename)
     57   local_manifest_path = os.path.join(android_build_top,
     58                                      '.repo/local_manifest.xml')
     59 
     60 
     61   print 'Path to exclude: %s' % path_to_exclude
     62   print 'Path to manifest file: %s' % manifest_path
     63   createLocalManifest(manifest_path, local_manifest_path, path_to_exclude)
     64   print 'Local manifest created in: %s' % local_manifest_path
     65 
     66 if __name__ == '__main__':
     67   main()
     68