Patchwork D3821: progress: extract function for closing topic

login
register
mail settings
Submitter phabricator
Date June 20, 2018, 5:44 a.m.
Message ID <differential-rev-PHID-DREV-5xzk7q4xk4zeclw2rnsj-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/32341/
State Superseded
Headers show

Comments

phabricator - June 20, 2018, 5:44 a.m.
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  progress(None) had a completely different implementation from the
  progress(<not None>) implementation. It very much feels like it should
  be a separate method, so this patch makes it so. That also makes it
  clear that only the topic parameter matters when closing a topic
  (e.g. "total" does not matter).

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D3821

AFFECTED FILES
  mercurial/progress.py

CHANGE DETAILS




To: martinvonz, #hg-reviewers
Cc: mercurial-devel

Patch

diff --git a/mercurial/progress.py b/mercurial/progress.py
--- a/mercurial/progress.py
+++ b/mercurial/progress.py
@@ -264,36 +264,40 @@ 
             self.starttimes[topic] = now - interval
 
     def progress(self, topic, pos, item='', unit='', total=None):
+        if pos is None:
+            self.closetopic(topic)
+            return
         now = time.time()
         with self._refreshlock:
-            if pos is None:
-                self.starttimes.pop(topic, None)
-                self.startvals.pop(topic, None)
-                self.topicstates.pop(topic, None)
-                # reset the progress bar if this is the outermost topic
-                if self.topics and self.topics[0] == topic and self.printed:
-                    self.complete()
-                    self.resetstate()
-                # truncate the list of topics assuming all topics within
-                # this one are also closed
-                if topic in self.topics:
-                    self.topics = self.topics[:self.topics.index(topic)]
-                    # reset the last topic to the one we just unwound to,
-                    # so that higher-level topics will be stickier than
-                    # lower-level topics
-                    if self.topics:
-                        self.lasttopic = self.topics[-1]
-                    else:
-                        self.lasttopic = None
-            else:
-                if topic not in self.topics:
-                    self.starttimes[topic] = now
-                    self.startvals[topic] = pos
-                    self.topics.append(topic)
-                self.topicstates[topic] = pos, item, unit, total
-                self.curtopic = topic
-                self._calibrateestimate(topic, now, pos)
-                if now - self.lastprint >= self.refresh and self.topics:
-                    if self._oktoprint(now):
-                        self.lastprint = now
-                        self.show(now, topic, *self.topicstates[topic])
+            if topic not in self.topics:
+                self.starttimes[topic] = now
+                self.startvals[topic] = pos
+                self.topics.append(topic)
+            self.topicstates[topic] = pos, item, unit, total
+            self.curtopic = topic
+            self._calibrateestimate(topic, now, pos)
+            if now - self.lastprint >= self.refresh and self.topics:
+                if self._oktoprint(now):
+                    self.lastprint = now
+                    self.show(now, topic, *self.topicstates[topic])
+
+    def closetopic(self, topic):
+        with self._refreshlock:
+            self.starttimes.pop(topic, None)
+            self.startvals.pop(topic, None)
+            self.topicstates.pop(topic, None)
+            # reset the progress bar if this is the outermost topic
+            if self.topics and self.topics[0] == topic and self.printed:
+                self.complete()
+                self.resetstate()
+            # truncate the list of topics assuming all topics within
+            # this one are also closed
+            if topic in self.topics:
+                self.topics = self.topics[:self.topics.index(topic)]
+                # reset the last topic to the one we just unwound to,
+                # so that higher-level topics will be stickier than
+                # lower-level topics
+                if self.topics:
+                    self.lasttopic = self.topics[-1]
+                else:
+                    self.lasttopic = None