def DoPlanish(self, download_flag=True): """ choose one version from multiple version of module Args: download_flag : whether download the code of module, if it is set True download code, and vice versa Returns: return True if planish successfully, otherwise return False """ self.logger.LevPrint('MSG', 'Analyzing dependency ...') # create dependent tree broc_loader = Syntax.BrocLoader() try: broc_loader.LoadBROC() except BaseException as err: self.logger.LevPrint('ERROR', '%s' % err) return False if len(broc_loader.LackBrocModules()) != 0: self.logger.LevPrint('ERROR', "Can't find BROC in following module(s):") for cvspath in broc_loader.LackBrocModules(): self.logger.LevPrint('ERROR', "\t%s" % cvspath) return False # check graph has circles (ret, msg) = BrocTree.BrocTree().HasCircle() if ret: self.logger.LevPrint( "ERROR", "There is a circle in dependency graph\nCircle is [%s]" % msg, False) return False nodes = Syntax.BrocLoader().AllNodes() for k, nodes in nodes.iteritems(): for node in nodes: # jump main module itself if node.module.is_main: continue if node.module.module_cvspath not in self.planished_nodes: self.planished_nodes[node.module.module_cvspath] = node else: reserved_node = self.planished_nodes[ node.module.module_cvspath] ret = self._filter_dep_nodes(reserved_node, node) if ret == 1: self.planished_nodes[node.module.module_cvspath] = node if ret == -1: self.logger.LevPrint("ERROR", "dependent conficts(%s PK %s)" % \ (reserved_node.module.origin_config, \ node.module.origin_config), False) return False self.logger.LevPrint('MSG', 'Analyzing dependency success') # dump planished dependency tree self.Dump() if download_flag: return self._download_modules() else: return True
def test_singleton(self): """ Test singleton interface """ logger = Log.Log() repo_domain = 'https://github.com' postfix = ['trunk', 'BRANCH', 'PD_BL'] root = PlanishUtil.CreateBrocModuleFromDir("..", repo_domain, postfix[1], postfix[2], logger) loader1 = Syntax.BrocLoader() loader2 = Syntax.BrocLoader() self.assertEqual(loader1.Id(), loader2.Id())
def test_load_broc(self): """ """ logger = Log.Log() repo_domain = 'https://github.com' postfix = ['trunk', 'BRANCH', 'PD_BL'] root = PlanishUtil.CreateBrocModuleFromDir("..", repo_domain, postfix[1], postfix[2], logger) node = BrocTree.BrocNode(root, None, True) Syntax.BrocLoader().SetRoot(node) Syntax.BrocLoader().LoadBROC() if Syntax.BrocLoader().LackBrocModules(): print(Syntax.BrocLoader().LackBrocModules())
def __init__(self, main_module, repo_domain, logger, postfix): """ Args: main_module : the BrocModule_pb2.Module object representing the main module repo_domain : the domain name of repository logger : the log facility object postfix : the list of postfix [postfix_branche, postfix_tag] """ Syntax.BrocLoader().SetRoot(BrocTree.BrocNode(main_module, None, True)) self.logger = logger self.planished_nodes = dict() # module cvspath --> BrocNode