From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id DEB861393EA for ; Mon, 24 Mar 2014 07:17:45 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 72DC4E0C2C; Mon, 24 Mar 2014 07:17:45 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id D0C81E0C2C for ; Mon, 24 Mar 2014 07:17:44 +0000 (UTC) Received: from spoonbill.gentoo.org (spoonbill.gentoo.org [81.93.255.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id D7EDA33F133 for ; Mon, 24 Mar 2014 07:17:43 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by spoonbill.gentoo.org (Postfix) with ESMTP id F0D63188E8 for ; Mon, 24 Mar 2014 07:17:41 +0000 (UTC) From: "Slawek Lis" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Slawek Lis" Message-ID: <1395642773.39c99972049624c2504358c8455680da6acaee08.slis@gentoo> Subject: [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/ X-VCS-Repository: proj/gentoolkit X-VCS-Files: pym/gentoolkit/revdep_rebuild/collect.py pym/gentoolkit/revdep_rebuild/rebuild.py pym/gentoolkit/revdep_rebuild/settings.py X-VCS-Directories: pym/gentoolkit/revdep_rebuild/ X-VCS-Committer: slis X-VCS-Committer-Name: Slawek Lis X-VCS-Revision: 39c99972049624c2504358c8455680da6acaee08 X-VCS-Branch: gentoolkit Date: Mon, 24 Mar 2014 07:17:41 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 7c293363-55ed-4712-9e2e-e380d1c87ed8 X-Archives-Hash: 52676f0902948b234f63739761313268 commit: 39c99972049624c2504358c8455680da6acaee08 Author: Slawek Lis gentoo org> AuthorDate: Mon Mar 24 06:32:53 2014 +0000 Commit: Slawek Lis gentoo org> CommitDate: Mon Mar 24 06:32:53 2014 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=39c99972 Moved option and config parsing into settings module --- pym/gentoolkit/revdep_rebuild/collect.py | 34 +-------- pym/gentoolkit/revdep_rebuild/rebuild.py | 83 +------------------- pym/gentoolkit/revdep_rebuild/settings.py | 121 ++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+), 115 deletions(-) diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py index 039dc76..2a431cb 100644 --- a/pym/gentoolkit/revdep_rebuild/collect.py +++ b/pym/gentoolkit/revdep_rebuild/collect.py @@ -12,6 +12,7 @@ import sys import portage from portage.output import blue, yellow +from .settings import parse_revdep_config if sys.hexversion < 0x3000000: @@ -87,39 +88,6 @@ def prepare_search_dirs(logger, settings): return (bin_dirs, lib_dirs) -def parse_revdep_config(revdep_confdir): - ''' Parses all files under and returns - tuple of: (masked_dirs, masked_files, search_dirs)''' - - search_dirs = set() - masked_dirs = set() - masked_files = set() - - for _file in os.listdir(revdep_confdir): - for line in open(os.path.join(revdep_confdir, _file)): - line = line.strip() - #first check for comment, we do not want to regex all lines - if not line.startswith('#'): - match = re.match('LD_LIBRARY_MASK=\\"([^"]+)\\"', line) - if match is not None: - masks = match.group(1).split(' ') - masked_files.update(masks) - continue - match = re.match('SEARCH_DIRS_MASK=\\"([^"]+)\\"', line) - if match is not None: - searches = match.group(1).split(' ') - for search in searches: - masked_dirs.update(glob.glob(search)) - continue - match = re.match('SEARCH_DIRS=\\"([^"]+)\\"', line) - if match is not None: - searches = match.group(1).split() - for search in searches: - search_dirs.update(glob.glob(search)) - continue - - return (masked_dirs, masked_files, search_dirs) - def collect_libraries_from_dir(dirs, mask, logger): ''' Collects all libraries from specified list of directories. diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py index 314fb1f..9d5bf9b 100644 --- a/pym/gentoolkit/revdep_rebuild/rebuild.py +++ b/pym/gentoolkit/revdep_rebuild/rebuild.py @@ -18,7 +18,6 @@ from __future__ import print_function import os import sys -import getopt import logging import subprocess import time @@ -30,7 +29,7 @@ from portage.output import bold, red, blue, yellow, nocolor from .analyse import analyse from .cache import check_temp_files, read_cache from .assign import get_slotted_cps -from .settings import DEFAULTS +from .settings import DEFAULTS, parse_options from .stuff import filter_masked from . import __version__ @@ -43,39 +42,6 @@ __productname__ = "revdep-ng" # functions -def print_usage(): - """Outputs the help message""" - print( APP_NAME + ': (' + VERSION +')') - print() - print('This is free software; see the source for copying conditions.') - print() - print('Usage: ' + APP_NAME + ' [OPTIONS] [--] [EMERGE_OPTIONS]') - print() - print('Broken reverse dependency rebuilder, python implementation.') - print() - print('Available options:') - print(''' - -C, --nocolor Turn off colored output - -d, --debug Print debug informations - -e, --exact Emerge based on exact package version - -h, --help Print this usage - -i, --ignore Ignore temporary files from previous runs - (also won't create any) - -L, --library NAME Unconditionally emerge existing packages that use - --library=NAME the library with NAME. NAME can be a full or partial - library name - -l, --no-ld-path Do not set LD_LIBRARY_PATH - -o, --no-order Do not check the build order - (Saves time, but may cause breakage.) - -p, --pretend Do a trial run without actually emerging anything - (also passed to emerge command) - -q, --quiet Be less verbose (also passed to emerge command) - -v, --verbose Be more verbose (also passed to emerge command) -''') - print( 'Calls emerge, options after -- are ignored by ' + APP_NAME) - print('and passed directly to emerge.') - - def init_logger(settings): """Creates and iitializes our logger according to the settings""" logger = logging.getLogger() @@ -94,53 +60,6 @@ def init_logger(settings): return logger -def parse_options(): - """Parses the command line options an sets settings accordingly""" - - # TODO: Verify: options: no-ld-path, no-order, no-progress - #are not appliable - - settings = DEFAULTS.copy() - try: - opts, args = getopt.getopt(sys.argv[1:], - 'dehiklopqvCL:P', - ['nocolor', 'debug', 'exact', 'help', 'ignore', - 'keep-temp', 'library=', 'no-ld-path', 'no-order', - 'pretend', 'no-pretend', 'no-progress', 'quiet', 'verbose']) - - for key, val in opts: - if key in ('-h', '--help'): - print_usage() - sys.exit(0) - elif key in ('-q', '--quiet'): - settings['quiet'] = True - settings['VERBOSITY'] = 0 - elif key in ('-v', '--verbose'): - settings['VERBOSITY'] = 2 - elif key in ('-d', '--debug'): - settings['debug'] = True - settings['VERBOSITY'] = 3 - elif key in ('-p', '--pretend'): - settings['PRETEND'] = True - elif key == '--no-pretend': - settings['NO_PRETEND'] = True - elif key in ('-e', '--exact'): - settings['EXACT'] = True - elif key in ('-C', '--nocolor', '--no-color'): - settings['nocolor'] = True - elif key in ('-L', '--library', '--library='): - settings['library'].update(val.split(',')) - elif key in ('-i', '--ignore'): - settings['USE_TMP_FILES'] = False - - settings['pass_through_options'] = " " + " ".join(args) - except getopt.GetoptError: - #logging.info(red('Unrecognized option\n')) - print(red('Unrecognized option\n')) - print_usage() - sys.exit(2) - - return settings def rebuild(logger, assigned, settings): diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py index 2d6046f..057147c 100644 --- a/pym/gentoolkit/revdep_rebuild/settings.py +++ b/pym/gentoolkit/revdep_rebuild/settings.py @@ -4,8 +4,11 @@ from __future__ import print_function +import getopt import os import sys +import re +import glob import portage @@ -43,3 +46,121 @@ DEFAULTS = { 'stdin': sys.stdin, 'stderr': sys.stderr } + + +def print_usage(): + """Outputs the help message""" + print( APP_NAME + ': (' + VERSION +')') + print() + print('This is free software; see the source for copying conditions.') + print() + print('Usage: ' + APP_NAME + ' [OPTIONS] [--] [EMERGE_OPTIONS]') + print() + print('Broken reverse dependency rebuilder, python implementation.') + print() + print('Available options:') + print(''' + -C, --nocolor Turn off colored output + -d, --debug Print debug informations + -e, --exact Emerge based on exact package version + -h, --help Print this usage + -i, --ignore Ignore temporary files from previous runs + (also won't create any) + -L, --library NAME Unconditionally emerge existing packages that use + --library=NAME the library with NAME. NAME can be a full or partial + library name + -l, --no-ld-path Do not set LD_LIBRARY_PATH + -o, --no-order Do not check the build order + (Saves time, but may cause breakage.) + -p, --pretend Do a trial run without actually emerging anything + (also passed to emerge command) + -q, --quiet Be less verbose (also passed to emerge command) + -v, --verbose Be more verbose (also passed to emerge command) +''') + print( 'Calls emerge, options after -- are ignored by ' + APP_NAME) + print('and passed directly to emerge.') + + +def parse_options(): + """Parses the command line options an sets settings accordingly""" + + # TODO: Verify: options: no-ld-path, no-order, no-progress + #are not appliable + + settings = DEFAULTS.copy() + try: + opts, args = getopt.getopt(sys.argv[1:], + 'dehiklopqvCL:P', + ['nocolor', 'debug', 'exact', 'help', 'ignore', + 'keep-temp', 'library=', 'no-ld-path', 'no-order', + 'pretend', 'no-pretend', 'no-progress', 'quiet', 'verbose']) + + for key, val in opts: + if key in ('-h', '--help'): + print_usage() + sys.exit(0) + elif key in ('-q', '--quiet'): + settings['quiet'] = True + settings['VERBOSITY'] = 0 + elif key in ('-v', '--verbose'): + settings['VERBOSITY'] = 2 + elif key in ('-d', '--debug'): + settings['debug'] = True + settings['VERBOSITY'] = 3 + elif key in ('-p', '--pretend'): + settings['PRETEND'] = True + elif key == '--no-pretend': + settings['NO_PRETEND'] = True + elif key in ('-e', '--exact'): + settings['EXACT'] = True + elif key in ('-C', '--nocolor', '--no-color'): + settings['nocolor'] = True + elif key in ('-L', '--library', '--library='): + settings['library'].update(val.split(',')) + elif key in ('-i', '--ignore'): + settings['USE_TMP_FILES'] = False + + settings['pass_through_options'] = " " + " ".join(args) + except getopt.GetoptError: + #logging.info(red('Unrecognized option\n')) + print(red('Unrecognized option\n')) + print_usage() + sys.exit(2) + + return settings + + +def parse_revdep_config(revdep_confdir): + ''' Parses all files under and returns + tuple of: (masked_dirs, masked_files, search_dirs)''' + + search_dirs = set() + masked_dirs = set() + masked_files = set() + + for _file in os.listdir(revdep_confdir): + for line in open(os.path.join(revdep_confdir, _file)): + line = line.strip() + #first check for comment, we do not want to regex all lines + if not line.startswith('#'): + match = re.match('LD_LIBRARY_MASK=\\"([^"]+)\\"', line) + if match is not None: + masks = match.group(1).split(' ') + masked_files.update(masks) + continue + match = re.match('SEARCH_DIRS_MASK=\\"([^"]+)\\"', line) + if match is not None: + searches = match.group(1).split(' ') + for search in searches: + masked_dirs.update(glob.glob(search)) + continue + match = re.match('SEARCH_DIRS=\\"([^"]+)\\"', line) + if match is not None: + searches = match.group(1).split() + for search in searches: + search_dirs.update(glob.glob(search)) + continue + + print (masked_dirs, masked_files, search_dirs) + return (masked_dirs, masked_files, search_dirs) +