~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/config.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2011-05-31 19:43:27 UTC
  • mfrom: (5743.10.13 config-lock-remote)
  • Revision ID: pqm@pqm.ubuntu.com-20110531194327-pjelx43boom8r26y
(vila) Support config remote branch config file. (Vincent Ladeuil)

Show diffs side-by-side

added added

removed removed

Lines of Context:
2167
2167
        """
2168
2168
        raise NotImplementedError(self._load_from_string)
2169
2169
 
 
2170
    def unload(self):
 
2171
        """Unloads the Store.
 
2172
 
 
2173
        This should make is_loaded() return False. This is used when the caller
 
2174
        knows that the persistent storage has changed or may have change since
 
2175
        the last load.
 
2176
        """
 
2177
        raise NotImplementedError(self.unload)
 
2178
 
2170
2179
    def save(self):
2171
2180
        """Saves the Store to persistent storage."""
2172
2181
        raise NotImplementedError(self.save)
2220
2229
    def is_loaded(self):
2221
2230
        return self._config_obj != None
2222
2231
 
 
2232
    def unload(self):
 
2233
        self._config_obj = None
 
2234
 
2223
2235
    def load(self):
2224
2236
        """Load the store from the associated file."""
2225
2237
        if self.is_loaded():
2370
2382
    def __init__(self, branch):
2371
2383
        super(BranchStore, self).__init__(branch.control_transport,
2372
2384
                                          'branch.conf')
2373
 
        # FIXME: This creates a cycle -- vila 2011-05-27
2374
 
        self.branch = branch
 
2385
        # We don't want to create a cycle here when the BranchStore becomes
 
2386
        # part of an object (roughly a Stack, directly or indirectly) that is
 
2387
        # an attribute of the branch object itself. Since the BranchStore
 
2388
        # cannot exist without a branch, it's safe to make it a weakref.
 
2389
        self.branch_ref = weakref.ref(branch)
 
2390
 
 
2391
    def _get_branch(self):
 
2392
        b = self.branch_ref()
 
2393
        if b is None:
 
2394
            # Programmer error, a branch store can't exist if the branch it
 
2395
            # refers to is dead.
 
2396
            raise AssertionError('Dead branch ref in %r' % (self,))
 
2397
        return b
2375
2398
 
2376
2399
    def lock_write(self, token=None):
2377
 
        return self.branch.lock_write(token)
 
2400
        return self._get_branch().lock_write(token)
2378
2401
 
2379
2402
    def unlock(self):
2380
 
        return self.branch.unlock()
 
2403
        return self._get_branch().unlock()
2381
2404
 
2382
2405
    @needs_write_lock
2383
2406
    def save(self):
2578
2601
    """
2579
2602
 
2580
2603
    def set(self, name, value):
2581
 
        # Force a reload (assuming we use a LockableIniFileStore)
2582
 
        self.store._config_obj = None
 
2604
        # Force a reload
 
2605
        self.store.unload()
2583
2606
        super(_CompatibleStack, self).set(name, value)
2584
2607
        # Force a write to persistent storage
2585
2608
        self.store.save()
2602
2625
        super(LocationStack, self).__init__(
2603
2626
            [matcher.get_sections, gstore.get_sections], lstore)
2604
2627
 
2605
 
# FIXME: See BranchStore, same remarks -- vila 20110512
2606
2628
class BranchStack(_CompatibleStack):
2607
2629
 
2608
2630
    def __init__(self, branch):
2613
2635
        super(BranchStack, self).__init__(
2614
2636
            [matcher.get_sections, bstore.get_sections, gstore.get_sections],
2615
2637
            bstore)
 
2638
        self.branch = branch
2616
2639
 
2617
2640
 
2618
2641
class cmd_config(commands.Command):
2794
2817
# object.
2795
2818
test_store_builder_registry = registry.Registry()
2796
2819
 
2797
 
# Thre registered object should be a callable receiving a test instance
 
2820
# The registered object should be a callable receiving a test instance
2798
2821
# parameter (inheriting from tests.TestCaseWithTransport) and returning a Stack
2799
2822
# object.
2800
2823
test_stack_builder_registry = registry.Registry()