From 6407efa14f149743b8cea6a0ea454427882e4265 Mon Sep 17 00:00:00 2001 From: volpino Date: Mon, 2 Jul 2012 17:44:55 +0200 Subject: [PATCH] euscan: naive implementation of --mirror Signed-off-by: volpino --- bin/euscan | 12 ++++++++---- pym/euscan/__init__.py | 3 ++- pym/euscan/out.py | 42 +++++++++++++++++++++++++++++++----------- 3 files changed, 41 insertions(+), 16 deletions(-) diff --git a/bin/euscan b/bin/euscan index 963193f..088688e 100755 --- a/bin/euscan +++ b/bin/euscan @@ -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=") + - " - define the output " + yellow("") + - " (available: json)", file=out) + " - define the output " + yellow("") + + " (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=" diff --git a/pym/euscan/__init__.py b/pym/euscan/__init__.py index 158324e..0f0ed9c 100644 --- a/pym/euscan/__init__.py +++ b/pym/euscan/__init__.py @@ -20,7 +20,8 @@ CONFIG = { 'cache': False, 'format': None, 'indent': 2, - 'progress': False + 'progress': False, + 'mirror': False, } BLACKLIST_VERSIONS = [ diff --git a/pym/euscan/out.py b/pym/euscan/out.py index 8a260d3..956013e 100644 --- a/pym/euscan/out.py +++ b/pym/euscan/out.py @@ -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']: