Lovely day for PEP8 and pylint!
This commit is contained in:
		@@ -5,7 +5,6 @@
 | 
			
		||||
 | 
			
		||||
__version__ = "git"
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
from portage.output import EOutput
 | 
			
		||||
 | 
			
		||||
@@ -19,15 +18,16 @@ CONFIG = {
 | 
			
		||||
    'brute-force-false-watermark': 50,
 | 
			
		||||
    'scan-dir': True,
 | 
			
		||||
    'oneshot': True,
 | 
			
		||||
    'user-agent' : 'escan (http://euscan.iksaif.net)',
 | 
			
		||||
    'skip-robots-txt' : False,
 | 
			
		||||
    'cache' : False
 | 
			
		||||
    'user-agent': 'escan (http://euscan.iksaif.net)',
 | 
			
		||||
    'skip-robots-txt': False,
 | 
			
		||||
    'cache': False
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
output = EOutput(CONFIG['quiet'])
 | 
			
		||||
 | 
			
		||||
BLACKLIST_VERSIONS = [
 | 
			
		||||
    # Compatibility package for running binaries linked against a pre gcc 3.4 libstdc++, won't be updated
 | 
			
		||||
    # Compatibility package for running binaries linked against a
 | 
			
		||||
    # pre gcc 3.4 libstdc++, won't be updated
 | 
			
		||||
    '>=sys-libs/libstdc++-v3-3.4',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@@ -39,21 +39,24 @@ BLACKLIST_PACKAGES = [
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
SCANDIR_BLACKLIST_URLS = [
 | 
			
		||||
    'mirror://rubygems/(.*)', # Not browsable
 | 
			
		||||
    'mirror://gentoo/(.*)' # Directory too big
 | 
			
		||||
    'mirror://rubygems/(.*)',  # Not browsable
 | 
			
		||||
    'mirror://gentoo/(.*)'  # Directory too big
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
BRUTEFORCE_BLACKLIST_PACKAGES = [
 | 
			
		||||
    'net-zope/plonepopoll' # infinite loop any http://plone.org/products/plonepopoll/releases/*/plonepopoll-2-6-1.tgz link will work
 | 
			
		||||
    # infinite loop any
 | 
			
		||||
    # http://plone.org/products/plonepopoll/releases/*/plonepopoll-2-6-1.tgz
 | 
			
		||||
    # link will work
 | 
			
		||||
    'net-zope/plonepopoll'
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
BRUTEFORCE_BLACKLIST_URLS = [
 | 
			
		||||
    'http://(.*)dockapps.org/download.php/id/(.*)', # infinite loop
 | 
			
		||||
    'http://hydra.nixos.org/build/(.*)', # infinite loop
 | 
			
		||||
    'http://www.rennings.net/gentoo/distfiles/(.*)', # Doesn't respect 404, infinite loop
 | 
			
		||||
    'http://art.gnome.org/download/(.*)', # Doesn't respect 404, infinite loop
 | 
			
		||||
    'http://barelysufficient.org/~olemarkus/(.*)', # Doesn't respect 404, infinite loop
 | 
			
		||||
    'http://olemarkus.org/~olemarkus/(.*)', # Doesn't respect 404, infinite loop
 | 
			
		||||
    'http://(.*)dockapps.org/download.php/id/(.*)',  # infinite loop
 | 
			
		||||
    'http://hydra.nixos.org/build/(.*)',  # infinite loop
 | 
			
		||||
    'http://www.rennings.net/gentoo/distfiles/(.*)',  # Doesn't respect 404, infinite loop
 | 
			
		||||
    'http://art.gnome.org/download/(.*)',  # Doesn't respect 404, infinite loop
 | 
			
		||||
    'http://barelysufficient.org/~olemarkus/(.*)',  # Doesn't respect 404, infinite loop
 | 
			
		||||
    'http://olemarkus.org/~olemarkus/(.*)',  # Doesn't respect 404, infinite loop
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
ROBOTS_TXT_BLACKLIST_DOMAINS = [
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
from euscan.handlers import generic, php, pypi, rubygem, kde, cpan
 | 
			
		||||
 | 
			
		||||
handlers = [ kde, php, pypi, rubygem, cpan, generic ]
 | 
			
		||||
handlers = [kde, php, pypi, rubygem, cpan, generic]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def find_best_handler(cpv, url):
 | 
			
		||||
    for handler in handlers:
 | 
			
		||||
@@ -8,12 +9,14 @@ def find_best_handler(cpv, url):
 | 
			
		||||
            return handler
 | 
			
		||||
    return None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def scan(cpv, url):
 | 
			
		||||
    handler = find_best_handler(cpv, url)
 | 
			
		||||
    if handler:
 | 
			
		||||
        return handler.scan(cpv, url)
 | 
			
		||||
    return []
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def brute_force(cpv, url):
 | 
			
		||||
    handler = find_best_handler(cpv, url)
 | 
			
		||||
    if handler:
 | 
			
		||||
 
 | 
			
		||||
@@ -8,9 +8,11 @@ import euscan
 | 
			
		||||
 | 
			
		||||
_cpan_package_name_re = re.compile("mirror://cpan/authors/.*/([^/.]*).*")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def can_handle(cpv, url):
 | 
			
		||||
    return url.startswith('mirror://cpan/')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def guess_package(cp, url):
 | 
			
		||||
    match = _cpan_package_name_re.search(url)
 | 
			
		||||
 | 
			
		||||
@@ -27,6 +29,7 @@ def guess_package(cp, url):
 | 
			
		||||
 | 
			
		||||
    return pkg
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def gentoo_mangle_version(up_pv):
 | 
			
		||||
    pv = ""
 | 
			
		||||
 | 
			
		||||
@@ -39,17 +42,20 @@ def gentoo_mangle_version(up_pv):
 | 
			
		||||
            c = up_pv[i]
 | 
			
		||||
            pv += c
 | 
			
		||||
            digits += int(c.isdigit())
 | 
			
		||||
            if c == '.': digits = 0
 | 
			
		||||
            if c == '.':
 | 
			
		||||
                digits = 0
 | 
			
		||||
    else:
 | 
			
		||||
        pv = up_pv
 | 
			
		||||
 | 
			
		||||
    return helpers.gentoo_mangle_version(pv)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def cpan_trim_version(pv):
 | 
			
		||||
    pv = re.sub('^[a-zA-Z]+', '', pv)
 | 
			
		||||
    pv = re.sub('[a-zA-Z]$', '', pv)
 | 
			
		||||
    return pv
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def cpan_mangle_version(pv):
 | 
			
		||||
    pos = pv.find('.')
 | 
			
		||||
    if pos < 0:
 | 
			
		||||
@@ -59,6 +65,7 @@ def cpan_mangle_version(pv):
 | 
			
		||||
    up_pv = cpan_trim_version(up_pv)
 | 
			
		||||
    return up_pv
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def cpan_vercmp(cp, a, b):
 | 
			
		||||
    try:
 | 
			
		||||
        return float(a) - float(b)
 | 
			
		||||
@@ -68,6 +75,7 @@ def cpan_vercmp(cp, a, b):
 | 
			
		||||
        else:
 | 
			
		||||
            return 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def scan(cpv, url):
 | 
			
		||||
    cp, ver, rev = portage.pkgsplit(cpv)
 | 
			
		||||
    pkg = guess_package(cp, url)
 | 
			
		||||
@@ -107,15 +115,20 @@ def scan(cpv, url):
 | 
			
		||||
        if helpers.version_filtered(cp, up_ver, up_pv, cpan_vercmp):
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
        url = 'mirror://cpan/authors/id/%s/%s/%s/%s' % \
 | 
			
		||||
            (version['cpanid'][0], version['cpanid'][0:1], version['cpanid'], version['archive'])
 | 
			
		||||
        url = 'mirror://cpan/authors/id/%s/%s/%s/%s' % (
 | 
			
		||||
            version['cpanid'][0],
 | 
			
		||||
            version['cpanid'][0:1],
 | 
			
		||||
            version['cpanid'],
 | 
			
		||||
            version['archive']
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if url == orig_url:
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
        ret.append(( url, pv ))
 | 
			
		||||
        ret.append((url, pv))
 | 
			
		||||
 | 
			
		||||
    return ret
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def brute_force(cpv, url):
 | 
			
		||||
    return []
 | 
			
		||||
 
 | 
			
		||||
@@ -6,10 +6,12 @@ from BeautifulSoup import BeautifulSoup
 | 
			
		||||
 | 
			
		||||
import portage
 | 
			
		||||
 | 
			
		||||
from euscan import CONFIG, SCANDIR_BLACKLIST_URLS, BRUTEFORCE_BLACKLIST_PACKAGES, BRUTEFORCE_BLACKLIST_URLS
 | 
			
		||||
from euscan import CONFIG, SCANDIR_BLACKLIST_URLS, \
 | 
			
		||||
    BRUTEFORCE_BLACKLIST_PACKAGES, BRUTEFORCE_BLACKLIST_URLS
 | 
			
		||||
from euscan import helpers
 | 
			
		||||
import euscan
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def scan_html(data, url, pattern):
 | 
			
		||||
    soup = BeautifulSoup(data)
 | 
			
		||||
    results = []
 | 
			
		||||
@@ -28,6 +30,7 @@ def scan_html(data, url, pattern):
 | 
			
		||||
 | 
			
		||||
    return results
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def scan_ftp(data, url, pattern):
 | 
			
		||||
    buf = StringIO.StringIO(data)
 | 
			
		||||
    results = []
 | 
			
		||||
@@ -40,6 +43,7 @@ def scan_ftp(data, url, pattern):
 | 
			
		||||
 | 
			
		||||
    return results
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def scan_directory_recursive(cp, ver, rev, url, steps, orig_url):
 | 
			
		||||
    if not steps:
 | 
			
		||||
        return []
 | 
			
		||||
@@ -91,6 +95,7 @@ def scan_directory_recursive(cp, ver, rev, url, steps, orig_url):
 | 
			
		||||
 | 
			
		||||
    return versions
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def scan(cpv, url):
 | 
			
		||||
    for bu in SCANDIR_BLACKLIST_URLS:
 | 
			
		||||
        if re.match(bu, url):
 | 
			
		||||
@@ -107,13 +112,17 @@ def scan(cpv, url):
 | 
			
		||||
    if ver not in resolved_url:
 | 
			
		||||
        newver = helpers.version_change_end_sep(ver)
 | 
			
		||||
        if newver and newver in resolved_url:
 | 
			
		||||
            euscan.output.einfo("Version: using %s instead of %s" % (newver, ver))
 | 
			
		||||
            euscan.output.einfo(
 | 
			
		||||
                "Version: using %s instead of %s" % (newver, ver)
 | 
			
		||||
            )
 | 
			
		||||
            ver = newver
 | 
			
		||||
 | 
			
		||||
    template = helpers.template_from_url(resolved_url, ver)
 | 
			
		||||
    if '${' not in template:
 | 
			
		||||
        euscan.output.einfo("Url doesn't seems to depend on version: %s not found in %s"
 | 
			
		||||
                     % (ver, resolved_url))
 | 
			
		||||
        euscan.output.einfo(
 | 
			
		||||
            "Url doesn't seems to depend on version: %s not found in %s" %
 | 
			
		||||
            (ver, resolved_url)
 | 
			
		||||
        )
 | 
			
		||||
        return []
 | 
			
		||||
    else:
 | 
			
		||||
        euscan.output.einfo("Scanning: %s" % template)
 | 
			
		||||
@@ -121,6 +130,7 @@ def scan(cpv, url):
 | 
			
		||||
    steps = helpers.generate_scan_paths(template)
 | 
			
		||||
    return scan_directory_recursive(cp, ver, rev, "", steps, url)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def brute_force(cpv, url):
 | 
			
		||||
    cp, ver, rev = portage.pkgsplit(cpv)
 | 
			
		||||
 | 
			
		||||
@@ -155,8 +165,9 @@ def brute_force(cpv, url):
 | 
			
		||||
    template = helpers.template_from_url(url, ver)
 | 
			
		||||
 | 
			
		||||
    if '${PV}' not in template:
 | 
			
		||||
        euscan.output.einfo("Url doesn't seems to depend on full version: %s not found in %s"
 | 
			
		||||
                     % (ver, url))
 | 
			
		||||
        euscan.output.einfo(
 | 
			
		||||
            "Url doesn't seems to depend on full version: %s not found in %s" %
 | 
			
		||||
            (ver, url))
 | 
			
		||||
        return []
 | 
			
		||||
    else:
 | 
			
		||||
        euscan.output.einfo("Brute forcing: %s" % template)
 | 
			
		||||
@@ -187,11 +198,14 @@ def brute_force(cpv, url):
 | 
			
		||||
        result.append([url, version])
 | 
			
		||||
 | 
			
		||||
        if len(result) > CONFIG['brute-force-false-watermark']:
 | 
			
		||||
            euscan.output.einfo("Broken server detected ! Skipping brute force.")
 | 
			
		||||
            euscan.output.einfo(
 | 
			
		||||
                "Broken server detected ! Skipping brute force."
 | 
			
		||||
            )
 | 
			
		||||
            return []
 | 
			
		||||
 | 
			
		||||
        if CONFIG["brute-force-recursive"]:
 | 
			
		||||
            for v in helpers.gen_versions(list(components), CONFIG["brute-force"]):
 | 
			
		||||
            for v in helpers.gen_versions(list(components),
 | 
			
		||||
                                          CONFIG["brute-force"]):
 | 
			
		||||
                if v not in versions and tuple(v) not in done:
 | 
			
		||||
                    versions.append(v)
 | 
			
		||||
 | 
			
		||||
@@ -200,5 +214,6 @@ def brute_force(cpv, url):
 | 
			
		||||
 | 
			
		||||
    return result
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def can_handle(cpv, url):
 | 
			
		||||
    return True
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,12 @@
 | 
			
		||||
from euscan.handlers import generic
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def can_handle(cpv, url):
 | 
			
		||||
    if url.startswith('mirror://kde/'):
 | 
			
		||||
        return True
 | 
			
		||||
    return False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def clean_results(results):
 | 
			
		||||
    ret = []
 | 
			
		||||
 | 
			
		||||
@@ -15,6 +17,7 @@ def clean_results(results):
 | 
			
		||||
 | 
			
		||||
    return ret
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def scan(cpv, url):
 | 
			
		||||
    results = generic.scan(cpv, url)
 | 
			
		||||
 | 
			
		||||
@@ -24,6 +27,7 @@ def scan(cpv, url):
 | 
			
		||||
 | 
			
		||||
    return clean_results(results)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def brute_force(cpv, url):
 | 
			
		||||
    results = generic.brute_force(cpv, url)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ import xml.dom.minidom
 | 
			
		||||
from euscan import helpers
 | 
			
		||||
import euscan
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def can_handle(cpv, url):
 | 
			
		||||
    if url.startswith('http://pear.php.net/get/'):
 | 
			
		||||
        return True
 | 
			
		||||
@@ -13,6 +14,7 @@ def can_handle(cpv, url):
 | 
			
		||||
        return True
 | 
			
		||||
    return False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def guess_package_and_channel(cp, url):
 | 
			
		||||
    match = re.search('http://(.*)/get/(.*)-(.*).tgz', url)
 | 
			
		||||
 | 
			
		||||
@@ -24,6 +26,7 @@ def guess_package_and_channel(cp, url):
 | 
			
		||||
 | 
			
		||||
    return pkg, host
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def scan(cpv, url):
 | 
			
		||||
    cp, ver, rev = portage.pkgsplit(cpv)
 | 
			
		||||
    pkg, channel = guess_package_and_channel(cp, url)
 | 
			
		||||
@@ -61,9 +64,10 @@ def scan(cpv, url):
 | 
			
		||||
        if url == orig_url:
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
        ret.append(( url, pv ))
 | 
			
		||||
        ret.append((url, pv))
 | 
			
		||||
 | 
			
		||||
    return ret
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def brute_force(cpv, url):
 | 
			
		||||
    return []
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
import xmlrpclib
 | 
			
		||||
import pprint
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
import portage
 | 
			
		||||
@@ -7,9 +6,11 @@ import portage
 | 
			
		||||
from euscan import helpers
 | 
			
		||||
import euscan
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def can_handle(cpv, url):
 | 
			
		||||
    return url.startswith('mirror://pypi/')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def guess_package(cp, url):
 | 
			
		||||
    match = re.search('mirror://pypi/\w+/(.*)/.*', url)
 | 
			
		||||
    if match:
 | 
			
		||||
@@ -19,10 +20,10 @@ def guess_package(cp, url):
 | 
			
		||||
 | 
			
		||||
    return pkg
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def scan(cpv, url):
 | 
			
		||||
    'http://wiki.python.org/moin/PyPiXmlRpc'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    package = guess_package(cpv, url)
 | 
			
		||||
 | 
			
		||||
    euscan.output.einfo("Using PyPi XMLRPC: " + package)
 | 
			
		||||
@@ -44,10 +45,11 @@ def scan(cpv, url):
 | 
			
		||||
        if helpers.version_filtered(cp, ver, pv):
 | 
			
		||||
            continue
 | 
			
		||||
        urls = client.release_urls(package, up_pv)
 | 
			
		||||
        urls = " ".join([ infos['url'] for infos in urls ])
 | 
			
		||||
        ret.append(( urls, pv ))
 | 
			
		||||
        urls = " ".join([infos['url'] for infos in urls])
 | 
			
		||||
        ret.append((urls, pv))
 | 
			
		||||
 | 
			
		||||
    return ret
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def brute_force(cpv, url):
 | 
			
		||||
    return []
 | 
			
		||||
 
 | 
			
		||||
@@ -6,9 +6,11 @@ import urllib2
 | 
			
		||||
from euscan import helpers
 | 
			
		||||
import euscan
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def can_handle(cpv, url):
 | 
			
		||||
    return url.startswith('mirror://rubygems/')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def guess_gem(cpv, url):
 | 
			
		||||
    match = re.search('mirror://rubygems/(.*).gem', url)
 | 
			
		||||
    if match:
 | 
			
		||||
@@ -23,12 +25,14 @@ def guess_gem(cpv, url):
 | 
			
		||||
 | 
			
		||||
    return pkg
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def scan(cpv, url):
 | 
			
		||||
    'http://guides.rubygems.org/rubygems-org-api/#gemversion'
 | 
			
		||||
 | 
			
		||||
    gem = guess_gem(cpv, url)
 | 
			
		||||
    if not gem:
 | 
			
		||||
        euscan.output.eerror("Can't guess gem name using %s and %s" % (cpv, url))
 | 
			
		||||
        euscan.output.eerror("Can't guess gem name using %s and %s" % \
 | 
			
		||||
            (cpv, url))
 | 
			
		||||
        return []
 | 
			
		||||
 | 
			
		||||
    url = 'http://rubygems.org/api/v1/versions/%s.json' % gem
 | 
			
		||||
@@ -61,9 +65,10 @@ def scan(cpv, url):
 | 
			
		||||
        if helpers.version_filtered(cp, ver, pv):
 | 
			
		||||
            continue
 | 
			
		||||
        url = 'http://rubygems.org/gems/%s-%s.gem' % (gem, up_pv)
 | 
			
		||||
        ret.append(( url, pv ))
 | 
			
		||||
        ret.append((url, pv))
 | 
			
		||||
 | 
			
		||||
    return ret
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def brute_force(cpv, url):
 | 
			
		||||
    return []
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@ from portage import dep
 | 
			
		||||
from euscan import CONFIG, BLACKLIST_VERSIONS, ROBOTS_TXT_BLACKLIST_DOMAINS
 | 
			
		||||
import euscan
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def htop_vercmp(a, b):
 | 
			
		||||
    def fixver(v):
 | 
			
		||||
        if v in ['0.11', '0.12', '0.13']:
 | 
			
		||||
@@ -27,12 +28,13 @@ def htop_vercmp(a, b):
 | 
			
		||||
    return simple_vercmp(fixver(a), fixver(b))
 | 
			
		||||
 | 
			
		||||
VERSION_CMP_PACKAGE_QUIRKS = {
 | 
			
		||||
    'sys-process/htop' : htop_vercmp
 | 
			
		||||
    'sys-process/htop': htop_vercmp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_v_end = '((-|_)(pre|p|beta|b|alpha|a|rc|r)\d*)'
 | 
			
		||||
_v = r'((\d+)((\.\d+)*)([a-zA-Z]*?)(' + _v_end + '*))'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Stolen from g-pypi
 | 
			
		||||
def gentoo_mangle_version(up_pv):
 | 
			
		||||
    """Convert PV to MY_PV if needed
 | 
			
		||||
@@ -146,6 +148,7 @@ def gentoo_mangle_version(up_pv):
 | 
			
		||||
 | 
			
		||||
    return pv
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def cast_int_components(version):
 | 
			
		||||
    for i, obj in enumerate(version):
 | 
			
		||||
        try:
 | 
			
		||||
@@ -154,6 +157,7 @@ def cast_int_components(version):
 | 
			
		||||
            pass
 | 
			
		||||
    return version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def simple_vercmp(a, b):
 | 
			
		||||
    if a == b:
 | 
			
		||||
        return 0
 | 
			
		||||
@@ -173,11 +177,13 @@ def simple_vercmp(a, b):
 | 
			
		||||
    else:
 | 
			
		||||
        return 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def vercmp(package, a, b):
 | 
			
		||||
    if package in VERSION_CMP_PACKAGE_QUIRKS:
 | 
			
		||||
        return VERSION_CMP_PACKAGE_QUIRKS[package](a, b)
 | 
			
		||||
    return simple_vercmp(a, b)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def version_is_nightly(a, b):
 | 
			
		||||
    a = pkg_resources.parse_version(a)
 | 
			
		||||
    b = pkg_resources.parse_version(b)
 | 
			
		||||
@@ -188,6 +194,7 @@ def version_is_nightly(a, b):
 | 
			
		||||
            return True
 | 
			
		||||
    return False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def version_blacklisted(cp, version):
 | 
			
		||||
    rule = None
 | 
			
		||||
    cpv = '%s-%s' % (cp, version)
 | 
			
		||||
@@ -205,6 +212,7 @@ def version_blacklisted(cp, version):
 | 
			
		||||
        euscan.output.einfo("%s is blacklisted by rule %s" % (cpv, bv))
 | 
			
		||||
    return rule is not None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def version_change_end_sep(version):
 | 
			
		||||
    match = re.match('.*' + _v_end, version)
 | 
			
		||||
    if not match:
 | 
			
		||||
@@ -218,6 +226,7 @@ def version_change_end_sep(version):
 | 
			
		||||
        return None
 | 
			
		||||
    return version.replace(end, newend)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def version_filtered(cp, base, version, vercmp=vercmp):
 | 
			
		||||
    if vercmp(cp, base, version) >= 0:
 | 
			
		||||
        return True
 | 
			
		||||
@@ -230,6 +239,7 @@ def version_filtered(cp, base, version, vercmp=vercmp):
 | 
			
		||||
 | 
			
		||||
    return False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def generate_templates_vars(version):
 | 
			
		||||
    ret = []
 | 
			
		||||
 | 
			
		||||
@@ -246,6 +256,7 @@ def generate_templates_vars(version):
 | 
			
		||||
    ret.reverse()
 | 
			
		||||
    return ret
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def template_from_url(url, version):
 | 
			
		||||
    prefix, chunks = url.split('://')
 | 
			
		||||
    chunks = chunks.split('/')
 | 
			
		||||
@@ -261,6 +272,7 @@ def template_from_url(url, version):
 | 
			
		||||
 | 
			
		||||
    return prefix + "://" + "/".join(chunks)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def url_from_template(url, version):
 | 
			
		||||
    components = split_version(version)
 | 
			
		||||
 | 
			
		||||
@@ -270,6 +282,7 @@ def url_from_template(url, version):
 | 
			
		||||
 | 
			
		||||
    return url
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Stolen from distutils.LooseVersion
 | 
			
		||||
# Used for brute force to increment the version
 | 
			
		||||
def split_version(version):
 | 
			
		||||
@@ -282,6 +295,7 @@ def split_version(version):
 | 
			
		||||
            pass
 | 
			
		||||
    return components
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def join_version(components):
 | 
			
		||||
    version = ""
 | 
			
		||||
    for i in range(len(components)):
 | 
			
		||||
@@ -292,6 +306,7 @@ def join_version(components):
 | 
			
		||||
            version += "."
 | 
			
		||||
    return version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def increment_version(components, level):
 | 
			
		||||
    n = len(components)
 | 
			
		||||
 | 
			
		||||
@@ -307,6 +322,7 @@ def increment_version(components, level):
 | 
			
		||||
 | 
			
		||||
    return components
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def gen_versions(components, level):
 | 
			
		||||
    n = len(components)
 | 
			
		||||
    depth = level
 | 
			
		||||
@@ -325,6 +341,7 @@ def gen_versions(components, level):
 | 
			
		||||
 | 
			
		||||
    return versions
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def timeout_for_url(url):
 | 
			
		||||
    if 'sourceforge' in url:
 | 
			
		||||
        timeout = 15
 | 
			
		||||
@@ -332,13 +349,16 @@ def timeout_for_url(url):
 | 
			
		||||
        timeout = 5
 | 
			
		||||
    return timeout
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class HeadRequest(urllib2.Request):
 | 
			
		||||
    def get_method(self):
 | 
			
		||||
        return "HEAD"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
""" RobotParser cache """
 | 
			
		||||
rpcache = {}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def urlallowed(url):
 | 
			
		||||
    if CONFIG['skip-robots-txt']:
 | 
			
		||||
        return True
 | 
			
		||||
@@ -359,7 +379,7 @@ def urlallowed(url):
 | 
			
		||||
    baseurl = '%s://%s' % (protocol, domain)
 | 
			
		||||
    robotsurl = urlparse.urljoin(baseurl, 'robots.txt')
 | 
			
		||||
 | 
			
		||||
    if rpcache.has_key(baseurl):
 | 
			
		||||
    if baseurl in rpcache:
 | 
			
		||||
        rp = rpcache[baseurl]
 | 
			
		||||
    else:
 | 
			
		||||
        from socket import setdefaulttimeout, getdefaulttimeout
 | 
			
		||||
@@ -379,6 +399,7 @@ def urlallowed(url):
 | 
			
		||||
 | 
			
		||||
    return rp.can_fetch(CONFIG['user-agent'], url) if rp else False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def urlopen(url, timeout=None, verb="GET"):
 | 
			
		||||
    if not urlallowed(url):
 | 
			
		||||
        euscan.output.einfo("Url '%s' blocked by robots.txt" % url)
 | 
			
		||||
@@ -410,6 +431,7 @@ def urlopen(url, timeout=None, verb="GET"):
 | 
			
		||||
 | 
			
		||||
    return opener.open(request, None, timeout)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def tryurl(fileurl, template):
 | 
			
		||||
    result = True
 | 
			
		||||
 | 
			
		||||
@@ -429,13 +451,16 @@ def tryurl(fileurl, template):
 | 
			
		||||
 | 
			
		||||
        headers = fp.info()
 | 
			
		||||
 | 
			
		||||
        if 'Content-disposition' in headers and basename not in headers['Content-disposition']:
 | 
			
		||||
        if 'Content-disposition' in headers and \
 | 
			
		||||
           basename not in headers['Content-disposition']:
 | 
			
		||||
            result = None
 | 
			
		||||
        elif 'Content-Length' in headers and headers['Content-Length'] == '0':
 | 
			
		||||
            result = None
 | 
			
		||||
        elif 'Content-Type' in headers and 'text/html' in headers['Content-Type']:
 | 
			
		||||
        elif 'Content-Type' in headers and \
 | 
			
		||||
             'text/html' in headers['Content-Type']:
 | 
			
		||||
            result = None
 | 
			
		||||
        elif 'Content-Type' in headers and 'application/x-httpd-php' in headers['Content-Type']:
 | 
			
		||||
        elif 'Content-Type' in headers and \
 | 
			
		||||
             'application/x-httpd-php' in headers['Content-Type']:
 | 
			
		||||
            result = None
 | 
			
		||||
        elif fp.geturl() != fileurl:
 | 
			
		||||
            regex = regex_from_template(template)
 | 
			
		||||
@@ -443,10 +468,10 @@ def tryurl(fileurl, template):
 | 
			
		||||
            basename2 = os.path.basename(fp.geturl())
 | 
			
		||||
 | 
			
		||||
            # Redirect to another (earlier?) version
 | 
			
		||||
            if basename != basename2 and (re.match(regex, fp.geturl()) or re.match(baseregex, basename2)):
 | 
			
		||||
            if basename != basename2 and (re.match(regex, fp.geturl()) or \
 | 
			
		||||
               re.match(baseregex, basename2)):
 | 
			
		||||
                result = None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if result:
 | 
			
		||||
                result = (fp.geturl(), fp.info())
 | 
			
		||||
 | 
			
		||||
@@ -459,6 +484,7 @@ def tryurl(fileurl, template):
 | 
			
		||||
 | 
			
		||||
    return result
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def regex_from_template(template):
 | 
			
		||||
    # Escape
 | 
			
		||||
    template = re.escape(template)
 | 
			
		||||
@@ -483,6 +509,7 @@ def regex_from_template(template):
 | 
			
		||||
    template = template + r'/?$'
 | 
			
		||||
    return template
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def basedir_from_template(template):
 | 
			
		||||
    idx = template.find('${')
 | 
			
		||||
    if idx == -1:
 | 
			
		||||
@@ -494,6 +521,7 @@ def basedir_from_template(template):
 | 
			
		||||
 | 
			
		||||
    return template[0:idx]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def generate_scan_paths(url):
 | 
			
		||||
    prefix, chunks = url.split('://')
 | 
			
		||||
    chunks = chunks.split('/')
 | 
			
		||||
@@ -511,6 +539,7 @@ def generate_scan_paths(url):
 | 
			
		||||
 | 
			
		||||
    return steps
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def parse_mirror(uri):
 | 
			
		||||
    from random import shuffle
 | 
			
		||||
 | 
			
		||||
@@ -526,7 +555,7 @@ def parse_mirror(uri):
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    mirrorname = uri[9:eidx]
 | 
			
		||||
    path = uri[eidx+1:]
 | 
			
		||||
    path = uri[eidx + 1:]
 | 
			
		||||
 | 
			
		||||
    if mirrorname in mirrors:
 | 
			
		||||
        mirrors = mirrors[mirrorname]
 | 
			
		||||
 
 | 
			
		||||
@@ -4,10 +4,8 @@ import sys
 | 
			
		||||
import portage
 | 
			
		||||
 | 
			
		||||
from portage.dbapi import porttree
 | 
			
		||||
from portage.output import white, yellow, turquoise, green, teal, red, EOutput
 | 
			
		||||
 | 
			
		||||
import gentoolkit.pprinter as pp
 | 
			
		||||
from gentoolkit import errors
 | 
			
		||||
from gentoolkit.query import Query
 | 
			
		||||
from gentoolkit.eclean.search import (port_settings)
 | 
			
		||||
 | 
			
		||||
@@ -17,6 +15,7 @@ from euscan import helpers
 | 
			
		||||
 | 
			
		||||
import euscan
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def filter_versions(cp, versions):
 | 
			
		||||
    filtered = {}
 | 
			
		||||
 | 
			
		||||
@@ -32,7 +31,8 @@ def filter_versions(cp, versions):
 | 
			
		||||
 | 
			
		||||
        filtered[version] = url
 | 
			
		||||
 | 
			
		||||
    return [ (cp, filtered[version], version) for version in filtered ]
 | 
			
		||||
    return [(cp, filtered[version], version) for version in filtered]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def scan_upstream_urls(cpv, urls):
 | 
			
		||||
    versions = []
 | 
			
		||||
@@ -72,7 +72,9 @@ def scan_upstream(query):
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    if not matches:
 | 
			
		||||
        sys.stderr.write(pp.warn("No package matching '%s'" % pp.pkgquery(query)))
 | 
			
		||||
        sys.stderr.write(
 | 
			
		||||
            pp.warn("No package matching '%s'" % pp.pkgquery(query))
 | 
			
		||||
        )
 | 
			
		||||
        return []
 | 
			
		||||
 | 
			
		||||
    matches = sorted(matches)
 | 
			
		||||
@@ -87,11 +89,15 @@ def scan_upstream(query):
 | 
			
		||||
        return []
 | 
			
		||||
 | 
			
		||||
    if pkg.cp in BLACKLIST_PACKAGES:
 | 
			
		||||
        sys.stderr.write(pp.warn("Package '%s' is blacklisted" % pp.pkgquery(pkg.cp)))
 | 
			
		||||
        sys.stderr.write(
 | 
			
		||||
            pp.warn("Package '%s' is blacklisted" % pp.pkgquery(pkg.cp))
 | 
			
		||||
        )
 | 
			
		||||
        return []
 | 
			
		||||
 | 
			
		||||
    if not CONFIG['quiet']:
 | 
			
		||||
        pp.uprint(" * %s [%s]" % (pp.cpv(pkg.cpv), pp.section(pkg.repo_name())))
 | 
			
		||||
        pp.uprint(
 | 
			
		||||
            " * %s [%s]" % (pp.cpv(pkg.cpv), pp.section(pkg.repo_name()))
 | 
			
		||||
        )
 | 
			
		||||
        pp.uprint()
 | 
			
		||||
 | 
			
		||||
        ebuild_path = pkg.ebuild_path()
 | 
			
		||||
@@ -104,8 +110,8 @@ def scan_upstream(query):
 | 
			
		||||
 | 
			
		||||
    cpv = pkg.cpv
 | 
			
		||||
    metadata = {
 | 
			
		||||
        "EAPI"    : port_settings["EAPI"],
 | 
			
		||||
        "SRC_URI" : pkg.environment("SRC_URI", False),
 | 
			
		||||
        "EAPI": port_settings["EAPI"],
 | 
			
		||||
        "SRC_URI": pkg.environment("SRC_URI", False),
 | 
			
		||||
    }
 | 
			
		||||
    use = frozenset(port_settings["PORTAGE_USE"].split())
 | 
			
		||||
    try:
 | 
			
		||||
@@ -113,7 +119,9 @@ def scan_upstream(query):
 | 
			
		||||
        aalist = porttree._parse_uri_map(cpv, metadata)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        sys.stderr.write(pp.warn("%s\n" % str(e)))
 | 
			
		||||
        sys.stderr.write(pp.warn("Invalid SRC_URI for '%s'" % pp.pkgquery(cpv)))
 | 
			
		||||
        sys.stderr.write(
 | 
			
		||||
            pp.warn("Invalid SRC_URI for '%s'" % pp.pkgquery(cpv))
 | 
			
		||||
        )
 | 
			
		||||
        return []
 | 
			
		||||
 | 
			
		||||
    if "mirror" in portage.settings.features:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user