summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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)