Module buildmanagement |
[hide private]
[frames] | no frames]

# Source Code for Module buildmanagement

      1  #============================================================================
      2  #Name        : buildmanagement.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  """ BuildManagement module """
     21
     22  import os
     23  import logging
     24  import types
     25  import string
     26
     27  import ant
     28  import ccm
     29  import configuration
     30  import nokia.nokiaccm
     31
     32
     33  # Uncomment this line to enable logging in this module, or configure logging elsewhere
     34  logging.basicConfig(level=logging.DEBUG)
     35  logger = logging.getLogger("buildmanagement")
     36
     37 -def buildmanager(synergyhost, databasepath, configfile, specname):
     38      """ Buildmanager  """
     39      logger.debug("Start buildmanger")
     40      session = None
     41      session = nokia.nokiaccm.open_session(engine=synergyhost, dbpath=databasepath)
     42      print ('session = %s', session)
     43      session.role = "build_mgr"
     44      configBuilder = configuration.NestedConfigurationBuilder(open(configfile, 'r'))
     45      configSet = configBuilder.getConfiguration()
     46      logger.debug('Getting configuration: "' + specname + '" from: "' + configfile + '"')
     47      configs = configSet.getConfigurations(specname)
     48      for config in configs:
     49          for k in sorted(config.keys()):
     50              value = config[k]
     51              if isinstance(value, types.UnicodeType):
     52                  value = value.encode('ascii', 'ignore')
     53              #logger.debug( k + ': ' + str(value))
     54          logger.debug(config['function.name'])
     55          result = eval(config['function.name'])(session, config)
     56          logger.debug("got result:" + result)
     57      logger.debug('Finished parsing configs')
     58      session.close()
     59      del(session)
     60
     61 -def add_approved_tasks(session, config):
     62      """ add approved tasks to be updated to project """
     63      logger.debug("Start adding approved tasks")
     64      #this assumes there is only one folder in the reconfigure properties:
     65      if config['project.release.folder'] == "automatic":
     66          toplevelproject = ccm.Project(session, config['project.four.part.name'])
     67          releasefolders = toplevelproject.folders
     68          releasefolder = releasefolders[0]
     69          logger.debug("Release folder found from rp is: " + releasefolder.name)
     70      else:
     71          releasefolder = ccm.Folder(session, config['project.release.folder'])
     72
     73      folderlist = force_list(config['project.approval.folders'])
     74
     75      for approvalfolderfpn in folderlist:
     76          approvalfolder = ccm.Folder(session, approvalfolderfpn)
     77          logger.debug("Copying tasks from folder " + approvalfolder.name + ", to folder " + releasefolder.name)
     78          approvalfolder.copy(releasefolder)
     79
     80      logger.debug("Finished adding approved tasks")
     81
     82 -def reconcile(session, config):
     83      """ reconcile """
     84      logger.debug("Start reconciling: " + config['project.four.part.name'])
     85      toplevelproject = ccm.Project(session, config['project.four.part.name'])
     86      toplevelproject.reconcile(updatewa=True, recurse=True, consideruncontrolled=True, missingwafile=True, report=True)
     87      logger.debug("Finished reconciling: " + config['project.four.part.name'])
     88
     89 -def set_latest_baseline(session, config):
     90      """ Setting latest baseline """
     91      logger.debug("Start updating the baseline of: " + config['project.name'])
     92      toplevelproject = ccm.Project(session, config['project.four.part.name'])
     93      latestbaseline = toplevelproject.get_latest_baseline(config['project.version.filter'], config['project.baseline.state'])
     94      logger.debug("Using: " + latestbaseline)
     95      toplevelproject.set_baseline(latestbaseline, recurse=True)
     96      logger.debug("Finished updating the baseline of: " + config['project.name'])
     97
     98 -def reconfigure(session, config):
     99      """ recongifure """
    100      logger.debug("Start reconfiguring: " + config['project.four.part.name'])
    101      toplevelproject = ccm.Project(session, config['project.four.part.name'])
    102      replacesubprojects = config.get_boolean('replace.subprojects', True)
    103      recursesubprojects = config.get_boolean('recurse.subprojects', True)
    104      updatekeepgoing = not config.get_boolean('update.failonerror', True)
    105      toplevelproject.update(recursesubprojects, replacesubprojects, updatekeepgoing)
    106      logger.debug("Finished reconfiguring: " + config['project.four.part.name'])
    107
    108 -def update_release_tags(session, config):
    109      """ update release tags """
    110      logger.debug("Start updating release tags in folder: " + config['project.release.folder'])
    111      if config['project.release.folder'] == "automatic":
    112          toplevelproject = ccm.Project(session, config['project.four.part.name'])
    113          releasefolders = toplevelproject.folders
    114          releasefolder = releasefolders[0]
    115          logger.debug("Release folder found from rp is: " + releasefolder.name)
    116      else:
    117          releasefolder = ccm.Folder(session, config['project.release.folder'])
    118      for task in releasefolder.tasks:
    119          if str(task.get_release_tag()).strip() == config['task.release.tag.from']:
    120              logger.debug("Changing release tag of %s to %s" % (task.name, config['task.release.tag.to']))
    121              task.set_release_tag(config['task.release.tag.to'])
    122      logger.debug("Finished updating release tags in folder: " + config['project.release.folder'])
    123
    124 -def create_baseline(session, config):
    125      """ Create baseline """
    126      logger.debug("Start creating the baseline(s): " + config['project.name'] + "-" + config['baseline.tag'])
    127      project = ccm.Project(session, config['project.four.part.name'])
    128      logger.debug("Project: " + project.name)
    129      project.create_baseline(config['project.name'] + "-" + config['baseline.tag'], config['project.release.tag'], config['baseline.tag'], config['baseline.purpose'], config['baseline.state'])
    130      logger.debug("Finished creating the baseline: " + config['project.name'] + "-" + config['baseline.tag'])
    131
    132 -def force_list(myobject):
    133      """ force list of objects """
    134      if isinstance(myobject, list):
    135          return myobject
    136      else:
    137          return [myobject]
    138