euscan: naive implementation of --mirror

Signed-off-by: volpino <fox91@anche.no>
This commit is contained in:
volpino 2012-07-02 17:44:55 +02:00
parent 71f71c5b58
commit 6407efa14f
3 changed files with 41 additions and 16 deletions

View File

@ -121,10 +121,12 @@ def print_usage(_error=None, help=None):
" " * 29 + "bigger levels will generate more versions numbers\n" +
" " * 29 + "0 means disabled", file=out)
print(yellow(" -f, --format=<format>") +
" - define the output " + yellow("<format>") +
" (available: json)", file=out)
" - define the output " + yellow("<format>") +
" (available: json)", file=out)
print(yellow(" -p, --progress") +
" - display a progress bar", file=out)
" - display a progress bar", file=out)
print(yellow(" -m, --mirror") +
" - use mirror:// urls", file=out)
print(file=out)
if _error in ('packages',) or help:
@ -178,6 +180,8 @@ def parse_args():
pp.output.nocolor()
elif o in ("-p", "--progress"):
CONFIG['progress'] = isatty
elif o in ("-m", "--mirror"):
CONFIG['mirror'] = True
else:
return_code = False
@ -185,7 +189,7 @@ def parse_args():
# here are the different allowed command line options (getopt args)
getopt_options = {'short': {}, 'long': {}}
getopt_options['short']['global'] = "hVCqv1bf:p"
getopt_options['short']['global'] = "hVCqv1bf:pm"
getopt_options['long']['global'] = [
"help", "version", "nocolor", "quiet", "verbose", "oneshot",
"brute-force=", "format="

View File

@ -20,7 +20,8 @@ CONFIG = {
'cache': False,
'format': None,
'indent': 2,
'progress': False
'progress': False,
'mirror': False,
}
BLACKLIST_VERSIONS = [

View File

@ -58,6 +58,28 @@ def progress_bar():
yield None
def clean_colors(string):
if type(string) is str:
string = re.sub("\033\[[0-9;]+m", "", string)
string = re.sub(r"\\u001b\[[0-9;]+m", "", string)
string = re.sub(r"\x1b\[[0-9;]+m", "", string)
return string
def to_mirror(url):
mirrors = portage.settings.thirdpartymirrors()
for mirror_name in mirrors:
for mirror_url in mirrors[mirror_name]:
if url.startswith(mirror_url):
url_part = url.split(mirror_url)[1]
return "mirror://%s%s%s" % (
mirror_name,
"" if url_part.startswith("/") else "/",
url_part
)
return url
class EOutputMem(EOutput):
"""
Override of EOutput, allows to specify an output file for writes
@ -73,14 +95,6 @@ class EOutputMem(EOutput):
super(EOutputMem, self)._write(self.out, msg)
def clean_colors(string):
if type(string) is str:
string = re.sub("\033\[[0-9;]+m", "", string)
string = re.sub(r"\\u001b\[[0-9;]+m", "", string)
string = re.sub(r"\x1b\[[0-9;]+m", "", string)
return string
class EuscanOutput(object):
"""
Class that handles output for euscan
@ -131,14 +145,20 @@ class EuscanOutput(object):
else:
raise TypeError("Invalid output format")
def result(self, cp, version, url, handler, confidence):
def result(self, cp, version, urls, handler, confidence):
from euscan.helpers import get_version_type
if self.config['format']:
_curr = self.queries[self.current_query]
_curr["result"].append(
{"version": version, "urls": [url], "handler": handler,
"confidence": confidence, "type": get_version_type(version)}
{
"version": version,
"urls": [to_mirror(url) if self.config['mirror'] else url
for url in urls.split()],
"handler": handler,
"confidence": confidence,
"type": get_version_type(version)
}
)
else:
if not self.config['quiet']: