diff options
author | A. Jesse Jiryu Davis <jesse@mongodb.com> | 2019-01-21 09:38:51 -0500 |
---|---|---|
committer | A. Jesse Jiryu Davis <jesse@mongodb.com> | 2019-01-21 10:09:40 -0500 |
commit | 4106f183ad0875734ba2c697570f9fd272970804 (patch) | |
tree | 85393df59990032913ef2ecf18b709ab9936a56e /git/config.py | |
parent | a26349d8df88107bd59fd69c06114d3b213d0b27 (diff) | |
download | gitpython-4106f183ad0875734ba2c697570f9fd272970804.tar.gz |
Use items and items_all correctly
#717
Diffstat (limited to 'git/config.py')
-rw-r--r-- | git/config.py | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/git/config.py b/git/config.py index e2c055fd..b03d9d42 100644 --- a/git/config.py +++ b/git/config.py @@ -176,11 +176,19 @@ class _OMD(OrderedDict): prior = super(_OMD, self).__getitem__(key) prior[-1] = value + def get(self, key, default=None): + return super(_OMD, self).get(key, [default])[-1] + def getall(self, key): return super(_OMD, self).__getitem__(key) + def items(self): + """List of (key, last value for key).""" + return [(k, self[k]) for k in self] + def items_all(self): - return [(k, self.get(k)) for k in self] + """List of (key, list of values for key).""" + return [(k, self.getall(k)) for k in self] class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser, object)): @@ -481,14 +489,9 @@ class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser, obje git compatible format""" def write_section(name, section_dict): fp.write(("[%s]\n" % name).encode(defenc)) - for (key, value) in section_dict.items_all(): + for (key, values) in section_dict.items_all(): if key == "__name__": continue - elif isinstance(value, list): - values = value - else: - # self._defaults isn't a multidict - values = [value] for v in values: fp.write(("\t%s = %s\n" % (key, self._value_to_string(v).replace('\n', '\n\t'))).encode(defenc)) @@ -506,25 +509,19 @@ class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser, obje def items_all(self, section_name): """:return: list((option, [values...]), ...) pairs of all items in the given section""" - rv = OrderedDict() - for k, v in self._defaults: - rv[k] = [v] + rv = _OMD(self._defaults) - for k, v in self._sections[section_name].items_all(): + for k, vs in self._sections[section_name].items_all(): if k == '__name__': continue - if k not in rv: - rv[k] = v - continue - - if rv[k] == v: + if k in rv and rv.getall(k) == vs: continue - rv[k].extend(v) + for v in vs: + rv.add(k, v) - # For consistency with items(), return a list, even in Python 3 - return list(rv.items()) + return rv.items_all() @needs_values def write(self): |