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