Example #1
0
 def _check_conflicts(self, coproject):
     """ Private method. """
     conflictsobjects = self._config.get_boolean('show.conflicts.objects', False)
     
     if self._config.get_boolean('show.conflicts', False) or conflictsobjects:
         result = coproject.conflicts(True, not conflictsobjects)
         ccm.log_result(result, ccm.CONFLICTS_LOG_RULES, _logger)
Example #2
0
 def _sync(self, coproject):
     """ Run the sync if the 'sync' property is defined to true in the 
         configuration
     """
     if self._config.get_boolean('sync', False):
         _logger.info("Synchronizing...")
         result = coproject.sync(True, True)
         ccm.log_result(result, ccm.SYNC_LOG_RULES, _logger)
    def test_checkout_log_result(self):
        """ Testing checkout log parsing. """
        log = """Setting path for work area of 'swservices_domain-ssdo_7132_200912_Shakira_Gwen1' to 'E:\Build_E\DaveS\Integration\_no_context_\swservices_domain'...
Saved work area options for project: 'swservices_domain-ssdo_7132_200912_Shakira_Gwen1'
Derive failed for MobileSearch-MobileSearch_4_10_09w09_S60_3_2:project:sa1mosx1#1
Warning: Project name is either invalid or does not exist: 
Warning: fa1ssdo#MobileSearch_4_10_09w09_S60_3_3 too long, use name less than 32 characters long.
Warning: Object version 'fa1ssdo#MobileSearch_4_10_09w09_S60_3_3' too long, use version less than 32 characters long.
Copy Project complete with 1 errors.
WARNING: There is no matching baseline project for 'ci-hitchcock_nga' in baseline 'tr1s60#ABS_domain_mcl92-abs.mcl.92_200907'.  This baseline might not be complete
"""
        logger = logging.getLogger('count.logger')
        logger.setLevel(logging.WARNING)
        handler = CounterHandler()
        logger.addHandler(handler)
        ccm.log_result(log, ccm.CHECKOUT_LOG_RULES, logger)
        print handler.warnings
        print handler.errors
        assert handler.warnings == 4
        assert handler.errors == 1
    def test_sync_log_result(self):
        """ Testing sync log parsing. """
        log = """Synchronization summary:
       0 Update(s) for project MinibuildDomain-wbernard7
       0 Update(s) for project helloworldapi-wbernard7
       0 Update(s) for project helloworldcons-wbernard5
       0 Conflict(s) for project MinibuildDomain-wbernard7
       1 Conflict(s) for project helloworldapi-wbernard7
       0 Conflict(s) for project helloworldcons-wbernard5
You can use Reconcile to resolve work area conflicts
Warning: Conflicts detected during synchronization. Check your logs.
"""
        logger = logging.getLogger('count.logger')
        logger.setLevel(logging.WARNING)
        handler = CounterHandler()
        logger.addHandler(handler)
        ccm.log_result(log, ccm.SYNC_LOG_RULES, logger)
        print handler.warnings
        print handler.errors
        assert handler.warnings == 0
        assert handler.errors == 2
Example #5
0
    def execute(self):
        """ Creates a checkout of the project, or updates an existing checkout if one is found.
        
        The work area is maintained as part of this.
        """
        _logger.info("=== Stage=checkout = %s" % self._config.name)
        _logger.info("++ Started at %s" % time.strftime("%H:%M:%S", time.localtime()))
        session = self.get_session()
        project = session.create(self._config.name)
        
        session.home = self._config['dir']
        
        result = self.__find_project(project)
        # for testing: result = session.create("ppd_sw-fa1f5132#wbernard2:project:sa1spp#1")
        if (result != None):
            _logger.info("Project found: '%s'" % result)

            # setting up the project
            self.__setup_project(project, result)
        else:
            _logger.info("Checking out from '%s'." % project)
            
            purpose = None
            if self._config.has_key('purpose'):
                purpose = self._config['purpose']
                _logger.info("Using purpose: '%s'" % purpose)
                
            version = None
            if self._config.has_key('version'):
                version = self._config['version']
                _logger.info("Using version: '%s'" % version)

            try:
                self.__setRole(session)
                result = project.checkout(session.create(self._config['release']), version=version, purpose=purpose)
                ccm.log_result(result, ccm.CHECKOUT_LOG_RULES, _logger)
            except ccm.CCMException, exc:
                ccm.log_result(exc.result, ccm.CHECKOUT_LOG_RULES, _logger)
                raise exc
            finally:
Example #6
0
    def execute(self):
        """ Updating the mentioned project. """

        session = self.get_session()
        ccmproject = session.create(self._config.name)
        role = session.role

        status = ccmproject['status']
        co_role = ccm.get_role_for_status(session, status)
        session.role = co_role

        if not self._config.get_boolean('use.reconfigure.template', False):
            _logger.info("Setting update properties to manual")
            ccmproject.set_update_method('manual', True)
            _logger.info("Cleaning up update properties")
            self._clean_update_properties(ccmproject)
            _logger.info("Setting update properties.")
            self._set_tasks_and_folders(ccmproject)
            _logger.info("Applying update properties.")
            ccmproject.apply_update_properties(baseline=False)
        replace_subprojects = True
        if not self._config.get_boolean('replace.subprojects', True):
            _logger.info("NOT replacing subprojects")
            replace_subprojects = False
        update_keepgoing = True
        if self._config.get_boolean('update.failonerror', False):
            _logger.info("The build will fail with update errors")
            update_keepgoing = False

        _logger.info("Updating %s..." % ccmproject.objectname)
        result = ccmproject.update(True, replace_subprojects, update_keepgoing, result=ccm.UpdateResultSimple(ccmproject.session))
        ccm.log_result(result, ccm.UPDATE_LOG_RULES, _logger)
        
        self._sync(ccmproject)
        
        self._check_conflicts(ccmproject)
        
        session.role = role
    def test_update_log_result(self):
        """ Testing update log parsing. """
        log = """Starting update process...

Updating project 'MinibuildDomain-wbernard3:project:tr1test1#1' from object version 'MinibuildDomain-wbernard3:project:tr1test1#1'...
Refreshing baseline and tasks for project grouping 'My MinibuildDomain/next Insulated Development Projects'.
Replacing tasks in folder tr1test1#2068
  Contents of folder tr1test1#2068 have not changed.
Setting path for work area of 'helloworldcons-wbernard2' to 'c:\users\ccm65\ccm_wa\tr1test1\MinibuildDomain'...
Warning: 'c:\users\ccm65\ccm_wa\tr1test1\MinibuildDomain\helloworldcons' already used as work area for project 'helloworldcons-wbernard'
Warning: Unable to update path for work area of 'helloworldcons-wbernard2'
Warning: Unable to update membership of project 'MinibuildDomain-wbernard3'
Work area delete of 'helloworldcons-wbernard2:project:tr1test1#1' failed
Warning: Unable to update membership of project MinibuildDomain-wbernard3 with MinibuildDomain-2:dir:tr1test1#1
Rebind of MinibuildDomain-1:dir:tr1test1#1 failed
Warning: Update for project 'MinibuildDomain-wbernard3:project:tr1test1#1' failed.
Warning: This work area 'c:\users\ccm65\ccm_wa\tr1sido\mrurlparserplugin\mrurlparserplugin' cannot be reused
Warning:  No candidates found for directory entry ecompluginnotifier.cpp:cppsrc:e003sa01#1.  It will be left empty!
WARNING: There is no matching baseline project for 'ci-hitchcock_nga' in baseline 'tr1s60#ABS_domain_mcl92-abs.mcl.92_200907'.  This baseline might not be complete

Update Summary
2 failures to use the selected object version
    Failed to remove selected object helloworldcons-wbernard2:project:tr1test1#1 under directory MinibuildDomain-1:dir:tr1test1#1 from project MinibuildDomain-wbernard3 : work area delete failed
    Failed to use selected object MinibuildDomain-2:dir:tr1test1#1 under directory MinibuildDomain-wbernard3:project:tr1test1#1 in project MinibuildDomain-wbernard3
Serious: 
Update failed.
"""
        logger = logging.getLogger('count.logger')
        logger.setLevel(logging.WARNING)
        handler = CounterHandler()
        logger.addHandler(handler)
        ccm.log_result(log, ccm.UPDATE_LOG_RULES, logger)
        print handler.warnings
        print handler.errors
        assert handler.warnings == 5
        assert handler.errors == 9
Example #8
0
    def __setup_project(self, project, coproject):
        """ Private method. """
        session = self.get_session()
        self.__setRole(session)
        
        newprojs = []
        if not self._config.get_boolean('use.reconfigure.template', False):
            _logger.info("Validating release")
            self.__set_release(coproject)
            _logger.info("Setting update properties to manual")
            coproject.set_update_method('manual', True)
            _logger.info("Setting the baseline to '%s'" % project)
            coproject.set_baseline(project, True)
            self.__set_subbaselines(coproject)
            _logger.info("Cleaning up update properties")
            self._clean_update_properties(coproject)
            _logger.info("Setting update properties.")
            self._set_tasks_and_folders(coproject)
            _logger.info("Applying update properties.")
            coproject.apply_update_properties(baseline=False)
        else:
            _logger.info("Validating release")
            self.__set_release(coproject)
                        
        replace_subprojects = True
        if not self._config.get_boolean('replace.subprojects', True):
            _logger.info("NOT replacing subprojects")
            replace_subprojects = False
        update_keepgoing = True
        if self._config.get_boolean('update.failonerror', False):
            _logger.info("The build will fail with update errors")
            update_keepgoing = False
        _logger.info("Updating...")
        result = coproject.update(True, replace_subprojects, update_keepgoing, result=ccm.UpdateResultSimple(coproject.session))
        
        if self._config.get_boolean('fix.missing.baselines', False) and replace_subprojects:
            newprojs = self.__fix_baseline(coproject)
            if len(newprojs) > 0:
                result = coproject.update(True, replace_subprojects, update_keepgoing, result=ccm.UpdateResultSimple(coproject.session))
                ccm.log_result(result, ccm.UPDATE_LOG_RULES, _logger)
                _logger.info("Detected additional projects into baseline - Maintaining the whole toplevel project again...")
                coproject.work_area(True, True)
            else:
                ccm.log_result(result, ccm.UPDATE_LOG_RULES, _logger)
        else:
            ccm.log_result(result, ccm.UPDATE_LOG_RULES, _logger)

        # Running sync
        self._sync(coproject)

        # Running check conflicts
        self._check_conflicts(coproject)
        
        self.__restoreRole(session)
Example #9
0
                raise exc
            finally:
                self.__restoreRole(session)
            _logger.info('Checkout complete')
            
            if result.project != None and result.project.exists():                
                _logger.info("Project checked out: '%s'" % result.project)
                
                try:
                    self.__setRole(session)
                    _logger.info("Maintaining the workarea...")
                    if self.get_threads() == 1:
                        output = result.project.work_area(True, True, True, self._config['dir'], result.project.name)
                    else:
                        output = ccm.extra.FastMaintainWorkArea(result.project, self._config['dir'], result.project.name, self.get_threads())
                    ccm.log_result(output, ccm.CHECKOUT_LOG_RULES, _logger)
                finally:
                    self.__restoreRole(session)
                self.__setup_project(project, result.project)
            else:
                raise Exception("Error checking out '%s'" % project)

        _logger.info("++ Finished at %s" % time.strftime("%H:%M:%S", time.localtime()))

    def __find_project(self, project):
        """ Private method. """
        if (os.path.exists(os.path.join(self._config['dir'], project.name, "project.version"))):
            _logger.info("Snapshot to checkout deleting '%s'." % os.path.join(self._config['dir'], project.name))
            fileutils.rmtree(os.path.join(self._config['dir'], project.name))
            return None