def _readSpecs(self, specFilesPath): for specFile in self._getListSpecFiles(specFilesPath): spec = SpecParser(specFile, self.arch) # skip the specfile if buildarch differs buildarch = spec.packages.get('default').buildarch if (buildarch != "noarch" and buildarch != self.arch): self.logger.info("skipping spec file: "+str(specFile)) continue specObj = spec.createSpecObject() name = specObj.name for specPkg in specObj.listPackages: self.mapPackageToSpec[specPkg] = name if name in self.mapSpecObjects: self.mapSpecObjects[name].append(specObj) else: self.mapSpecObjects[name]=[specObj] self.mapSpecFileNameToSpecObj[os.path.basename(specFile)]=specObj # Sort the multiversion list to make getHighestVersion happy for key, value in self.mapSpecObjects.items(): if len(value) > 1: self.mapSpecObjects[key] = sorted(value, key=lambda x : self.compareVersions(x), reverse=True)
def initialize(self): # Preparse some files # adding kernelversion rpm macro spec = SpecParser(constants.specPath + "/linux/linux.spec", constants.buildArch) defPkg = spec.packages.get('default') kernelversion = defPkg.version constants.addMacro("KERNEL_VERSION", kernelversion) # adding kernelrelease rpm macro kernelrelease = defPkg.release constants.addMacro("KERNEL_RELEASE", kernelrelease) # adding kernelsubrelease rpm macro a, b, c = kernelversion.split(".") kernelsubrelease = ('%02d%02d%03d%03d' % (int(a), int(b), int(c), int(kernelrelease.split('.')[0]))) if kernelsubrelease: kernelsubrelease = "." + kernelsubrelease constants.addMacro("kernelsubrelease", kernelsubrelease) # Full parsing self.specData[constants.buildArch] = SpecData(constants.buildArch, constants.logPath, constants.specPath) if constants.buildArch != constants.targetArch: self.specData[constants.targetArch] = SpecData(constants.targetArch, constants.logPath, constants.specPath)
def test(self): # Parse spec file self.sp_obj = SpecParser(self.spec) if not self.sp_obj.parse(): self.err = self.sp_obj.getError() return False # Parse sources file if self.sources != "": self.src_obj = Sources(self.sources) if not self.src_obj.parse(): self.err = self.src_obj.getError() return False # Inspect tarball self.prj_obj = ProjectInfo(noGodeps=self.noGodeps) # create a temp directory dir = tempfile.mkdtemp() # extract tarball to the directory so, se, rc = runCommand("tar -xf %s --directory=%s" % (self.archive, dir)) if rc != 0: self.err = se return False so, se, rc = runCommand("ls %s" % dir) if rc != 0: self.err = "Unable to archive's extracted folder" return False so = so.split('\n')[0] if not self.prj_obj.retrieve("%s/%s" % (dir, so), skip_errors=True): self.err = self.prj_obj.getError() return False shutil.rmtree(dir) tests = [] # test package name tests.append(self.testPackageName) # test commit tests.append(self.testCommit) # test import path macros tests.append(self.testImportPathMacros) # test provider, provider_tld, ... tests.append(self.testRepositoryMacros) # test source0 macro tests.append(self.testSpecFileSource) # test devel subpackage tests.append(self.testDevel) for test in tests: if not test(): self.printTResult(self.t_result) elif self.verbose: self.printTResult(self.t_result) return True
def parse(self): f = tempfile.NamedTemporaryFile(delete=True) cmd_str = "curl http://pkgs.fedoraproject.org/cgit/%s.git/plain/%s.spec > %s" runCommand(cmd_str % (self.package, self.package, f.name)) self.sp_obj = SpecParser(f.name) if not self.sp_obj.parse(): self.err = self.sp_obj.getError() f.close() return False f.close() return True
def __init__(self, specfile): self.specfile = "" self.spec = SpecParser() if Specutils._isSpecFile(specfile): self.specfile = specfile self.spec.parseSpecFile(self.specfile)
def test(self, source_code_directory = ""): # Parse spec file self.sp_obj = SpecParser(self.spec) if not self.sp_obj.parse(): self.err = self.sp_obj.getError() return False # Parse sources file if self.sources != "": self.src_obj = Sources(self.sources) if not self.src_obj.parse(): self.err = self.src_obj.getError() return False if source_code_directory == "": # create a temp directory dir = tempfile.mkdtemp() # extract tarball to the directory so, se, rc = runCommand("tar -xf %s --directory=%s" % (self.archive, dir)) if rc != 0: self.err = se return False so, se, rc = runCommand("ls %s" % dir) if rc != 0: self.err = "Unable to archive's extracted folder" return False sc_directory = "%s/%s" % (dir, so.split('\n')[0]) else: sc_directory = source_code_directory data = { "type": "user_directory", "resource": path.abspath(sc_directory), #"directories_to_skip": self.noGodeps, "ipprefix": "." } try: data = ActFactory().bake("go-code-inspection").call(data) except Exception as e: logging.error(e) exit(1) # TODO(jchaloup) catch exceptions, at least ValueError self.prj_info.construct(data[ARTEFACT_GOLANG_PROJECT_PACKAGES]) if source_code_directory == "": shutil.rmtree(dir) tests = [] # test package name tests.append(self.testPackageName) # test commit tests.append(self.testCommit) # test import path macros tests.append(self.testImportPathMacros) # test provider, provider_tld, ... tests.append(self.testRepositoryMacros) # test source0 macro tests.append(self.testSpecFileSource) # test devel subpackage tests.append(self.testDevel) for test in tests: if not test(): self.printTResult(self.t_result) elif self.verbose: self.printTResult(self.t_result) return True