diff --git a/mercurial/progress.py b/mercurial/progress.py --- a/mercurial/progress.py +++ b/mercurial/progress.py @@ -104,6 +104,7 @@ self.order = self.ui.configlist('progress', 'format') self.estimateinterval = self.ui.configwith( float, 'progress', 'estimateinterval') + self.debug = self.ui.configbool('progress', 'debug') def show(self, now, topic, pos, item, unit, total): if not shouldprint(self.ui): diff --git a/mercurial/ui.py b/mercurial/ui.py --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -1693,6 +1693,14 @@ elif self._progbar is not None: self._progbar.progress(topic, pos, item=item, unit=unit, total=total) + + # Looking up progress.debug in tight loops is expensive. The value + # is cached on the progbar object and we can avoid the lookup in + # the common case where a progbar is active. + if pos is None or not self._progbar.debug: + return + + # Keep this logic in sync with above. if pos is None or not self.configbool('progress', 'debug'): return