summaryrefslogtreecommitdiff
path: root/pym
diff options
context:
space:
mode:
authorSlawek Lis <slis@gentoo.org>2014-03-24 07:32:53 +0100
committerSlawek Lis <slis@gentoo.org>2014-03-24 07:32:53 +0100
commit39c99972049624c2504358c8455680da6acaee08 (patch)
tree8683cd377e3e6621d3d42fd457358f6ad136b5ab /pym
parentae20dbd7f2ef2810d3150e870ece6f5b7278f676 (diff)
downloadgentoolkit-39c99972049624c2504358c8455680da6acaee08.tar.gz
Moved option and config parsing into settings module
Diffstat (limited to 'pym')
-rw-r--r--pym/gentoolkit/revdep_rebuild/collect.py34
-rw-r--r--pym/gentoolkit/revdep_rebuild/rebuild.py83
-rw-r--r--pym/gentoolkit/revdep_rebuild/settings.py121
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)
+