diff options
author | Markus Lehtonen <markus.lehtonen@linux.intel.com> | 2013-03-25 10:56:47 +0200 |
---|---|---|
committer | Markus Lehtonen <markus.lehtonen@linux.intel.com> | 2014-11-14 14:22:10 +0200 |
commit | 46ba58673c35a319ff6cdcfb65442b6722017787 (patch) | |
tree | 921814fad455e2cbdf8da4cbb60403c0c94a1dc1 /gbp/config.py | |
parent | ff0194dca032a8074b599d279983353334833be0 (diff) | |
download | git-buildpackage-46ba58673c35a319ff6cdcfb65442b6722017787.tar.gz git-buildpackage-46ba58673c35a319ff6cdcfb65442b6722017787.tar.bz2 git-buildpackage-46ba58673c35a319ff6cdcfb65442b6722017787.zip |
config: support for per-tree config files
Add support for reading the local config file(s) from a given git
tree-ish.
Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Diffstat (limited to 'gbp/config.py')
-rw-r--r-- | gbp/config.py | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/gbp/config.py b/gbp/config.py index 81c82d50..81000ae2 100644 --- a/gbp/config.py +++ b/gbp/config.py @@ -20,6 +20,8 @@ from optparse import OptionParser, OptionGroup, Option, OptionValueError from ConfigParser import SafeConfigParser, NoSectionError from copy import copy import os.path +import tempfile + try: from gbp.version import gbp_version except ImportError: @@ -348,13 +350,26 @@ class GbpOptionParser(OptionParser): files = [fname for fname in files if fname.startswith('/')] return files - def _read_config_file(self, parser, repo, filename): + def _read_config_file(self, parser, repo, filename, git_treeish): """Read config file""" str_fields = {} if repo: str_fields['git_dir'] = repo.git_dir if not repo.bare: str_fields['top_dir'] = repo.path + + # Read per-tree config file + if repo and git_treeish and filename.startswith('%(top_dir)s/'): + with tempfile.TemporaryFile() as tmp: + relpath = filename.replace('%(top_dir)s/', '') + try: + config = repo.show('%s:%s' % (git_treeish, relpath)) + tmp.writelines(config) + except GitRepositoryError: + pass + tmp.seek(0) + parser.readfp(tmp) + return try: filename = filename % str_fields except KeyError: @@ -362,7 +377,7 @@ class GbpOptionParser(OptionParser): return parser.read(filename) - def parse_config_files(self): + def parse_config_files(self, git_treeish=None): """ Parse the possible config files and set appropriate values default values @@ -379,7 +394,7 @@ class GbpOptionParser(OptionParser): repo = None # Read all config files for filename in config_files: - self._read_config_file(parser, repo, filename) + self._read_config_file(parser, repo, filename, git_treeish) self.config.update(dict(parser.defaults())) # Make sure we read any legacy sections prior to the real subcommands @@ -419,7 +434,8 @@ class GbpOptionParser(OptionParser): else: self.config['filter'] = [] - def __init__(self, command, prefix='', usage=None, sections=[]): + def __init__(self, command, prefix='', usage=None, sections=[], + git_treeish=None): """ @param command: the command to build the config parser for @type command: C{str} @@ -435,7 +451,7 @@ class GbpOptionParser(OptionParser): self.sections = sections self.prefix = prefix self.config = {} - self.parse_config_files() + self.parse_config_files(git_treeish) self.valid_options = [] if self.command.startswith('git-') or self.command.startswith('gbp-'): |