Package vbaconf :: Module new_delivery |
[hide private]
[frames] | no frames]

# Source Code for Module vbaconf.new_delivery

      1  #============================================================================
      2  #Name        : new_delivery.py
      3  #Part of     : Helium
      4
      5  #Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
      6  #All rights reserved.
      7  #This component and the accompanying materials are made available
      8  #under the terms of the License "Eclipse Public License v1.0"
      9  #which accompanies this distribution, and is available
     10  #at the URL "http://www.eclipse.org/legal/epl-v10.html".
     11  #
     12  #Initial Contributors:
     13  #Nokia Corporation - initial contribution.
     14  #
     15  #Contributors:
     16  #
     17  #Description:
     18  #===============================================================================
     19
     20  """ Helper to convert delivery.xml and prep.xml to VirtualBuildArea
     21      configuration file.
     22  """
     23  from  xml.dom.minidom import getDOMImplementation
     24  import amara
     25  import ccm
     26  import re
     27  import os.path
     28  import sys
     29  import configuration
     30
     31 -def cleanup_path(path):
     32      """ Returns path without any sequence of '/' and replacing '\' by '/' """
     33      return re.sub(r'/+', '/', re.sub(r'\\', '/', path))
     34
     35 -class config_wrapper:
     36      """ wrapper object to access directly conf property. """
     37 -    def __init__(self, config):
     38          self.project = config.name
     39          self.dir = config['dir']
     40
     41 -def generate_config(deliveryinput, prepinput):
     42      """ deliveryinput: path to delivery conf file (old format).
     43          prepinput: path to the prep conf file.
     44          Return XML Document object.
     45      """
     46      impl = getDOMImplementation()
     47      doc = getDOMImplementation().createDocument(None, "virtualBuildArea", None)
     48      vba = doc.getElementsByTagName("virtualBuildArea")[0]
     49
     50      # Loading delivery content
     51      configBuilder = configuration.NestedConfigurationBuilder(open(deliveryinput, 'r'))
     52      deliveryConfigs = configBuilder.getConfiguration().getConfigurations()
     53
     54      # loading prep file
     55      prep = amara.parse(open(prepinput, 'r'))
     56      # analysing preparation creation
     57      for source in prep.xml_xpath('/prepSpec/source'):
     58          basedir = cleanup_path(source.basedir)
     59          for copy in source.xml_xpath('./copy'):
     60              src = cleanup_path(copy.name)
     61              for config in deliveryConfigs:
     62                  p = config_wrapper(config)
     63                  ccmp = ccm.FourPartName(p.project)
     64                  p_dir = cleanup_path(p.dir)
     65                  #print "ccmp: %s" % ccmp
     66                  #print "pdir: %s" % p_dir
     67                  # looking for project_name/project_name pattern, and if dest doesn't exist
     68                  if (re.match(r"%s/%s" % (ccmp.name, ccmp.name), src, re.I) is not None) and not hasattr(copy, 'dest'):
     69                      print "All object from root."
     70                      add = doc.createElementNS("", "add")
     71                      add.setAttributeNS("", "project", str(ccmp))
     72                      vba.appendChild(add)
     73                      objs = doc.createElementNS("", "objects")
     74                      objs.setAttributeNS("", "from", ccmp.name)
     75                      add.appendChild(objs)
     76                  # looking for project_name/project_name pattern, and if dest exists
     77                  elif (re.match(r"%s/%s" % (ccmp.name, ccmp.name), src, re.I) is not None) and hasattr(copy, 'dest'):
     78                      if os.path.basename(copy.dest).lower() == ccmp.name.lower():
     79                          add = doc.createElementNS("", "add")
     80                          add.setAttributeNS("", "project", str(ccmp))
     81                          add.setAttributeNS("", "to", cleanup_path('/' + os.path.dirname(copy.dest)))
     82                          vba.appendChild(add)
     83                      else:
     84                          add = doc.createElementNS("", "add")
     85                          add.setAttributeNS("", "project", str(ccmp))
     86                          add.setAttributeNS("", "to", cleanup_path('/' + copy.dest))
     87                          vba.appendChild(add)
     88                  # for directory copy
     89                  elif cleanup_path(basedir + "/" + src) == p_dir:
     90                      print "Adding to subdirectory"
     91                      print ccmp.name, basedir + "/" + src, p_dir
     92                      add = doc.createElementNS("", "add")
     93                      add.setAttributeNS("", "project", str(ccmp))
     94                      if hasattr(copy, 'dest'):
     95                          add.setAttributeNS("", "to", cleanup_path('/' + copy.dest + '/' + ccmp.name))
     96                      else:
     97                          add.setAttributeNS("", "to", cleanup_path('/'+ ccmp.name))
     98                      vba.appendChild(add)
     99                  elif p_dir.startswith(cleanup_path(basedir + "/" + src + '/')):
    100                      print "Adding to subdirectory"
    101                      delta = p_dir[len(cleanup_path(basedir)):]
    102                      add = doc.createElementNS("", "add")
    103                      add.setAttributeNS("", "project", str(ccmp))
    104                      if hasattr(copy, 'dest'):
    105                          add.setAttributeNS("", "to", cleanup_path('/' + os.path.dirname(copy.dest) + '/' + delta + '/' + ccmp.name))
    106                      else:
    107                          add.setAttributeNS("", "to", cleanup_path(delta + '/' + ccmp.name))
    108                      vba.appendChild(add)
    109      return doc
    110