Пример #1
0
def parseRPMSpec(fileName: Path):
    spec = parseSpec(fileName)
    pkgs = {}
    metadataFields = (
        'group',
        'license',
        'name',
        'summary',
        'url',
        'epoch',
        'release',
    )
    relationsGroups = ('obsoletes', 'requires', 'conflicts', 'provides',
                       'build_requires')

    packages = [spec] + spec.packages
    for p in packages:
        pkgRef = RPMBased.toPackageRefWithGroupResolved(p.name)
        try:
            pkgRef = pkgRef.clone(cls=VersionedPkgRef,
                                  version=AnyVer(p.version))
        except:
            pass

        p.version = None
        metadata = PackageMetadata(pkgRef)

        for rgName in relationsGroups:
            processRelationGroup(rgName, metadata.controlDict, p)
        for nm in metadataFields:
            if hasattr(p, nm):
                metadata.controlDict[nm] = getattr(p, nm)
        pkgs[metadata] = makeTearingSpec(pkgRef, p)

    return {"source": None, "pkgs": tuple(pkgs.items())}
Пример #2
0
def processRelationGroup(grpName, metadata, spec):
    src = getattr(spec, grpName)
    res = []
    for pkgDepSpc in src:
        rn = pkgDepSpc.name
        m = funcNameRx.match(rn)
        if m:
            funcN, args = m.groups()
            print(funcN, args)
            args = tuple(a.strip() for a in args.split(","))
            refs = funcsRemap[funcN](*args)
            refs = [
                nativeDistro.toPackageRefWithGroupResolved(rn) for r in refs
            ]
        else:
            refs = (RPMBased.toPackageRefWithGroupResolved(rn), )

        for ref in refs:
            if pkgDepSpc.version:
                ref = PackageRef.clone(ref,
                                       cls=VersionedPackageRef,
                                       version=AnyVer(pkgDepSpc.version))
            #print(pkgDepSpc, ref)
            res.append(ref)
    metadata[grpName] = set(res)
Пример #3
0
 def __call__(self):
     return 1, (FilesPackageMapping(
         VersionedPackageRef("sqlite3",
                             arch="amd64",
                             version=AnyVer("3.29.0")),
         [Path("/usr/bin/sqlite3")]),
                FilesPackageMapping(
                    BasePackageRef("ffsgsfsf", arch="amd64"),
                    [Path("/ffsgsfsf/ffsgsfsf/ffsgsfsf")]))
Пример #4
0
 def testEditing(self) -> None:
     a = AnyVer("0-1.2 3-F2BFA")
     b = _AnyVer(array('B', (1, 2, 3, 4)),
                 hash="F2BFA",
                 format="{0}-{1}.{2} {3}")
     for i in range(4):
         a[i] += 1
     self.assertEqual(a, b)
     self.assertEqual(str(a), str(b))
Пример #5
0
 def testRepr(self) -> None:
     self.assertEqual(
         repr(
             _AnyVer(array('H', (2019, 10, 16)),
                     hash="F2BFA",
                     format="{0}-{1}-{2}",
                     suffixFormat=" {hash}")),
         "_AnyVer(array('H', [2019, 10, 16]), 'F2BFA', format='{0}-{1}-{2}', suffixFormat=' {hash}')"
     )
     self.assertEqual(repr(AnyVer("2019-10-16 F2BFA")),
                      "AnyVer('2019-10-16 F2BFA')")
		def packagesMappingYielder(self, pkgs):
			index = {pkg['Package'].text: AnyVer(pkg['Version'].text) for pkg in readStatusFile() if 'Version' in pkg}
			
			for p in pkgs:
				nameArch = p.stem.split(":")
				if len(nameArch) != 1:
					name, arch = nameArch
				else:
					name = nameArch[0]
					arch = self.defaultArch
				
				if name in index:
					ref = interfaces.VersionedPackageRef(name, arch, version=index[name])
				else:
					ref = interfaces.BasePackageRef(name, arch)
				
				yield interfaces.FilesPackageMapping(ref, self.__class__.filesYielder(p))
Пример #7
0
    def testOperation(self):
        cacheDBPath = thisDir / "package2fileCache.sqlite"
        if cacheDBPath.exists():
            cacheDBPath.unlink()

        with File2Package(ExamplePackagePopulator(),
                          cacheDB=cacheDBPath) as f2p:
            etalonRef = VersionedPackageRef("sqlite3",
                                            arch="amd64",
                                            version=AnyVer("3.29.0"))
            self.assertEqual(f2p[Path("/usr/bin/sqlite3")], etalonRef)
            self.assertEqual(f2p[etalonRef], etalonRef)
            self.assertEqual(f2p[etalonRef.clone(cls=PackageRef)], etalonRef)
            self.assertEqual(f2p[etalonRef.clone(cls=BasePackageRef)],
                             etalonRef)
            self.assertEqual(f2p[Path("/ffsgsfsf/ffsgsfsf/ffsgsfsf")],
                             BasePackageRef("ffsgsfsf", arch="amd64"))
Пример #8
0
    def testNamedComponents(self) -> None:
        a = AnyVer("0-1.2 3-F2BFA")
        self.assertEqual(a.major, 0)
        self.assertEqual(a.minor, 1)
        self.assertEqual(a.patch, 2)
        self.assertEqual(a.tweak, 3)

        a.major = 3
        a.minor = 2
        a.patch = 1
        a.tweak = 0
        self.assertEqual(tuple(a), (3, 2, 1, 0))
Пример #9
0
	def testResolver(self):
		with File2Package("dpkg") as d:
			pr = psutil.Process()
			for m in pr.memory_maps():
				if m.path and m.path[0] == "/":
					p = Path(m.path)
					etalon = None
					try:
						res = dpkgS(p)
					except:
						continue
					res = res.rsplit(':', 1)[0].strip().split(":")
					if len(res) ==1:
						res.append(defaultArch)
					etalon = BasePackageRef(*res)
					res2 = debParse(data=str(dpkgs(etalon.name)))
					pkg = res2.packages[0]
					if "Version" in pkg:
						etalon = etalon.clone(cls=VersionedPackageRef, version=AnyVer(pkg["Version"].text))
					
					with self.subTest(etalon=etalon, path=p):
						ourP = d[p]
						self.assertEqual(ourP, etalon)
Пример #10
0
 def testHashability(self) -> None:
     for (c, (parsingDict, r)) in self.__class__.pairs.items():
         with self.subTest(c=c, r=r):
             p = AnyVer(c)
             self.assertEqual(hash(p), hash(r))
Пример #11
0
 def testLt(self):
     self.assertLess(AnyVer("2019-10-16 F2BFA"), AnyVer("2019-10-17 F2BFA"))
Пример #12
0
 def testCloning(self) -> None:
     a = AnyVer("0-1.2 3-F2BFA")
     b = AnyVer(a)
     self.assertEqual(a, b)
Пример #13
0
 def testIdentities(self) -> None:
     for (c, (parsingDict, r)) in self.__class__.pairs.items():
         with self.subTest(c=c, r=r):
             p = AnyVer(c)
             self.assertEqual(p, r)
             self.assertEqual(p.suffixFormat, r.suffixFormat)
Пример #14
0
 def testUnparseableVersion(self) -> None:
     with self.assertRaises(ValueError):
         AnyVer("fffffuuuu")
Пример #15
0
 def testTypeCheck(self) -> None:
     with self.assertRaises(ValueError):
         AnyVer(None)
Пример #16
0
 def testGt(self):
     self.assertGreater(AnyVer("2019-10-17 F2BFA"),
                        AnyVer("2019-10-16 F2BFA"))
Пример #17
0
 def testRoundTrip(self) -> None:
     for (c, (parsingDict, r)) in self.__class__.pairs.items():
         with self.subTest(c=c, r=r):
             self.assertEqual(str(AnyVer(c)), c)