Rev 35: Add some crude progress bars. in http://people.ubuntu.com/~robertc/baz2.0/plugins/search/trunk

Robert Collins robertc at robertcollins.net
Sat Jun 14 07:37:37 BST 2008


At http://people.ubuntu.com/~robertc/baz2.0/plugins/search/trunk

------------------------------------------------------------
revno: 35
revision-id: robertc at robertcollins.net-20080614063730-yt8zrdpg7yxwgqnd
parent: robertc at robertcollins.net-20080614050754-z5us1ebmdqbbegg7
committer: Robert Collins <robertc at robertcollins.net>
branch nick: trunk
timestamp: Sat 2008-06-14 16:37:30 +1000
message:
  Add some crude progress bars.
modified:
  index.py                       index.py-20080608055509-hnimeek7q8tctkqf-2
=== modified file 'index.py'
--- a/index.py	2008-06-14 05:07:54 +0000
+++ b/index.py	2008-06-14 06:37:30 +0000
@@ -23,6 +23,7 @@
 import re
 
 from bzrlib import branch as _mod_branch
+from bzrlib import ui
 from bzrlib.bzrdir import BzrDirMeta1
 from bzrlib.errors import NotBranchError, NoSuchFile, UnknownFormatError
 from bzrlib.index import CombinedGraphIndex, GraphIndex, InMemoryGraphIndex
@@ -240,11 +241,16 @@
         """
         branch.lock_read()
         try:
-            return self._index_revisions(branch, revisions_to_index)
+            outer_bar = ui.ui_factory.nested_progress_bar()
+            try:
+                return self._index_revisions(branch, revisions_to_index,
+                    outer_bar)
+            finally:
+                outer_bar.finished()
         finally:
             branch.unlock()
 
-    def _index_revisions(self, locked_branch, revisions_to_index):
+    def _index_revisions(self, locked_branch, revisions_to_index, outer_bar):
         """Helper for indexed_revisions."""
         if not revisions_to_index:
             return
@@ -257,24 +263,34 @@
             order_dict[revid] = pos
         # 5000 uses 1GB on a mysql tree.
         group_size = 2500
-        for offset in range(len(order) / group_size + 1):
+        groups = len(order) / group_size + 1
+        for offset in range(groups):
+            outer_bar.update("Indexing...", offset, groups)
             revision_group = order[offset * group_size:(offset + 1) * group_size]
             builder = ComponentIndexBuilder()
             # here: index texts
             # here: index inventory/paths
             # here: index revisions
-            terms = self._terms_for_texts(locked_branch.repository,
-                revision_group)
-            self._add_terms(builder, terms)
-            terms = self._terms_for_file_terms(locked_branch.repository,
-                terms, order_dict)
-            self._add_terms(builder, terms)
-            terms = self._terms_for_revs(locked_branch.repository,
-                revision_group)
-            self._add_terms(builder, terms)
-            for rev_id in revision_group:
-                builder.add_revision(rev_id)
-            self._add_index(builder)
+            steps = ui.ui_factory.nested_progress_bar()
+            try:
+                steps.update("Indexing texts", 0, 4)
+                terms = self._terms_for_texts(locked_branch.repository,
+                    revision_group)
+                self._add_terms(builder, terms)
+                steps.update("Indexing paths", 1, 4)
+                terms = self._terms_for_file_terms(locked_branch.repository,
+                    terms, order_dict)
+                self._add_terms(builder, terms)
+                steps.update("Indexing commits", 2, 4)
+                terms = self._terms_for_revs(locked_branch.repository,
+                    revision_group)
+                self._add_terms(builder, terms)
+                for rev_id in revision_group:
+                    builder.add_revision(rev_id)
+                steps.update("Saving group", 3, 4)
+                self._add_index(builder)
+            finally:
+                steps.finished()
 
     def _add_index(self, builder, to_remove=None, allow_pack=True):
         """Add a new component index to the list of indices.
@@ -496,24 +512,30 @@
         order = list(revision_ids)
         order.sort(key=lambda revid:order_dict[revid])
         group_size = 100
-        for offset in range(len(order) / group_size + 1):
-            inventory_group = order[offset * group_size:(offset + 1) * group_size]
-            lines_list = repository.get_inventory_weave().get_line_list(inventory_group)
-            serializer = repository._serializer
-            # For VersionedFiles:
-            # for xml in repository._iter_inventory_xmls(inventory_group):
-            #     pass
-            for lines, revision_id in zip(lines_list, inventory_group):
-                path_dict = paths_from_ids(lines, serializer,
-                    revision_ids[revision_id])
-                for file_id, path in path_dict.iteritems():
-                    terms[(file_id, revision_id)] = [('p', '', path)]
-            # Public api way - 5+ times slower:
-            # for inventory in repository.iter_inventories(inventory_group):
-            # #    revision_id = inventory.revision_id
-            #    for file_id in revision_ids[revision_id]:
-            #        path = inventory.id2path(file_id)
-            #        terms[(file_id, revision_id)] = [('p', '', path)]
+        groups = len(order) / group_size + 1
+        bar = ui.ui_factory.nested_progress_bar()
+        try:
+            for offset in range(groups):
+                bar.update("Extract revision paths", offset, groups)
+                inventory_group = order[offset * group_size:(offset + 1) * group_size]
+                lines_list = repository.get_inventory_weave().get_line_list(inventory_group)
+                serializer = repository._serializer
+                # For VersionedFiles:
+                # for xml in repository._iter_inventory_xmls(inventory_group):
+                #     pass
+                for lines, revision_id in zip(lines_list, inventory_group):
+                    path_dict = paths_from_ids(lines, serializer,
+                        revision_ids[revision_id])
+                    for file_id, path in path_dict.iteritems():
+                        terms[(file_id, revision_id)] = [('p', '', path)]
+                # Public api way - 5+ times slower:
+                # for inventory in repository.iter_inventories(inventory_group):
+                # #    revision_id = inventory.revision_id
+                #    for file_id in revision_ids[revision_id]:
+                #        path = inventory.id2path(file_id)
+                #        terms[(file_id, revision_id)] = [('p', '', path)]
+        finally:
+            bar.finished()
         return terms.iteritems()
 
     def _terms_for_revs(self, repository, revision_ids):




More information about the bazaar-commits mailing list