ui: provide official way to reset internal state per command
authorYuya Nishihara <yuya@tcha.org>
Sun, 12 Jun 2016 14:07:26 +0900
changeset 29366 d269e7db2f55
parent 29365 f652e84f23f2
child 29367 4e6e280e238f
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.
mercurial/commandserver.py
mercurial/ui.py
--- a/mercurial/commandserver.py	Sat Jun 11 10:17:49 2016 +0900
+++ b/mercurial/commandserver.py	Sun Jun 12 14:07:26 2016 +0900
@@ -229,12 +229,8 @@
             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.
--- a/mercurial/ui.py	Sat Jun 11 10:17:49 2016 +0900
+++ b/mercurial/ui.py	Sun Jun 12 14:07:26 2016 +0900
@@ -138,6 +138,11 @@
     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)