~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revision.py

  • Committer: Martin Pool
  • Date: 2005-08-30 06:10:39 UTC
  • Revision ID: mbp@sourcefrog.net-20050830061039-1d0347fb236c39ad
- clean up some code in revision.py

- move all exceptions to bzrlib.errors

Show diffs side-by-side

added added

removed removed

Lines of Context:
211
211
 
212
212
    """
213
213
    found_ancestors = {}
214
 
    count = 0
215
214
    anc_iter = enumerate(iter_ancestors(revision_id, revision_source,
216
215
                         only_present=True))
217
216
    for anc_order, (anc_id, anc_distance) in anc_iter:
219
218
            found_ancestors[anc_id] = (anc_order, anc_distance)
220
219
    return found_ancestors
221
220
    
222
 
class AmbiguousBase(bzrlib.errors.BzrError):
223
 
    def __init__(self, bases):
224
 
        msg = "The correct base is unclear, becase %s are all equally close" %\
225
 
            ", ".join(bases)
226
 
        bzrlib.errors.BzrError.__init__(self, msg)
227
 
        self.bases = bases
 
221
 
 
222
def __get_closest(intersection):
 
223
    intersection.sort()
 
224
    matches = [] 
 
225
    for entry in intersection:
 
226
        if entry[0] == intersection[0][0]:
 
227
            matches.append(entry[2])
 
228
    return matches
 
229
 
228
230
 
229
231
def common_ancestor(revision_a, revision_b, revision_source):
230
232
    """Find the ancestor common to both revisions that is closest to both.
241
243
            b_intersection.append((b_ancestors[revision][1], a_order, revision))
242
244
    mutter("a intersection: %r" % a_intersection)
243
245
    mutter("b intersection: %r" % b_intersection)
244
 
    def get_closest(intersection):
245
 
        intersection.sort()
246
 
        matches = [] 
247
 
        for entry in intersection:
248
 
            if entry[0] == intersection[0][0]:
249
 
                matches.append(entry[2])
250
 
        return matches
251
246
 
252
 
    a_closest = get_closest(a_intersection)
 
247
    a_closest = __get_closest(a_intersection)
253
248
    if len(a_closest) == 0:
254
249
        return None
255
 
    b_closest = get_closest(b_intersection)
 
250
    b_closest = __get_closest(b_intersection)
256
251
    assert len(b_closest) != 0
257
252
    mutter ("a_closest %r" % a_closest)
258
253
    mutter ("b_closest %r" % b_closest)
265
260
    return a_closest[0]
266
261
 
267
262
class MultipleRevisionSources(object):
 
263
    """Proxy that looks in multiple branches for revisions."""
268
264
    def __init__(self, *args):
269
265
        object.__init__(self)
270
266
        assert len(args) != 0