--- wicd/configmanager.py 2010-01-15 05:49:11.000000000 +0100 +++ wicd/configmanager.py.new 2010-10-05 22:10:33.267799689 +0200 @@ -176,28 +176,35 @@ def _copy_section(self, name): - # Yes, deepcopy sucks, but it is robust to changes in both - # this class and RawConfigParser. - p = copy.deepcopy(self) - for sname in p.sections(): - if sname != name: - p.remove_section(sname) + p = ConfigManager("", self.debug, self.mrk_ws) + p.add_section(name) + for (iname, value) in self.items(name): + p.set(name, iname, value) + # Store the filename this section was read from. p.config_file = p.get_option(name, '_filename_', p.config_file) p.remove_option(name, '_filename_') return p def write(self): """ Writes the loaded config file to disk. """ - # Really don't like this deepcopy. - p = copy.deepcopy(self) - for sname in p.sections(): - fname = p.get_option(sname, '_filename_') + in_this_file = [] + for sname in self.sections(): + fname = self.get_option(sname, '_filename_') if fname and fname != self.config_file: + # Write sections from other files section = self._copy_section(sname) - p.remove_section(sname) section._write_one() + else: + # Save names of local sections + in_this_file.append(sname) - for sname in p.sections(): + # Make an instance with only these sections + p = ConfigManager("", self.debug, self.mrk_ws) + p.config_file = self.config_file + for sname in in_this_file: + p.add_section(sname) + for (iname, value) in self.items(sname): + p.set(sname, iname, value) p.remove_option(sname, '_filename_') p._write_one()