Rev 79: only slightly faster if we search concurrently. Probably a fair in http://bzr.arbash-meinel.com/plugins/history_db
John Arbash Meinel
john at arbash-meinel.com
Mon Apr 12 20:21:46 BST 2010
At http://bzr.arbash-meinel.com/plugins/history_db
------------------------------------------------------------
revno: 79
revision-id: john at arbash-meinel.com-20100412192139-x9a08xz2ijt5jsjl
parent: john at arbash-meinel.com-20100412191459-x75cvx7mc17j8p3h
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: history_db
timestamp: Mon 2010-04-12 14:21:39 -0500
message:
only slightly faster if we search concurrently. Probably a fair
amount faster if we used more 'old' revision_ids.
-------------- next part --------------
=== modified file '__init__.py'
--- a/__init__.py 2010-04-12 19:14:59 +0000
+++ b/__init__.py 2010-04-12 19:21:39 +0000
@@ -181,8 +181,9 @@
else:
query = _mod_history_db.Querier(db, b)
if method == 'db-range':
- revision_ids = [(r, query.get_revision_id(r))
- for r in revno_list]
+ revno_map = query.get_revision_ids(revno_list)
+ revision_ids = [(r, revno_map.get(r, None))
+ for r in revno_list]
else:
assert method == 'db-range-multi'
revno_map = query.get_dotted_revno_range_multi(rev_ids)
=== modified file 'history_db.py'
--- a/history_db.py 2010-04-12 19:14:59 +0000
+++ b/history_db.py 2010-04-12 19:21:39 +0000
@@ -1338,14 +1338,14 @@
self._stats['query_time'] += (time.time() - t)
return revnos
- def get_revision_id(self, revno):
+ def get_revision_ids(self, revnos):
"""Map from a dotted-revno back into a revision_id."""
t = time.time()
tip_db_id = self._get_db_id(self._branch_tip_rev_id)
# TODO: If tip_db_id is None, maybe we want to raise an exception here?
# To indicate that the branch has not been imported yet
- revno_str = '.'.join(map(str, revno))
- merged_revision_id = None
+ revno_strs = set(['.'.join(map(str, revno)) for revno in revnos])
+ revno_map = {}
while tip_db_id is not None:
self._stats['num_steps'] += 1
range_res = self._cursor.execute(
@@ -1355,32 +1355,31 @@
" ORDER BY count DESC LIMIT 1",
(tip_db_id,)).fetchone()
if range_res is None:
- revision_res = self._cursor.execute(
+ revision_res = self._cursor.execute(_add_n_params(
"SELECT revision_id, revno"
" FROM dotted_revno, revision"
" WHERE merged_revision = revision.db_id"
" tip_revision = ?"
- " AND revno = ?",
- (tip_db_id, revno_str)).fetchall()
+ " AND revno IN (%s)", len(revno_strs)),
+ [tip_db_id] + list(revno_strs)).fetchall()
next_db_id = self._get_lh_parent_db_id(tip_db_id)
else:
pkey, next_db_id = range_res
- revision_res = self._cursor.execute(
+ revision_res = self._cursor.execute(_add_n_params(
"SELECT revision_id, revno"
" FROM dotted_revno, mainline_parent, revision"
" WHERE tip_revision = mainline_parent.revision"
" AND merged_revision = revision.db_id"
" AND mainline_parent.range = ?"
- " AND revno = ?",
- (pkey, revno_str)).fetchall()
+ " AND revno IN (%s)", len(revno_strs)),
+ [pkey] + list(revno_strs)).fetchall()
tip_db_id = next_db_id
- if revision_res:
- assert len(revision_res) == 1
- merged_revision_id, db_revno_str = revision_res[0]
- assert db_revno_str == revno_str
- break
+ for revision_id, revno_str in revision_res:
+ dotted = tuple(map(int, revno_str.split('.')))
+ revno_strs.discard(revno)
+ revno_map[dotted] = revision_id
self._stats['query_time'] += (time.time() - t)
- return merged_revision_id
+ return revno_map
def walk_mainline(self):
"""Walk the db, and grab all the mainline identifiers."""
More information about the bazaar-commits
mailing list