@@ -176,11 +176,19 @@ def setlast(self, key, value):
176176        prior  =  super (_OMD , self ).__getitem__ (key )
177177        prior [- 1 ] =  value 
178178
179+     def  get (self , key , default = None ):
180+         return  super (_OMD , self ).get (key , [default ])[- 1 ]
181+ 
179182    def  getall (self , key ):
180183        return  super (_OMD , self ).__getitem__ (key )
181184
185+     def  items (self ):
186+         """List of (key, last value for key).""" 
187+         return  [(k , self [k ]) for  k  in  self ]
188+ 
182189    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 ]
184192
185193
186194class  GitConfigParser (with_metaclass (MetaParserBuilder , cp .RawConfigParser , object )):
@@ -481,14 +489,9 @@ def _write(self, fp):
481489        git compatible format""" 
482490        def  write_section (name , section_dict ):
483491            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 ():
485493                if  key  ==  "__name__" :
486494                    continue 
487-                 elif  isinstance (value , list ):
488-                     values  =  value 
489-                 else :
490-                     # self._defaults isn't a multidict 
491-                     values  =  [value ]
492495
493496                for  v  in  values :
494497                    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):
506509
507510    def  items_all (self , section_name ):
508511        """: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 )
512513
513-         for  k , v  in  self ._sections [section_name ].items_all ():
514+         for  k , vs  in  self ._sections [section_name ].items_all ():
514515            if  k  ==  '__name__' :
515516                continue 
516517
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 :
522519                continue 
523520
524-             rv [k ].extend (v )
521+             for  v  in  vs :
522+                 rv .add (k , v )
525523
526-         # For consistency with items(), return a list, even in Python 3 
527-         return  list (rv .items ())
524+         return  rv .items_all ()
528525
529526    @needs_values  
530527    def  write (self ):
0 commit comments