Пример #1
0
    def getDirectDependencies(self):

        gse_obj = GoSymbolsExtractor(self.parser_config)
        if not gse_obj.extract():
            self.err.append(gse_obj.getError())
            return False

        package_imports_occurence = gse_obj.getPackageImportsOccurences()

        ip_used = gse_obj.getImportedPackages()
        ipd = ImportPathsDecomposer(ip_used)
        if not ipd.decompose():
            self.err.append(ipd.getError())
            return False

        self.warn.append(ipd.getWarning())

        classes = ipd.getClasses()
        sorted_classes = sorted(classes.keys())

        for element in sorted_classes:
            if element == "Native":
                continue

                # class name starts with prefix => filter out
            if element.startswith(self.import_path_prefix):
                continue

            element_info = self.processElement(element)
            if element_info == {}:
                continue

            if self.verbose:
                sys.stderr.write(element + " (" + str(self.detectProjectSubpackages(element, classes[element])) + ")\n")

            for ip in classes[element]:
                info = copy.deepcopy(element_info)
                info["ImportPath"] = str(ip)
                info["ImportPathPrefix"] = element
                self.detected_commits[ip] = info
                if self.verbose:
                    sys.stderr.write("%s\n" % str(info))

        for pkg in gse_obj.getSymbols().keys():
            ip, _ = pkg.split(":")
            if ip == ".":
                ip = self.import_path_prefix
            else:
                ip = "%s/%s" % (self.import_path_prefix, ip)
            self.defined_packages[ip] = {}

        return True
Пример #2
0
	def __init__(self, url, go_dir, nvr = ""):
		"""
		url	prefix used for import paths
		go_dir	root directory containing go source codes
		"""
		self.err = ""

		parser_config = ParserConfig()
		parser_config.setParsePath(go_dir)
		gse_obj = GoSymbolsExtractor(parser_config)
		if not gse_obj.extract():
			self.err = gse_obj.getError()
			return

		self.ip = gse_obj.getSymbolsPosition()
		symbols = gse_obj.getSymbols()
		self.ip_used = gse_obj.getImportedPackages()

		self.root = etree.Element("project")
		self.root.set("ipprefix", url)
		self.root.set("commit", "commit")
		self.root.set("nvr", nvr)

		packages_node = etree.Element("packages")
		for prefix in self.ip:
			full_import_path = "%s/%s" % (url, self.ip[prefix])
			if url == "":
				full_import_path = self.ip[prefix]

			obj = PackageToXml(symbols[prefix], full_import_path, imports=False)
			obj.generate()
			if not obj.getStatus():
				self.err = obj.getError()
				return

			packages_node.append(obj.getPackage())

		self.root.append(packages_node)

		# add imports
		imports_node = etree.Element("imports")
		for path in self.ip_used:
			node = etree.Element("import")
			node.set("path", path)
			imports_node.append(node)

		self.root.append(imports_node)
Пример #3
0
    def __init__(self, url, go_dir, nvr=""):
        """
		url	prefix used for import paths
		go_dir	root directory containing go source codes
		"""
        self.err = ""

        gse_obj = GoSymbolsExtractor(go_dir)
        if not gse_obj.extract():
            self.err = gse_obj.getError()
            return

        self.ip = gse_obj.getSymbolsPosition()
        symbols = gse_obj.getSymbols()
        self.ip_used = gse_obj.getImportedPackages()

        self.root = etree.Element("project")
        self.root.set("ipprefix", url)
        self.root.set("commit", "commit")
        self.root.set("nvr", nvr)

        packages_node = etree.Element("packages")
        for prefix in self.ip:
            full_import_path = "%s/%s" % (url, self.ip[prefix])
            if url == "":
                full_import_path = self.ip[prefix]

            obj = PackageToXml(symbols[prefix],
                               full_import_path,
                               imports=False)
            obj.generate()
            if not obj.getStatus():
                self.err = obj.getError()
                return

            packages_node.append(obj.getPackage())

        self.root.append(packages_node)

        # add imports
        imports_node = etree.Element("imports")
        for path in self.ip_used:
            node = etree.Element("import")
            node.set("path", path)
            imports_node.append(node)

        self.root.append(imports_node)