Example #1
0
    def extract(self):
        gse_obj = GoSymbolsExtractor(self.path,
                                     skip_errors=self.skip_errors,
                                     noGodeps=self.noGodeps)
        if not gse_obj.extract():
            self.err.append("Error at %s: %s" %
                            (self.path, gse_obj.getError()))
            return False

        ips = gse_obj.getSymbolsPosition()
        symbols = gse_obj.getSymbols()
        self.package_imports = gse_obj.getPackageImports()

        for pkg in ips.keys():
            pkg_name = pkg.split(":")[0]
            obj = PackageToXml(symbols[pkg], "%s" % (ips[pkg]), imports=False)
            obj.setPackageImports(self.package_imports[pkg])
            obj.generate()
            if not obj.getStatus():
                self.err.append("Error at %s due to json2xml parsing: " %
                                (pkg_name, obj.getError()))
                return False

            self.package_paths[pkg] = pkg_name
            self.packages[pkg] = obj.getPackage()

        return True
Example #2
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
Example #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)
Example #4
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)
Example #5
0
	def extract(self):
		gse_obj = GoSymbolsExtractor(self.parser_config)
		if not gse_obj.extract():
			self.err.append("Error at %s: %s" % (self.path, gse_obj.getError()))
			return False

		ips = gse_obj.getSymbolsPosition()
		symbols = gse_obj.getSymbols()
		self.package_imports = gse_obj.getPackageImports()

		for pkg in ips.keys():
			pkg_name = pkg.split(":")[0]
			obj = PackageToXml(symbols[pkg], "%s" % (ips[pkg]), imports=False)
			obj.setPackageImports(self.package_imports[pkg])
			obj.generate()
			if not obj.getStatus():
				self.err.append("Error at %s due to json2xml parsing: " % (pkg_name, obj.getError()))
				return False

			self.package_paths[pkg] = pkg_name
			self.packages[pkg] = obj.getPackage()

		return True
Example #6
0
    def compare(self, directory_old, directory_new):
        msg = []

        gse_obj1 = GoSymbolsExtractor(directory_old)
        if not gse_obj1.extract():
            self.err.append("Error at %s: %s" %
                            (directory_old, gse_obj1.getError()))
            return

        gse_obj2 = GoSymbolsExtractor(directory_new)
        if not gse_obj2.extract():
            self.err.append("Error at %s: %s" %
                            (directory_new, gse_obj2.getError()))
            return

        ip1 = gse_obj1.getSymbolsPosition()
        symbols1 = gse_obj1.getSymbols()
        ip2 = gse_obj2.getSymbolsPosition()
        symbols2 = gse_obj2.getSymbols()

        ip1_set = set(ip1.keys())
        ip2_set = set(ip2.keys())

        new_ips = list(ip2_set - ip1_set)
        rem_ips = list(ip1_set - ip2_set)
        com_ips = sorted(list(ip1_set & ip2_set))

        # list new packages
        if new_ips != []:
            msg.append("+new packages: " +
                       ", ".join(map(lambda i: i.split(":")[0], new_ips)))

        # list removed packages
        if rem_ips != []:
            msg.append("-removed packages: " +
                       ", ".join(map(lambda i: i.split(":")[0], rem_ips)))

        # compare common packages
        for pkg in com_ips:
            pkg_name = pkg.split(":")[0]
            obj1 = PackageToXml(symbols1[pkg],
                                "%s" % (ip1[pkg]),
                                imports=False)
            if not obj1.getStatus():
                self.err.append("Error at %s due to json2xml parsing: " %
                                (pkg_name, obj1.getError()))
                continue

            obj2 = PackageToXml(symbols2[pkg],
                                "%s" % (ip2[pkg]),
                                imports=False)
            if not obj2.getStatus():
                self.err.append("Error at %s due to json2xml parsing: " %
                                (pkg_name, obj2.getError()))
                continue

            comp_pkgs = ComparePackages(pkg.split(":")[0])
            comp_pkgs.comparePackages(obj1.getPackage(), obj2.getPackage())
            status = comp_pkgs.getStatus()
            if status["status"] != []:
                self.status[pkg_name] = status["status"]