Merge branch 'master' of git://github.com/volpino/euscan
This commit is contained in:
commit
22ac8c4e2e
10
bin/euscan
10
bin/euscan
@ -42,7 +42,7 @@ def setupSignals():
|
|||||||
def exithandler(signum, frame):
|
def exithandler(signum, frame):
|
||||||
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
||||||
signal.signal(signal.SIGTERM, signal.SIG_IGN)
|
signal.signal(signal.SIGTERM, signal.SIG_IGN)
|
||||||
print ()
|
print()
|
||||||
sys.exit(errno.EINTR)
|
sys.exit(errno.EINTR)
|
||||||
|
|
||||||
signal.signal(signal.SIGINT, exithandler)
|
signal.signal(signal.SIGINT, exithandler)
|
||||||
@ -236,19 +236,19 @@ def main():
|
|||||||
pp.die(1, '%s: %s' % (package, str(err)))
|
pp.die(1, '%s: %s' % (package, str(err)))
|
||||||
|
|
||||||
if not CONFIG['quiet']:
|
if not CONFIG['quiet']:
|
||||||
print ()
|
print()
|
||||||
|
|
||||||
for cp, url, version in ret:
|
for cp, url, version in ret:
|
||||||
if not CONFIG['quiet']:
|
if not CONFIG['quiet']:
|
||||||
print ("Upstream Version: "
|
print("Upstream Version: "
|
||||||
+ pp.number("%s" % version)
|
+ pp.number("%s" % version)
|
||||||
+ pp.path(" %s" % url))
|
+ pp.path(" %s" % url))
|
||||||
else:
|
else:
|
||||||
print (pp.cpv("%s-%s" % (cp, version))
|
print(pp.cpv("%s-%s" % (cp, version))
|
||||||
+ ": " + pp.path(url))
|
+ ": " + pp.path(url))
|
||||||
|
|
||||||
if not len(ret) and not CONFIG['quiet']:
|
if not len(ret) and not CONFIG['quiet']:
|
||||||
print (pp.warn("Didn't find any new version, "
|
print(pp.warn("Didn't find any new version, "
|
||||||
+ "check package's homepage for "
|
+ "check package's homepage for "
|
||||||
+ "more informations"))
|
+ "more informations"))
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ class PackageHandler(AnonymousBaseHandler):
|
|||||||
order_by('-datetime')[:1]
|
order_by('-datetime')[:1]
|
||||||
log = log[0] if log else None
|
log = log[0] if log else None
|
||||||
|
|
||||||
vlog = VersionLog.objects.filter(package=package).order_by('-id')
|
vlog = VersionLog.objects.for_package(package, order=True)
|
||||||
|
|
||||||
herds = []
|
herds = []
|
||||||
for herd in package.herds.all():
|
for herd in package.herds.all():
|
||||||
|
@ -77,7 +77,7 @@ class PackageFeed(BaseFeed):
|
|||||||
return package.description
|
return package.description
|
||||||
|
|
||||||
def items(self, package):
|
def items(self, package):
|
||||||
return VersionLog.objects.filter(package=package).order_by('-id')[:30]
|
return VersionLog.objects.for_package(package, order=True)[:30]
|
||||||
|
|
||||||
def item_description(self, vlog):
|
def item_description(self, vlog):
|
||||||
return ''
|
return ''
|
||||||
@ -100,8 +100,7 @@ class MaintainerFeed(BaseFeed):
|
|||||||
kwargs={'maintainer_id': maintainer.id})
|
kwargs={'maintainer_id': maintainer.id})
|
||||||
|
|
||||||
def items(self, maintainer):
|
def items(self, maintainer):
|
||||||
q = VersionLog.objects.filter(package__maintainers__id=maintainer.id)
|
return VersionLog.objects.for_maintainer(maintainer, order=True)[:50]
|
||||||
return q.order_by('-id')[:50]
|
|
||||||
|
|
||||||
|
|
||||||
class HerdFeed(BaseFeed):
|
class HerdFeed(BaseFeed):
|
||||||
@ -120,8 +119,7 @@ class HerdFeed(BaseFeed):
|
|||||||
return reverse('djeuscan.views.herd', kwargs={'herd': herd.herd})
|
return reverse('djeuscan.views.herd', kwargs={'herd': herd.herd})
|
||||||
|
|
||||||
def items(self, herd):
|
def items(self, herd):
|
||||||
q = VersionLog.objects.filter(package__herds__id=herd.id)
|
return VersionLog.objects.for_herd(herd, order=True)[:100]
|
||||||
return q.order_by('-id')[:100]
|
|
||||||
|
|
||||||
|
|
||||||
class CategoryFeed(BaseFeed):
|
class CategoryFeed(BaseFeed):
|
||||||
@ -142,5 +140,4 @@ class CategoryFeed(BaseFeed):
|
|||||||
return reverse('djeuscan.views.category', args=[category])
|
return reverse('djeuscan.views.category', args=[category])
|
||||||
|
|
||||||
def items(self, category):
|
def items(self, category):
|
||||||
q = VersionLog.objects.filter(package__category=category)
|
return VersionLog.objects.for_category(category, order=True)[:100]
|
||||||
return q.order_by('-id')[:100]
|
|
||||||
|
@ -108,3 +108,32 @@ class PackageQuerySet(models.query.QuerySet, PackageMixin):
|
|||||||
class PackageManager(models.Manager, PackageMixin):
|
class PackageManager(models.Manager, PackageMixin):
|
||||||
def get_query_set(self):
|
def get_query_set(self):
|
||||||
return PackageQuerySet(self.model, using=self._db)
|
return PackageQuerySet(self.model, using=self._db)
|
||||||
|
|
||||||
|
|
||||||
|
class VersionLogMixin(object):
|
||||||
|
def for_package(self, package, order=False):
|
||||||
|
res = filter(package=package)
|
||||||
|
if order:
|
||||||
|
res = res.order_by('-id')
|
||||||
|
return res
|
||||||
|
|
||||||
|
def for_maintainer(self, maintainer, order=False):
|
||||||
|
res = self.filter(package__maintainers__id=maintainer.id)
|
||||||
|
if order:
|
||||||
|
res = res.order_by('-id')
|
||||||
|
return res
|
||||||
|
|
||||||
|
def for_category(self, category, order=False):
|
||||||
|
res = self.filter(package__category=category)
|
||||||
|
if order:
|
||||||
|
res = res.order_by('-id')
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
class VersionLogQuerySet(models.query.QuerySet, VersionLogMixin):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class VersionLogManager(models.Manager, VersionLogMixin):
|
||||||
|
def get_query_set(self):
|
||||||
|
return VersionLogQuerySet(self.model, using=self._db)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
from djeuscan.managers import PackageManager
|
from djeuscan.managers import PackageManager, VersionLogManager
|
||||||
|
|
||||||
|
|
||||||
class Herd(models.Model):
|
class Herd(models.Model):
|
||||||
@ -114,6 +114,8 @@ class VersionLog(models.Model):
|
|||||||
overlay = models.CharField(max_length=128, default='gentoo')
|
overlay = models.CharField(max_length=128, default='gentoo')
|
||||||
action = models.IntegerField(choices=VERSION_ACTIONS)
|
action = models.IntegerField(choices=VERSION_ACTIONS)
|
||||||
|
|
||||||
|
objects = VersionLogManager()
|
||||||
|
|
||||||
def tag(self):
|
def tag(self):
|
||||||
return '%s-%s:%s-[%s]' % (self.version, self.revision, self.slot,
|
return '%s-%s:%s-[%s]' % (self.version, self.revision, self.slot,
|
||||||
self.overlay)
|
self.overlay)
|
||||||
|
@ -102,7 +102,7 @@ def package(request, category, package):
|
|||||||
log = EuscanResult.objects.filter(package=package).\
|
log = EuscanResult.objects.filter(package=package).\
|
||||||
order_by('-datetime')[:1]
|
order_by('-datetime')[:1]
|
||||||
log = log[0] if log else None
|
log = log[0] if log else None
|
||||||
vlog = VersionLog.objects.filter(package=package).order_by('-id')
|
vlog = VersionLog.objects.for_package(package, order=True)
|
||||||
|
|
||||||
return {'package': package, 'packaged': packaged,
|
return {'package': package, 'packaged': packaged,
|
||||||
'upstream': upstream, 'log': log, 'vlog': vlog}
|
'upstream': upstream, 'log': log, 'vlog': vlog}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import re
|
import re
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
import errno
|
import errno
|
||||||
|
import imp
|
||||||
|
|
||||||
import urllib2
|
import urllib2
|
||||||
|
|
||||||
@ -14,6 +16,11 @@ except ImportError:
|
|||||||
|
|
||||||
import portage
|
import portage
|
||||||
from portage import dep
|
from portage import dep
|
||||||
|
from portage.const import VDB_PATH
|
||||||
|
from portage import _encodings
|
||||||
|
from portage import _shell_quote
|
||||||
|
from portage import _unicode_decode
|
||||||
|
from portage import _unicode_encode
|
||||||
|
|
||||||
from euscan import CONFIG, BLACKLIST_VERSIONS, ROBOTS_TXT_BLACKLIST_DOMAINS
|
from euscan import CONFIG, BLACKLIST_VERSIONS, ROBOTS_TXT_BLACKLIST_DOMAINS
|
||||||
import euscan
|
import euscan
|
||||||
@ -566,3 +573,82 @@ def parse_mirror(uri):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
return uri
|
return uri
|
||||||
|
|
||||||
|
|
||||||
|
# Stolen from ebuild
|
||||||
|
def query_from_ebuild(ebuild):
|
||||||
|
pf = None
|
||||||
|
if ebuild.endswith(".ebuild"):
|
||||||
|
pf = os.path.basename(ebuild)[:-7]
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
if not os.path.isabs(ebuild):
|
||||||
|
mycwd = os.getcwd()
|
||||||
|
# Try to get the non-canonical path from the PWD evironment variable,
|
||||||
|
# since the canonical path returned from os.getcwd() may may be
|
||||||
|
# unusable in cases where the directory stucture is built from
|
||||||
|
# symlinks.
|
||||||
|
pwd = os.environ.get('PWD', '')
|
||||||
|
if sys.hexversion < 0x3000000:
|
||||||
|
pwd = _unicode_decode(pwd, encoding=_encodings['content'],
|
||||||
|
errors='strict')
|
||||||
|
if pwd and pwd != mycwd and \
|
||||||
|
os.path.realpath(pwd) == mycwd:
|
||||||
|
mycwd = portage.normalize_path(pwd)
|
||||||
|
ebuild = os.path.join(mycwd, ebuild)
|
||||||
|
|
||||||
|
ebuild = portage.normalize_path(ebuild)
|
||||||
|
# portdbapi uses the canonical path for the base of the portage tree, but
|
||||||
|
# subdirectories of the base can be built from symlinks (like crossdev
|
||||||
|
# does).
|
||||||
|
ebuild_portdir = os.path.realpath(
|
||||||
|
os.path.dirname(os.path.dirname(os.path.dirname(ebuild))))
|
||||||
|
ebuild = os.path.join(ebuild_portdir, *ebuild.split(os.path.sep)[-3:])
|
||||||
|
vdb_path = os.path.join(portage.settings['ROOT'], VDB_PATH)
|
||||||
|
|
||||||
|
# Make sure that portdb.findname() returns the correct ebuild.
|
||||||
|
if ebuild_portdir != vdb_path and \
|
||||||
|
ebuild_portdir not in portage.portdb.porttrees:
|
||||||
|
if sys.hexversion >= 0x3000000:
|
||||||
|
os.environ["PORTDIR_OVERLAY"] = \
|
||||||
|
os.environ.get("PORTDIR_OVERLAY", "") + \
|
||||||
|
" " + _shell_quote(ebuild_portdir)
|
||||||
|
else:
|
||||||
|
os.environ["PORTDIR_OVERLAY"] = \
|
||||||
|
os.environ.get("PORTDIR_OVERLAY", "") + \
|
||||||
|
" " + _unicode_encode(_shell_quote(ebuild_portdir),
|
||||||
|
encoding=_encodings['content'], errors='strict')
|
||||||
|
|
||||||
|
portage.close_portdbapi_caches()
|
||||||
|
imp.reload(portage)
|
||||||
|
del portage.portdb.porttrees[1:]
|
||||||
|
if ebuild_portdir != portage.portdb.porttree_root:
|
||||||
|
portage.portdb.porttrees.append(ebuild_portdir)
|
||||||
|
|
||||||
|
if not os.path.exists(ebuild):
|
||||||
|
return False
|
||||||
|
|
||||||
|
ebuild_split = ebuild.split("/")
|
||||||
|
cpv = "%s/%s" % (ebuild_split[-3], pf)
|
||||||
|
|
||||||
|
if not portage.catpkgsplit(cpv):
|
||||||
|
return False
|
||||||
|
|
||||||
|
if ebuild.startswith(os.path.join(portage.root, portage.const.VDB_PATH)):
|
||||||
|
mytree = "vartree"
|
||||||
|
|
||||||
|
portage_ebuild = portage.db[portage.root][mytree].dbapi.findname(cpv)
|
||||||
|
|
||||||
|
if os.path.realpath(portage_ebuild) != ebuild:
|
||||||
|
return False
|
||||||
|
|
||||||
|
else:
|
||||||
|
mytree = "porttree"
|
||||||
|
|
||||||
|
portage_ebuild = portage.portdb.findname(cpv)
|
||||||
|
|
||||||
|
if not portage_ebuild or portage_ebuild != ebuild:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return cpv
|
||||||
|
@ -66,6 +66,13 @@ def scan_upstream_urls(cpv, urls):
|
|||||||
|
|
||||||
|
|
||||||
def scan_upstream(query):
|
def scan_upstream(query):
|
||||||
|
|
||||||
|
# check if the query is an ebuild file.
|
||||||
|
# if it's a valid ebuild convert the filename in an euscan query
|
||||||
|
ebuild_query = helpers.query_from_ebuild(query)
|
||||||
|
if ebuild_query:
|
||||||
|
query = ebuild_query
|
||||||
|
|
||||||
matches = Query(query).find(
|
matches = Query(query).find(
|
||||||
include_masked=True,
|
include_masked=True,
|
||||||
in_installed=False
|
in_installed=False
|
||||||
|
Loading…
Reference in New Issue
Block a user