326d5ca8 |
# pylint: disable=invalid-name,missing-docstring |
2820c61a |
import os |
87815216 |
from SpecParser import SpecParser
from StringUtils import StringUtils |
2820c61a |
class Specutils(object): |
5062126c |
|
87815216 |
def __init__(self, specfile):
self.specfile = "" |
2820c61a |
self.spec = SpecParser() |
326d5ca8 |
if Specutils._isSpecFile(specfile): |
87815216 |
self.specfile = specfile |
2820c61a |
self.spec.parseSpecFile(self.specfile) |
5062126c |
|
326d5ca8 |
@staticmethod
def _isSpecFile(specfile): |
87815216 |
if os.path.isfile(specfile) and specfile.endswith(".spec"): |
2820c61a |
return True
return False |
5062126c |
|
2820c61a |
def getSourceNames(self): |
87815216 |
sourceNames = [] |
2820c61a |
strUtils = StringUtils()
pkg = self.spec.packages.get('default')
if pkg is None:
return None
for source in pkg.sources: |
87815216 |
sourceName = strUtils.getFileNameFromURL(source) |
2820c61a |
sourceNames.append(sourceName)
return sourceNames |
5062126c |
|
3cc43c92 |
def getChecksums(self):
pkg = self.spec.packages.get('default')
return pkg.checksums |
7253ce7d |
|
2820c61a |
def getPatchNames(self): |
87815216 |
patchNames = [] |
2820c61a |
strUtils = StringUtils()
pkg = self.spec.packages.get('default')
if pkg is None:
return None
for patch in pkg.patches: |
87815216 |
patchName = strUtils.getFileNameFromURL(patch) |
2820c61a |
patchNames.append(patchName)
return patchNames |
5062126c |
|
2820c61a |
def getPackageNames(self): |
87815216 |
packageNames = []
for pkg in self.spec.packages.values(): |
2820c61a |
packageNames.append(pkg.name)
return packageNames |
5062126c |
|
87815216 |
def getIsRPMPackage(self, pkgName):
defaultPkgName = self.spec.packages['default'].name |
adf248d5 |
if pkgName == defaultPkgName:
pkgName = "default"
if pkgName in self.spec.packages.keys():
pkg = self.spec.packages.get(pkgName)
if pkg.filesMacro is not None:
return True
return False
|
2820c61a |
def getRPMNames(self): |
87815216 |
rpmNames = []
for pkg in self.spec.packages.values():
rpmName = pkg.name + "-" + pkg.version + "-" + pkg.release |
2820c61a |
rpmNames.append(rpmName)
return rpmNames
|
5062126c |
def getLicense(self):
pkg = self.spec.packages.get('default')
if pkg is None:
return None
return pkg.license |
2820c61a |
|
5062126c |
def getURL(self):
pkg = self.spec.packages.get('default')
if pkg is None:
return None
return pkg.URL
def getSourceURL(self):
pkg = self.spec.packages.get('default')
if pkg is None:
return None |
326d5ca8 |
if not pkg.sources: |
5062126c |
return None
sourceURL = pkg.sources[0]
if sourceURL.startswith("http") or sourceURL.startswith("ftp"):
return sourceURL
return None |
920a9773 |
|
2820c61a |
def getRequiresAllPackages(self): |
87815216 |
dependentPackages = []
for pkg in self.spec.packages.values(): |
2820c61a |
for dpkg in pkg.requires: |
e45f5730 |
dependentPackages.append(dpkg)
listDependentPackages = list(set(dependentPackages)) |
87815216 |
packageNames = self.getPackageNames() |
2820c61a |
for pkgName in packageNames: |
e45f5730 |
for objName in listDependentPackages: |
4a93976f |
if objName.package == pkgName: |
e45f5730 |
dependentPackages.remove(objName)
dependentPackages = list(set(dependentPackages))
return dependentPackages |
5062126c |
|
2820c61a |
def getBuildRequiresAllPackages(self): |
87815216 |
dependentPackages = []
for pkg in self.spec.packages.values(): |
2820c61a |
for dpkg in pkg.buildrequires: |
e45f5730 |
dependentPackages.append(dpkg)
listDependentPackages = list(set(dependentPackages)) |
87815216 |
packageNames = self.getPackageNames() |
2820c61a |
for pkgName in packageNames: |
e45f5730 |
for objName in listDependentPackages: |
4a93976f |
if objName.package == pkgName: |
e45f5730 |
dependentPackages.remove(objName)
dependentPackages = list(set(dependentPackages))
return dependentPackages |
5062126c |
|
5f40784b |
def getCheckBuildRequiresAllPackages(self): |
87815216 |
dependentPackages = []
for pkg in self.spec.packages.values(): |
5f40784b |
for dpkg in pkg.checkbuildrequires: |
e45f5730 |
dependentPackages.append(dpkg) |
87815216 |
dependentPackages = list(set(dependentPackages)) |
e45f5730 |
return dependentPackages |
5062126c |
|
87815216 |
def getRequires(self, pkgName):
dependentPackages = []
for pkg in self.spec.packages.values(): |
2820c61a |
if pkg.name == pkgName:
for dpkg in pkg.requires:
dependentPackages.append(dpkg.package)
return dependentPackages
|
87815216 |
def getProvides(self, packageName):
dependentPackages = []
defaultPkgName = self.spec.packages['default'].name |
2820c61a |
pkg = None |
87815216 |
if packageName in self.spec.packages: |
2820c61a |
pkg = self.spec.packages.get(packageName)
if defaultPkgName == packageName: |
87815216 |
pkg = self.spec.packages['default'] |
2820c61a |
if pkg is not None:
for dpkg in pkg.provides: |
5f40784b |
dependentPackages.append(dpkg.package) |
2820c61a |
else: |
87815216 |
print("package not found") |
5f40784b |
return dependentPackages |
5062126c |
|
2820c61a |
def getVersion(self):
pkg = self.spec.packages.get('default')
return pkg.version |
5062126c |
|
2820c61a |
def getRelease(self):
pkg = self.spec.packages.get('default')
return pkg.release |
5062126c |
|
5e29a499 |
def getBasePackageName(self):
pkg = self.spec.packages.get('default')
return pkg.name |
5062126c |
|
cb4e8710 |
def getSecurityHardeningOption(self):
return self.spec.globalSecurityHardening
|
b5e09fac |
def isCheckAvailable(self): |
87815216 |
check = False |
b5e09fac |
if self.spec.checkMacro is not None: |
87815216 |
check = True |
b5e09fac |
return check
|
fba234bc |
def getDefinitions(self):
return self.spec.defs
|
2820c61a |
def main():
spec = Specutils("/workspace1/myrepos/photon/SPECS/docker/docker.spec") |
87815216 |
print("packages {}".format(spec.getPackageNames()))
print("packages {}".format(spec.getRPMNames()))
print("sources {}".format(spec.getSourceNames()))
print("patches {}".format(spec.getPatchNames()))
print("requires {}".format(spec.getRequires('libltdl-devel')))
print("requires {}".format(spec.getRequires('libtool'))) |
5062126c |
|
87815216 |
print("provides {}".format(spec.getProvides('libtool'))) |
e45f5730 |
print("all-requires {}".format(spec.getPkgNamesFromObj(spec.getRequiresAllPackages())))
print("all-build-requires {}".format(spec.getPkgNamesFromObj(spec.getBuildRequiresAllPackages()))) |
5062126c |
|
2820c61a |
if __name__ == '__main__':
main() |