From patchwork Sun Jun 12 05:31:15 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [RFC] ui: provide official way to reset internal state per command From: Yuya Nishihara X-Patchwork-Id: 15470 Message-Id: <58d3b0dd7f03e318fb53.1465709475@mimosa> To: mercurial-devel@mercurial-scm.org Cc: Augie Fackler Date: Sun, 12 Jun 2016 14:31:15 +0900 # HG changeset patch # User Yuya Nishihara # Date 1465708046 -32400 # Sun Jun 12 14:07:26 2016 +0900 # Node ID 58d3b0dd7f03e318fb534103b39bf93aeb4c03b1 # Parent c27dc3c31222c7f74331221a3d25566146feecac ui: provide official way to reset internal state per command This will allow us to clear in-memory password storage per runcommand(). I've updated commandserver to call resetstate() of both ui and repo.ui because they may have different states in theory. diff --git a/mercurial/commandserver.py b/mercurial/commandserver.py --- a/mercurial/commandserver.py +++ b/mercurial/commandserver.py @@ -229,12 +229,8 @@ class server(object): self.repo.ui = self.repo.dirstate._ui = repoui self.repo.invalidateall() - # reset last-print time of progress bar per command - # (progbar is singleton, we don't have to do for all uis) - if copiedui._progbar: - copiedui._progbar.resetstate() - for ui in uis: + ui.resetstate() # any kind of interaction must use server channels, but chg may # replace channels by fully functional tty files. so nontty is # enforced only if cin is a channel. diff --git a/mercurial/ui.py b/mercurial/ui.py --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -138,6 +138,11 @@ class ui(object): def copy(self): return self.__class__(self) + def resetstate(self): + """Clear internal state that shouldn't persist across commands""" + if self._progbar: + self._progbar.resetstate() # reset last-print time of progress bar + def formatter(self, topic, opts): return formatter.formatter(self, topic, opts)