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)
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
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:
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
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)
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