| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -176,11 +176,19 @@ def setlast(self, key, value): | |||
| 176 | 176 | prior = super(_OMD, self).__getitem__(key) | |
| 177 | 177 | prior[-1] = value | |
| 178 | 178 | ||
| 179 | + def get(self, key, default=None): | ||
| 180 | + return super(_OMD, self).get(key, [default])[-1] | ||
| 181 | + | ||
| 179 | 182 | def getall(self, key): | |
| 180 | 183 | return super(_OMD, self).__getitem__(key) | |
| 181 | 184 | ||
| 185 | + def items(self): | ||
| 186 | + """List of (key, last value for key).""" | ||
| 187 | + return [(k, self[k]) for k in self] | ||
| 188 | + | ||
| 182 | 189 | def items_all(self): | |
| 183 | - return [(k, self.get(k)) for k in self] | ||
| 190 | + """List of (key, list of values for key).""" | ||
| 191 | + return [(k, self.getall(k)) for k in self] | ||
| 184 | 192 | ||
| 185 | 193 | ||
| 186 | 194 | class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser, object)): | |
@@ -481,14 +489,9 @@ def _write(self, fp): | |||
| 481 | 489 | git compatible format""" | |
| 482 | 490 | def write_section(name, section_dict): | |
| 483 | 491 | fp.write(("[%s]\n" % name).encode(defenc)) | |
| 484 | - for (key, value) in section_dict.items_all(): | ||
| 492 | + for (key, values) in section_dict.items_all(): | ||
| 485 | 493 | if key == "__name__": | |
| 486 | 494 | continue | |
| 487 | - elif isinstance(value, list): | ||
| 488 | - values = value | ||
| 489 | - else: | ||
| 490 | - # self._defaults isn't a multidict | ||
| 491 | - values = [value] | ||
| 492 | 495 | ||
| 493 | 496 | for v in values: | |
| 494 | 497 | fp.write(("\t%s = %s\n" % (key, self._value_to_string(v).replace('\n', '\n\t'))).encode(defenc)) | |
@@ -506,25 +509,19 @@ def items(self, section_name): | |||
| 506 | 509 | ||
| 507 | 510 | def items_all(self, section_name): | |
| 508 | 511 | """:return: list((option, [values...]), ...) pairs of all items in the given section""" | |
| 509 | - rv = OrderedDict() | ||
| 510 | - for k, v in self._defaults: | ||
| 511 | - rv[k] = [v] | ||
| 512 | + rv = _OMD(self._defaults) | ||
| 512 | 513 | ||
| 513 | - for k, v in self._sections[section_name].items_all(): | ||
| 514 | + for k, vs in self._sections[section_name].items_all(): | ||
| 514 | 515 | if k == '__name__': | |
| 515 | 516 | continue | |
| 516 | 517 | ||
| 517 | - if k not in rv: | ||
| 518 | - rv[k] = v | ||
| 519 | - continue | ||
| 520 | - | ||
| 521 | - if rv[k] == v: | ||
| 518 | + if k in rv and rv.getall(k) == vs: | ||
| 522 | 519 | continue | |
| 523 | 520 | ||
| 524 | - rv[k].extend(v) | ||
| 521 | + for v in vs: | ||
| 522 | + rv.add(k, v) | ||
| 525 | 523 | ||
| 526 | - # For consistency with items(), return a list, even in Python 3 | ||
| 527 | - return list(rv.items()) | ||
| 524 | + return rv.items_all() | ||
| 528 | 525 | ||
| 529 | 526 | @needs_values | |
| 530 | 527 | def write(self): | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -11,7 +11,7 @@ | |||
| 11 | 11 | GitConfigParser | |
| 12 | 12 | ) | |
| 13 | 13 | from git.compat import string_types | |
| 14 | - from git.config import cp | ||
| 14 | + from git.config import _OMD, cp | ||
| 15 | 15 | from git.test.lib import ( | |
| 16 | 16 | TestCase, | |
| 17 | 17 | fixture_path, | |
@@ -362,3 +362,13 @@ def test_add_to_multiple(self): | |||
| 362 | 362 | self.assertEqual(cr.items_all('section1'), | |
| 363 | 363 | [('option1', ['value1a', 'value1b', 'value1c']), | |
| 364 | 364 | ('other_option1', ['other_value1'])]) | |
| 365 | + | ||
| 366 | + def test_setlast(self): | ||
| 367 | + # Test directly, not covered by higher-level tests. | ||
| 368 | + omd = _OMD() | ||
| 369 | + omd.setlast('key', 'value1') | ||
| 370 | + self.assertEqual(omd['key'], 'value1') | ||
| 371 | + self.assertEqual(omd.getall('key'), ['value1']) | ||
| 372 | + omd.setlast('key', 'value2') | ||
| 373 | + self.assertEqual(omd['key'], 'value2') | ||
| 374 | + self.assertEqual(omd.getall('key'), ['value2']) | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments