summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Dolbec <dolsen@gentoo.org>2012-10-14 18:03:27 -0700
committerBrian Dolbec <dolsen@gentoo.org>2012-10-14 19:21:23 -0700
commit92a545dc6b64bbebfa9bc4c3788f1ae3db058788 (patch)
tree28ad00e9d3cc9668340b220e7dd8ab06af1ad982
parente13bca9defe7d7dce41757cf414c4ad8ac5a7e8c (diff)
downloadlayman-92a545dc6b64bbebfa9bc4c3788f1ae3db058788.tar.gz
layman-92a545dc6b64bbebfa9bc4c3788f1ae3db058788.tar.bz2
layman-92a545dc6b64bbebfa9bc4c3788f1ae3db058788.zip
Add checking for ROOT in the environment on statup, and setting it in the appropriate paths.
Add warnings for not finding the config file and installed db. Fix updaters config file path
-rwxr-xr-xbin/layman10
-rwxr-xr-xbin/layman-updater8
-rw-r--r--layman/__init__.py5
-rw-r--r--layman/argsparser.py7
-rw-r--r--layman/config.py46
-rw-r--r--layman/dbbase.py6
-rw-r--r--layman/updater.py13
7 files changed, 67 insertions, 28 deletions
diff --git a/bin/layman b/bin/layman
index 6299d34..ba91c20 100755
--- a/bin/layman
+++ b/bin/layman
@@ -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)