Rev 2267: remove the design doc, since it isn't relevant in this context. in http://bzr.arbash-meinel.com/branches/bzr/0.15-dev/list_patch
John Arbash Meinel
john at arbash-meinel.com
Wed Jan 31 00:33:08 GMT 2007
At http://bzr.arbash-meinel.com/branches/bzr/0.15-dev/list_patch
------------------------------------------------------------
revno: 2267
revision-id: john at arbash-meinel.com-20070131003302-1o0y49dn55m25cga
parent: john at arbash-meinel.com-20070131002851-1ieso3qfka7sqmoa
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: list_patch
timestamp: Tue 2007-01-30 18:33:02 -0600
message:
remove the design doc, since it isn't relevant in this context.
removed:
design_ideas.txt design_ideas.txt-20070127134227-65ul2uetpxrem4v8-1
-------------- next part --------------
=== removed file 'design_ideas.txt'
--- a/design_ideas.txt 2007-01-27 13:42:40 +0000
+++ b/design_ideas.txt 1970-01-01 00:00:00 +0000
@@ -1,101 +0,0 @@
-
-# Outline of workflow:
-
-1) Figure out all pieces of the .knit that needs to be read
-2) Sort by position in the file
-3) read data in-order, and build up content information for the requested
- records
-4) build up content 'lazily' to avoid lots of manipulation on large lists
-5) don't cache every full-text along the way, there are only a few 'important'
- entries.
-
-Example:
-
- A' - B - C - D - E - F*
-
- F was requested, A is a fulltext, we only need F. So we can collapse the
- delta for B,C,D,E,F and just apply it 1 time to A
-
- A' - B - C - D - E* - F*
-
- We only need E and F, we don't need to cache A-D
-
- Build up the delta A-E, apply, save, apply E -> F
-
- A' - B - C - D - E - F*
- \
- G - H - I*
-
- It is most efficient to build up A-C, cache C, and then build up C-F, and
- C-I.
-
- One way to look at it, is that A is a basis for C, and C is a basis for F
- and I.
-
-
-Data structure:
-
-1) Target revision id (E,F,I)
-2) History to get there
-
-
-Build(F):
-
- # Map from a revision to a set of what final targets depend on it
- used_for = {}
- keep = set(requested_versions)
- basis = {}
-
- for version in requested_versions:
- cursor = version
-
- while cursor is not None:
- parent = parent_of(cursor)
- if cursor in used_for or parent is None:
- used_for[cursor].add(version)
- keep.add(cursor)
- break
- else:
- used_for[cursor] = set([version])
-
- basis[cursor] = parent
- cursor = parent
-
- # Now 'used_for' has a mapping from every needed entry towards whatever
- # target revisions depend on that data.
- # And 'keep' contains all of the junction points/point of last importance.
- # keep should be equivalent to all 'used_for' entries that have more than 1
- # dependency.
-
- # Now build up the list of important nodes, and how to get to an important
- # node from another important node
-
- histories = {}
-
- for version in keep:
- history = []
-
- cursor = version
- while cursor is not None:
- parent = basis[cursor]
- history.append(parent)
- if parent in keep:
- break
- cursor = parent
-
- histories[version] = history
-
- # Extract all of the deltas and fulltexts for all the important pieces in
- # sorted order
- # Alternatively, we could do this per history, but we would really like to
- # start with the first history
- ordered = sorted_by_position_in_file(keep)
-
- # Custom reader class that will read in the order the chunks are in disk, but
- # will return them in requested order.
- # However, since we are returning a dictionary, we can do our best to make
- # sure requested order is also disk order. (It is not perfect because of
- # potential interleaving when requesting multiple versions)
-
- for version in ordered:
- contents = self.get_all_contents(histories[version])
More information about the bazaar-commits
mailing list