[RFC] browsing history API
Goffredo Baroncelli
kreijack at alice.it
Wed May 17 20:09:17 BST 2006
Hi all,
for my project ( a bazaar web interface[*] ) I need to browse the full
history[**] both on the branch basis and on the file_id basis ( of a specific
branch of course).
The first thing can be done via a
<code>
merge_sort(repository.get_revision_graph(),last_revision)
<code>
which return a list of
(sequence, rev_id, merge_depth, end_of_merge)
For the second case ( an history on the file_id basis ), the
bzrlib.log._show_log( ) function perform for every revision a
branch.get_revision_delta(revno) and check for the presence of the file_id
involved.
In my opinion that is too expensive, and I'd propose a new API which
calculates the revision history on the basis of weave or knit index ,
depending on whichever you use.
So I suggest to add to the class Weave and KnitVersionedFile a function like
<code>
# knit
def get_index_set(self):
return self._index._cache.keys( )
</code>
or
<code>
# wave
def get_index_set(self):
return self._names
</code>
which return a _set_ of the revision contained; then I suggest to add to the
Branch class two functions like
<code>
def get_full_revision_history(self):
# return the full (merged revision included) revision history of the
# branch
# TODO: cache the revision computed
h = self.revision_history( )
r = bzrlib.tsort.merge_sort(self.repository.get_revision_graph( ),h[-1])
l=list([ revid for (seq, revid, merge_depth, end_of_merge) in r ])
l.reverse( )
return l
def get_full_revision_history_by_fileid( self, file_id):
# return the full (merged revision included) revision history of the
# branch of the file_id involved
# w can be a Weave or a KnitVersionedFile class
w = self.repository.weave_store.get_weave(file_id,
self.repository.get_transaction())
_revids = w.get_index_set( )
h = self.get_full_revision_history()
revids = [ ]
for i in h:
if i in _revids:
revids.append(0,i)
return revids
</code>
These functions can improve the speed of the bzr log command; see the patch
enclosed. Comments are welcome.
Goffredo
[*] http://goffredo-baroncelli.homelinux.net/bazaar
[**] for the full history I mean all the revisions with the _merged_
revisions; for the history I mean only the main revision without the merged
revision.
--
gpg key@ keyserver.linux.it: Goffredo Baroncelli (ghigo) <kreijack at inwind.it>
Key fingerprint = CE3C 7E01 6782 30A3 5B87 87C0 BB86 505C 6B2A CFF9
-------------- next part --------------
A non-text attachment was scrubbed...
Name: diff
Type: text/x-diff
Size: 2806 bytes
Desc: not available
Url : https://lists.ubuntu.com/archives/bazaar/attachments/20060517/b6a9661c/attachment.bin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 191 bytes
Desc: not available
Url : https://lists.ubuntu.com/archives/bazaar/attachments/20060517/b6a9661c/attachment.pgp
More information about the bazaar
mailing list