euscanwww: scan_portage get paths using eix and PORTDB
Signed-off-by: volpino <fox91@anche.no>
This commit is contained in:
parent
be146163f6
commit
b052f2e8b8
@ -1,8 +1,7 @@
|
|||||||
import subprocess
|
import subprocess
|
||||||
from os.path import join
|
from os.path import join
|
||||||
|
|
||||||
from portage import catpkgsplit, catsplit
|
import portage
|
||||||
from portage.dbapi import porttree
|
|
||||||
|
|
||||||
from xml.etree.ElementTree import iterparse, ParseError
|
from xml.etree.ElementTree import iterparse, ParseError
|
||||||
|
|
||||||
@ -15,6 +14,9 @@ from djeuscan.processing import FakeLogger
|
|||||||
from djeuscan.models import Package, Version, VersionLog
|
from djeuscan.models import Package, Version, VersionLog
|
||||||
|
|
||||||
|
|
||||||
|
PORTDB = portage.db[portage.root]["porttree"].dbapi
|
||||||
|
|
||||||
|
|
||||||
class ScanPortage(object):
|
class ScanPortage(object):
|
||||||
def __init__(self, logger=None, no_log=False, purge_packages=False,
|
def __init__(self, logger=None, no_log=False, purge_packages=False,
|
||||||
purge_versions=False):
|
purge_versions=False):
|
||||||
@ -24,7 +26,6 @@ class ScanPortage(object):
|
|||||||
self.purge_versions = purge_versions
|
self.purge_versions = purge_versions
|
||||||
|
|
||||||
self.style = color_style()
|
self.style = color_style()
|
||||||
self.portdbapi = porttree.portdbapi()
|
|
||||||
|
|
||||||
self._cache = {'packages': {}, 'versions': {}}
|
self._cache = {'packages': {}, 'versions': {}}
|
||||||
self._overlays = None
|
self._overlays = None
|
||||||
@ -137,7 +138,10 @@ class ScanPortage(object):
|
|||||||
)
|
)
|
||||||
slot = elem.attrib.get("slot", "0")
|
slot = elem.attrib.get("slot", "0")
|
||||||
overlay = elem.attrib.get("repository", "gentoo")
|
overlay = elem.attrib.get("repository", "gentoo")
|
||||||
package["versions"].append((cpv, slot, overlay))
|
overlay_path = elem.attrib.get("overlay", None)
|
||||||
|
package["versions"].append(
|
||||||
|
(cpv, slot, overlay, overlay_path)
|
||||||
|
)
|
||||||
|
|
||||||
elif event == "end": # on tag closing
|
elif event == "end": # on tag closing
|
||||||
if elem.tag == "package":
|
if elem.tag == "package":
|
||||||
@ -173,7 +177,7 @@ class ScanPortage(object):
|
|||||||
if not query:
|
if not query:
|
||||||
current_packages = Package.objects.all()
|
current_packages = Package.objects.all()
|
||||||
elif '/' in query:
|
elif '/' in query:
|
||||||
cat, pkg = catsplit(query)
|
cat, pkg = portage.catsplit(query)
|
||||||
current_packages = Package.objects.filter(category=cat, name=pkg)
|
current_packages = Package.objects.filter(category=cat, name=pkg)
|
||||||
else:
|
else:
|
||||||
current_packages = Package.objects.filter(name=query)
|
current_packages = Package.objects.filter(name=query)
|
||||||
@ -191,8 +195,8 @@ class ScanPortage(object):
|
|||||||
cat, pkg, data['homepage'], data['description']
|
cat, pkg, data['homepage'], data['description']
|
||||||
)
|
)
|
||||||
packages_alive.add("%s/%s" % (cat, pkg))
|
packages_alive.add("%s/%s" % (cat, pkg))
|
||||||
for cpv, slot, overlay in data['versions']:
|
for cpv, slot, overlay, overlay_path in data['versions']:
|
||||||
self.store_version(package, cpv, slot, overlay)
|
self.store_version(package, cpv, slot, overlay, overlay_path)
|
||||||
|
|
||||||
self.purge_old_packages(current_packages, packages_alive)
|
self.purge_old_packages(current_packages, packages_alive)
|
||||||
self.purge_old_versions()
|
self.purge_old_versions()
|
||||||
@ -214,8 +218,8 @@ class ScanPortage(object):
|
|||||||
|
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
def store_version(self, package, cpv, slot, overlay):
|
def store_version(self, package, cpv, slot, overlay, overlay_path):
|
||||||
cat, pkg, ver, rev = catpkgsplit(cpv)
|
cat, pkg, ver, rev = portage.catpkgsplit(cpv)
|
||||||
if not overlay:
|
if not overlay:
|
||||||
overlay = 'gentoo'
|
overlay = 'gentoo'
|
||||||
|
|
||||||
@ -224,7 +228,7 @@ class ScanPortage(object):
|
|||||||
package.category, package.name, ver, rev, slot, overlay
|
package.category, package.name, ver, rev, slot, overlay
|
||||||
)
|
)
|
||||||
|
|
||||||
overlay_path = self.portdbapi.getRepositoryPath(overlay)
|
overlay_path = overlay_path or PORTDB.settings["PORTDIR"]
|
||||||
package_path = join(overlay_path, package.category, package.name)
|
package_path = join(overlay_path, package.category, package.name)
|
||||||
ebuild_path = join(package_path, "%s.ebuild" % cpv.split("/")[-1])
|
ebuild_path = join(package_path, "%s.ebuild" % cpv.split("/")[-1])
|
||||||
metadata_path = join(package_path, "metadata.xml")
|
metadata_path = join(package_path, "metadata.xml")
|
||||||
|
Loading…
Reference in New Issue
Block a user