Force saving the config if new options were added.

This commit is contained in:
Florian Bruhin 2015-02-13 23:53:56 +01:00
parent a38a77b16b
commit 1cf34e7984
2 changed files with 14 additions and 5 deletions

View File

@ -145,6 +145,12 @@ def init(args):
save_manager.add_saveable( save_manager.add_saveable(
'config', config_obj.save, config_obj.changed, 'config', config_obj.save, config_obj.changed,
config_opt=('general', 'auto-save-config'), filename=filename) config_opt=('general', 'auto-save-config'), filename=filename)
for sect in config_obj.sections.values():
for opt in sect.values.values():
if opt.values['conf'] is None:
# Option added to builtin defaults but not in user's
# config yet
save_manager.save('config', explicit=True, force=True)
try: try:
key_config = keyconf.KeyConfigParser(confdir, 'keys.conf') key_config = keyconf.KeyConfigParser(confdir, 'keys.conf')
except (keyconf.KeyConfigError, UnicodeDecodeError) as e: except (keyconf.KeyConfigError, UnicodeDecodeError) as e:

View File

@ -72,23 +72,24 @@ class Saveable:
log.save.debug("Marking {} as dirty.".format(self._name)) log.save.debug("Marking {} as dirty.".format(self._name))
self._dirty = True self._dirty = True
def save(self, is_exit=False, explicit=False, silent=False): def save(self, is_exit=False, explicit=False, silent=False, force=False):
"""Save this saveable. """Save this saveable.
Args: Args:
is_exit: Whether we're currently exiting qutebrowser. is_exit: Whether we're currently exiting qutebrowser.
explicit: Whether the user explicitely requested this save. explicit: Whether the user explicitely requested this save.
silent: Don't write informations to log. silent: Don't write informations to log.
force: Force saving, no matter what.
""" """
if (self._config_opt is not None and if (self._config_opt is not None and
(not config.get(*self._config_opt)) and (not config.get(*self._config_opt)) and
(not explicit)): (not explicit) and (not force)):
if not silent: if not silent:
log.save.debug("Not saving {} because autosaving has been " log.save.debug("Not saving {} because autosaving has been "
"disabled by {cfg[0]} -> {cfg[1]}.".format( "disabled by {cfg[0]} -> {cfg[1]}.".format(
self._name, cfg=self._config_opt)) self._name, cfg=self._config_opt))
return return
do_save = self._dirty or (self._save_on_exit and is_exit) do_save = self._dirty or (self._save_on_exit and is_exit) or force
if not silent: if not silent:
log.save.debug("Save of {} requested - dirty {}, save_on_exit {}, " log.save.debug("Save of {} requested - dirty {}, save_on_exit {}, "
"is_exit {} -> {}".format( "is_exit {} -> {}".format(
@ -154,7 +155,8 @@ class SaveManager(QObject):
self.saveables[name] = Saveable(name, save, changed, config_opt, self.saveables[name] = Saveable(name, save, changed, config_opt,
filename) filename)
def save(self, name, is_exit=False, explicit=False, silent=False): def save(self, name, is_exit=False, explicit=False, silent=False,
force=False):
"""Save a saveable by name. """Save a saveable by name.
Args: Args:
@ -162,9 +164,10 @@ class SaveManager(QObject):
explicit: Whether this save operation was triggered explicitely. explicit: Whether this save operation was triggered explicitely.
silent: Don't write informations to log. Used to reduce log spam silent: Don't write informations to log. Used to reduce log spam
when autosaving. when autosaving.
force: Force saving, no matter what.
""" """
self.saveables[name].save(is_exit=is_exit, explicit=explicit, self.saveables[name].save(is_exit=is_exit, explicit=explicit,
silent=silent) silent=silent, force=force)
@pyqtSlot() @pyqtSlot()
def autosave(self): def autosave(self):