/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/reconfigure.py

  • Committer: John Arbash Meinel
  • Date: 2009-10-12 15:55:26 UTC
  • mto: (4679.5.3 2.1-static-tuple-no-use)
  • mto: This revision was merged to the branch mainline in revision 4735.
  • Revision ID: john@arbash-meinel.com-20091012155526-b46tuz5cibebbnct
Change the _lookup function to use Quadratic Probing.

The main strength is that we get a bit of locality (collision resolution
looks quickly close to the location.)
The main weakness is that we don't use the upper bits of the hash to
induce divergence. So while we nicely handle collisions in neighboring
buckets (Quadratic means their resolution chains will diverge), if
two objects hash to the same bucket, their resolution chains are identical.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007-2010 Canonical Ltd
 
1
# Copyright (C) 2007, 2009 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
82
82
            self.repository = None
83
83
            self.local_repository = None
84
84
        else:
85
 
            if (self.repository.user_url == self.bzrdir.user_url):
 
85
            if (self.repository.bzrdir.root_transport.base ==
 
86
                self.bzrdir.root_transport.base):
86
87
                self.local_repository = self.repository
87
88
            else:
88
89
                self.local_repository = None
89
90
        try:
90
91
            branch = self.bzrdir.open_branch()
91
 
            if branch.user_url == bzrdir.user_url:
 
92
            if branch.bzrdir.root_transport.base == bzrdir.root_transport.base:
92
93
                self.local_branch = branch
93
94
                self.referenced_branch = None
94
95
            else:
216
217
            if not want_reference:
217
218
                self._create_repository = True
218
219
        else:
219
 
            if want_reference and (
220
 
                self.repository.user_url == self.bzrdir.user_url):
 
220
            if want_reference and (self.repository.bzrdir.root_transport.base
 
221
                                   == self.bzrdir.root_transport.base):
221
222
                if not self.repository.is_shared():
222
223
                    self._destroy_repository = True
223
224
        if self.referenced_branch is None:
264
265
 
265
266
    def _check(self):
266
267
        """Raise if reconfiguration would destroy local changes"""
267
 
        if self._destroy_tree and self.tree.has_changes():
 
268
        if self._destroy_tree:
 
269
            # XXX: What about pending merges ? -- vila 20090629
 
270
            if self.tree.has_changes(self.tree.basis_tree()):
268
271
                raise errors.UncommittedChanges(self.tree)
269
272
        if self._create_reference and self.local_branch is not None:
270
273
            reference_branch = branch.Branch.open(self._select_bind_location())
343
346
            if self._create_reference:
344
347
                reference_branch.repository.fetch(self.repository)
345
348
            elif self.local_branch is not None and not self._destroy_branch:
346
 
                up = self.local_branch.user_transport.clone('..')
 
349
                up = self.local_branch.bzrdir.root_transport.clone('..')
347
350
                up_bzrdir = bzrdir.BzrDir.open_containing_from_transport(up)[0]
348
351
                new_repo = up_bzrdir.find_repository()
349
352
                new_repo.fetch(self.repository)
367
370
            local_branch = self.local_branch
368
371
        if self._create_reference:
369
372
            format = branch.BranchReferenceFormat().initialize(self.bzrdir,
370
 
                target_branch=reference_branch)
 
373
                reference_branch)
371
374
        if self._destroy_tree:
372
375
            self.bzrdir.destroy_workingtree()
373
376
        if self._create_tree: