Mercurial > hg
changeset 30537:4b0e6677eed1
ui: use try..finally in configoverride
@contextmanager almost always have their "yield" inside a try..finally
block. This is because if the calling code inside the activated
context manager raises, the code after the "yield" won't get
executed. A "finally" block, however, will get executed in this
scenario.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 26 Nov 2016 09:14:41 -0800 |
parents | 98d7636c4729 |
children | c2154979409d |
files | mercurial/ui.py |
diffstat | 1 files changed, 12 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/ui.py Sat Nov 26 09:07:11 2016 -0800 +++ b/mercurial/ui.py Sat Nov 26 09:14:41 2016 -0800 @@ -1201,16 +1201,18 @@ `overrides` must be a dict of the following structure: {(section, name) : value}""" backups = {} - for (section, name), value in overrides.items(): - backups[(section, name)] = self.backupconfig(section, name) - self.setconfig(section, name, value, source) - yield - for __, backup in backups.items(): - self.restoreconfig(backup) - # just restoring ui.quiet config to the previous value is not enough - # as it does not update ui.quiet class member - if ('ui', 'quiet') in overrides: - self.fixconfig(section='ui') + try: + for (section, name), value in overrides.items(): + backups[(section, name)] = self.backupconfig(section, name) + self.setconfig(section, name, value, source) + yield + finally: + for __, backup in backups.items(): + self.restoreconfig(backup) + # just restoring ui.quiet config to the previous value is not enough + # as it does not update ui.quiet class member + if ('ui', 'quiet') in overrides: + self.fixconfig(section='ui') class paths(dict): """Represents a collection of paths and their configs.