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
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
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)
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)
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
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"]