Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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
Example #4
0
	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
Example #5
0
 def __init__(self, specfile):
     self.specfile = ""
     self.spec = SpecParser()
     if Specutils._isSpecFile(specfile):
         self.specfile = specfile
         self.spec.parseSpecFile(self.specfile)
Example #6
0
	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