summaryrefslogtreecommitdiff
path: root/gbp/config.py
diff options
context:
space:
mode:
authorMarkus Lehtonen <markus.lehtonen@linux.intel.com>2013-03-25 10:56:47 +0200
committerMarkus Lehtonen <markus.lehtonen@linux.intel.com>2014-11-14 14:22:10 +0200
commit46ba58673c35a319ff6cdcfb65442b6722017787 (patch)
tree921814fad455e2cbdf8da4cbb60403c0c94a1dc1 /gbp/config.py
parentff0194dca032a8074b599d279983353334833be0 (diff)
downloadgit-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.py26
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-'):