diff options
author | Markus Lehtonen <markus.lehtonen@linux.intel.com> | 2013-03-25 10:56:47 +0200 |
---|---|---|
committer | Tzafrir Cohen <tzafrir@debian.org> | 2014-12-24 12:20:08 +0200 |
commit | 7383f21697177d57e258265df05ff43e7d2768bc (patch) | |
tree | 4f246ae698ddb696f92906c797237533505bbcb4 /gbp | |
parent | 1c0f6ebcc82a4d1dafb89163b96124966ae84d63 (diff) |
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')
-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 c29146f..e86cc6e 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: @@ -352,13 +354,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: @@ -366,7 +381,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 @@ -383,7 +398,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 @@ -423,7 +438,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} @@ -439,7 +455,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-'): |