Пример #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
Пример #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 = ""

        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)
Пример #3
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"]