Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge branch 'master' of git://github.com/volpino/euscan

  • Loading branch information...
commit 22ac8c4e2ee8ac700380e57754f2f41bc3664a14 2 parents 3a56aa4 + 058b505
@bacher09 bacher09 authored
View
20 bin/euscan
@@ -42,7 +42,7 @@ def setupSignals():
def exithandler(signum, frame):
signal.signal(signal.SIGINT, signal.SIG_IGN)
signal.signal(signal.SIGTERM, signal.SIG_IGN)
- print ()
+ print()
sys.exit(errno.EINTR)
signal.signal(signal.SIGINT, exithandler)
@@ -236,21 +236,21 @@ def main():
pp.die(1, '%s: %s' % (package, str(err)))
if not CONFIG['quiet']:
- print ()
+ print()
for cp, url, version in ret:
if not CONFIG['quiet']:
- print ("Upstream Version: "
- + pp.number("%s" % version)
- + pp.path(" %s" % url))
+ print("Upstream Version: "
+ + pp.number("%s" % version)
+ + pp.path(" %s" % url))
else:
- print (pp.cpv("%s-%s" % (cp, version))
- + ": " + pp.path(url))
+ print(pp.cpv("%s-%s" % (cp, version))
+ + ": " + pp.path(url))
if not len(ret) and not CONFIG['quiet']:
- print (pp.warn("Didn't find any new version, "
- + "check package's homepage for "
- + "more informations"))
+ print(pp.warn("Didn't find any new version, "
+ + "check package's homepage for "
+ + "more informations"))
if __name__ == "__main__":
View
2  euscanwww/djeuscan/api/handlers.py
@@ -127,7 +127,7 @@ def read(self, request, category, package):
order_by('-datetime')[:1]
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 = []
for herd in package.herds.all():
View
11 euscanwww/djeuscan/feeds.py
@@ -77,7 +77,7 @@ def description(self, package):
return package.description
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):
return ''
@@ -100,8 +100,7 @@ def link(self, maintainer):
kwargs={'maintainer_id': maintainer.id})
def items(self, maintainer):
- q = VersionLog.objects.filter(package__maintainers__id=maintainer.id)
- return q.order_by('-id')[:50]
+ return VersionLog.objects.for_maintainer(maintainer, order=True)[:50]
class HerdFeed(BaseFeed):
@@ -120,8 +119,7 @@ def link(self, herd):
return reverse('djeuscan.views.herd', kwargs={'herd': herd.herd})
def items(self, herd):
- q = VersionLog.objects.filter(package__herds__id=herd.id)
- return q.order_by('-id')[:100]
+ return VersionLog.objects.for_herd(herd, order=True)[:100]
class CategoryFeed(BaseFeed):
@@ -142,5 +140,4 @@ def link(self, category):
return reverse('djeuscan.views.category', args=[category])
def items(self, category):
- q = VersionLog.objects.filter(package__category=category)
- return q.order_by('-id')[:100]
+ return VersionLog.objects.for_category(category, order=True)[:100]
View
29 euscanwww/djeuscan/managers.py
@@ -108,3 +108,32 @@ class PackageQuerySet(models.query.QuerySet, PackageMixin):
class PackageManager(models.Manager, PackageMixin):
def get_query_set(self):
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)
View
4 euscanwww/djeuscan/models.py
@@ -1,6 +1,6 @@
from django.db import models
-from djeuscan.managers import PackageManager
+from djeuscan.managers import PackageManager, VersionLogManager
class Herd(models.Model):
@@ -114,6 +114,8 @@ class VersionLog(models.Model):
overlay = models.CharField(max_length=128, default='gentoo')
action = models.IntegerField(choices=VERSION_ACTIONS)
+ objects = VersionLogManager()
+
def tag(self):
return '%s-%s:%s-[%s]' % (self.version, self.revision, self.slot,
self.overlay)
View
2  euscanwww/djeuscan/views.py
@@ -102,7 +102,7 @@ def package(request, category, package):
log = EuscanResult.objects.filter(package=package).\
order_by('-datetime')[:1]
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,
'upstream': upstream, 'log': log, 'vlog': vlog}
View
86 pym/euscan/helpers.py
@@ -1,7 +1,9 @@
import os
+import sys
import re
import pkg_resources
import errno
+import imp
import urllib2
@@ -14,6 +16,11 @@
import portage
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
import euscan
@@ -566,3 +573,82 @@ def parse_mirror(uri):
return None
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
View
7 pym/euscan/scan.py
@@ -66,6 +66,13 @@ def scan_upstream_urls(cpv, urls):
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(
include_masked=True,
in_installed=False
Please sign in to comment.
Something went wrong with that request. Please try again.