diff options
-rwxr-xr-x | bin/layman | 10 | ||||
-rwxr-xr-x | bin/layman-updater | 8 | ||||
-rw-r--r-- | layman/__init__.py | 5 | ||||
-rw-r--r-- | layman/argsparser.py | 7 | ||||
-rw-r--r-- | layman/config.py | 46 | ||||
-rw-r--r-- | layman/dbbase.py | 6 | ||||
-rw-r--r-- | layman/updater.py | 13 |
7 files changed, 67 insertions, 28 deletions
@@ -18,6 +18,8 @@ __version__ = "0.2" +import os + #=============================================================================== # # Dependencies @@ -33,5 +35,11 @@ from layman.cli import Main # #------------------------------------------------------------------------------- -main = Main(ArgsParser()) +root = None +try: + root = os.environ['ROOT'] +except KeyError: + pass + +main = Main(ArgsParser(root=root)) main() diff --git a/bin/layman-updater b/bin/layman-updater index ac9e841..51cf825 100755 --- a/bin/layman-updater +++ b/bin/layman-updater @@ -16,9 +16,15 @@ __version__ = "0.1" +import os from layman.updater import Main +root = None +try: + root = os.environ['ROOT'] +except KeyError: + pass -main = Main() +main = Main(root=root) main() diff --git a/layman/__init__.py b/layman/__init__.py index aa4a159..ce51804 100644 --- a/layman/__init__.py +++ b/layman/__init__.py @@ -22,7 +22,7 @@ class Layman(LaymanAPI): def __init__(self, stdout=sys.stdout, stdin=sys.stdin, stderr=sys.stderr, config=None, read_configfile=True, quiet=False, quietness=4, - verbose=False, nocolor=False, width=0 + verbose=False, nocolor=False, width=0, root=None ): """Input parameters are optional to override the defaults. sets up our LaymanAPI with defaults or passed in values @@ -39,7 +39,8 @@ class Layman(LaymanAPI): quietness=quietness, verbose=verbose, nocolor=nocolor, - width=width + width=width, + root=root ) LaymanAPI.__init__(self, self.config, report_errors=True, diff --git a/layman/argsparser.py b/layman/argsparser.py index 12898b8..3afc3ea 100644 --- a/layman/argsparser.py +++ b/layman/argsparser.py @@ -49,7 +49,9 @@ _USAGE = """ class ArgsParser(BareConfig): '''Handles the configuration and option parser.''' - def __init__(self, args=None, stdout=None, stdin=None, stderr=None): + def __init__(self, args=None, stdout=None, stdin=None, stderr=None, + root=None + ): ''' Creates and describes all possible polymeraZe options and creates a Message object. @@ -67,7 +69,8 @@ class ArgsParser(BareConfig): ['bzr_addopts', 'bzr_command', 'bzr_postsync', 'bzr_syncopts', 'cache', 'config', 'configdir', 'custom_news_pkg', 'cvs_addopts', 'cvs_command', 'cvs_postsync', 'cvs_syncopts', 'darcs_addopts', 'darcs_command', 'darcs_postsync', 'darcs_syncopts', 'g-common_command', 'g-common_generateopts', 'g-common_postsync', 'g-common_syncopts', 'git_addopts', 'git_command', 'git_email', 'git_postsync', 'git_syncopts', 'git_user', 'installed', 'local_list', 'make_conf', 'mercurial_addopts', 'mercurial_command', 'mercurial_postsync', 'mercurial_syncopts', 'news_reporter', 'nocheck', 'overlay_defs', 'overlays', 'proxy', 'quietness', 'rsync_command', 'rsync_postsync', 'rsync_syncopts', 'storage', 'svn_addopts', 'svn_command', 'svn_postsync', 'svn_syncopts', 't/f_options', 'tar_command', 'tar_postsync', 'umask', 'width'] ''' - BareConfig.__init__(self, stdout=stdout, stderr=stderr, stdin=stdin) + BareConfig.__init__(self, stdout=stdout, stderr=stderr, + stdin=stdin, root=root) if args == None: args = sys.argv diff --git a/layman/config.py b/layman/config.py index 56cb6f3..3c57497 100644 --- a/layman/config.py +++ b/layman/config.py @@ -31,9 +31,9 @@ import os import ConfigParser from layman.output import Message +from layman.utils import path - -def read_layman_config(config=None, defaults=None): +def read_layman_config(config=None, defaults=None, output=None): """reads the config file defined in defaults['config'] and updates the config @@ -41,7 +41,10 @@ def read_layman_config(config=None, defaults=None): @param defaults: dict @modifies config['MAIN']['overlays'] """ - config.read(defaults['config']) + read_files = config.read(defaults['config']) + if read_files == [] and output is not None: + output.warn("Warning: not able to parse config file: %s" + % defaults['config']) if config.get('MAIN', 'overlay_defs'): try: filelist = os.listdir(config.get('MAIN', 'overlay_defs')) @@ -70,7 +73,7 @@ class BareConfig(object): def __init__(self, output=None, stdout=None, stdin=None, stderr=None, config=None, read_configfile=False, quiet=False, quietness=4, - verbose=False, nocolor=False, width=0 + verbose=False, nocolor=False, width=0, root=None ): ''' Creates a bare config with defaults and a few output options. @@ -84,10 +87,15 @@ class BareConfig(object): True ''' + if root is None: + self.root = '' + else: + self.root = root + self._defaults = { - 'configdir': EPREFIX + '/etc/layman', + 'configdir': path([self.root, EPREFIX,'/etc/layman']), 'config' : '%(configdir)s/layman.cfg', - 'storage' : EPREFIX + '/var/lib/layman', + 'storage' : path([self.root, EPREFIX,'/var/lib/layman']), 'cache' : '%(storage)s/cache', 'local_list': '%(storage)s/overlays.xml', 'installed': '%(storage)s/installed.xml', @@ -100,15 +108,15 @@ class BareConfig(object): 'overlays' : 'http://www.gentoo.org/proj/en/overlays/repositories.xml', 'overlay_defs': '%(configdir)s/overlays', - 'bzr_command': EPREFIX +'/usr/bin/bzr', - 'cvs_command': EPREFIX +'/usr/bin/cvs', - 'darcs_command': EPREFIX +'/usr/bin/darcs', - 'git_command': EPREFIX +'/usr/bin/git', - 'g-common_command': EPREFIX +'/usr/bin/g-common', - 'mercurial_command': EPREFIX +'/usr/bin/hg', - 'rsync_command': EPREFIX +'/usr/bin/rsync', - 'svn_command': EPREFIX +'/usr/bin/svn', - 'tar_command': EPREFIX +'/bin/tar', + 'bzr_command': path([self.root, EPREFIX,'/usr/bin/bzr']), + 'cvs_command': path([self.root, EPREFIX,'/usr/bin/cvs']), + 'darcs_command': path([self.root, EPREFIX,'/usr/bin/darcs']), + 'git_command': path([self.root, EPREFIX,'/usr/bin/git']), + 'g-common_command': path([self.root, EPREFIX,'/usr/bin/g-common']), + 'mercurial_command': path([self.root, EPREFIX,'/usr/bin/hg']), + 'rsync_command': path([self.root, EPREFIX,'/usr/bin/rsync']), + 'svn_command': path([self.root, EPREFIX,'/usr/bin/svn']), + 'tar_command': path([self.root, EPREFIX,'/bin/tar']), 't/f_options': ['nocheck'], 'bzr_addopts' : '', 'bzr_syncopts' : '', @@ -158,13 +166,13 @@ class BareConfig(object): # fix the config path defaults['config'] = defaults['config'] \ % {'configdir': defaults['configdir']} - self.read_config(defaults) + self.read_config(self.config, defaults, output=self.output) def read_config(self, defaults): self.config = ConfigParser.ConfigParser(defaults) self.config.add_section('MAIN') - read_layman_config(self.config, defaults) + read_layman_config(self.config, defaults, self._options['output']) def keys(self): @@ -256,7 +264,7 @@ class OptionConfig(BareConfig): by using dictionaries. """ - def __init__(self, options=None, defaults=None): + def __init__(self, options=None, defaults=None, root=None): """ @param options: dictionary of {'option': value, ...} @rtype OptionConfig class instance. @@ -271,7 +279,7 @@ class OptionConfig(BareConfig): >>> sorted(a.keys()) ['bzr_addopts', 'bzr_command', 'bzr_postsync', 'bzr_syncopts', 'cache', 'config', 'configdir', 'custom_news_func', 'custom_news_pkg', 'cvs_addopts', 'cvs_command', 'cvs_postsync', 'cvs_syncopts', 'darcs_addopts', 'darcs_command', 'darcs_postsync', 'darcs_syncopts', 'g-common_command', 'g-common_generateopts', 'g-common_postsync', 'g-common_syncopts', 'git_addopts', 'git_command', 'git_email', 'git_postsync', 'git_syncopts', 'git_user', 'installed', 'local_list', 'make_conf', 'mercurial_addopts', 'mercurial_command', 'mercurial_postsync', 'mercurial_syncopts', 'news_reporter', 'nocheck', 'nocolor', 'output', 'overlay_defs', 'overlays', 'proxy', 'quiet', 'quietness', 'rsync_command', 'rsync_postsync', 'rsync_syncopts', 'stderr', 'stdin', 'stdout', 'storage', 'svn_addopts', 'svn_command', 'svn_postsync', 'svn_syncopts', 't/f_options', 'tar_command', 'tar_postsync', 'umask', 'verbose', 'width'] """ - BareConfig.__init__(self) + BareConfig.__init__(self, root=root) self.update_defaults(defaults) diff --git a/layman/dbbase.py b/layman/dbbase.py index 461038b..e5c0fd9 100644 --- a/layman/dbbase.py +++ b/layman/dbbase.py @@ -93,11 +93,17 @@ class DbBase(object): self.output.debug('Initializing overlay list handler', 8) + path_found = False for path in self.paths: if not os.path.exists(path): continue self.read_file(path) + path_found = True + + if not path_found: + self.output.warn("Warning: an installed db file was not found at: %s" + % str(self.paths)) def __eq__(self, other): diff --git a/layman/updater.py b/layman/updater.py index 1ee7345..746a061 100644 --- a/layman/updater.py +++ b/layman/updater.py @@ -36,11 +36,12 @@ def rename_db(config, newname, output): class Main(object): - def __init__(self): + def __init__(self, root=None): self.parser = None self.output = None self.config = None self.args = None + self.root = root def args_parser(self): self.parser = argparse.ArgumentParser(prog='layman-updater', @@ -59,8 +60,14 @@ class Main(object): 'config': self.args.config, } - self.config = OptionConfig(options=options) - self.config.read_config(self.config.get_defaults()) + self.config = OptionConfig(options=options, root=self.root) + # fix the config path + defaults = self.config.get_defaults() + defaults['config'] = defaults['config'] \ + % {'configdir': defaults['configdir']} + self.config.update_defaults({'config': defaults['config']}) + + self.config.read_config(defaults) layman_inst = LaymanAPI(config=self.config) |