~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/config.py

  • Committer: Vincent Ladeuil
  • Date: 2012-01-18 14:09:19 UTC
  • mto: This revision was merged to the branch mainline in revision 6468.
  • Revision ID: v.ladeuil+lp@free.fr-20120118140919-rlvdrhpc0nq1lbwi
Change set/remove to require a lock for the branch config files.

This means that tests (or any plugin for that matter) do not requires an
explicit lock on the branch anymore to change a single option. This also
means the optimisation becomes "opt-in" and as such won't be as
spectacular as it may be and/or harder to get right (nothing fails
anymore).

This reduces the diff by ~300 lines.

Code/tests that were updating more than one config option is still taking
a lock to at least avoid some IOs and demonstrate the benefits through
the decreased number of hpss calls.

The duplication between BranchStack and BranchOnlyStack will be removed
once the same sharing is in place for local config files, at which point
the Stack class itself may be able to host the changes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3875
3875
            bstore)
3876
3876
        self.branch = branch
3877
3877
 
 
3878
    def lock_write(self, token=None):
 
3879
        return self.branch.lock_write(token)
 
3880
 
 
3881
    def unlock(self):
 
3882
        return self.branch.unlock()
 
3883
 
 
3884
    @needs_write_lock
 
3885
    def set(self, name, value):
 
3886
        super(BranchStack, self).set(name, value)
 
3887
        # Force a write to persistent storage
 
3888
        self.store.save_changes()
 
3889
 
 
3890
    @needs_write_lock
 
3891
    def remove(self, name):
 
3892
        super(BranchStack, self).remove(name)
 
3893
        # Force a write to persistent storage
 
3894
        self.store.save_changes()
 
3895
 
3878
3896
 
3879
3897
class RemoteControlStack(_CompatibleStack):
3880
3898
    """Remote control-only options stack."""
3905
3923
            bstore)
3906
3924
        self.branch = branch
3907
3925
 
 
3926
    def lock_write(self, token=None):
 
3927
        return self.branch.lock_write(token)
 
3928
 
 
3929
    def unlock(self):
 
3930
        return self.branch.unlock()
 
3931
 
 
3932
    @needs_write_lock
 
3933
    def set(self, name, value):
 
3934
        super(BranchOnlyStack, self).set(name, value)
 
3935
        # Force a write to persistent storage
 
3936
        self.store.save_changes()
 
3937
 
 
3938
    @needs_write_lock
 
3939
    def remove(self, name):
 
3940
        super(BranchOnlyStack, self).remove(name)
 
3941
        # Force a write to persistent storage
 
3942
        self.store.save_changes()
 
3943
 
3908
3944
 
3909
3945
# Use a an empty dict to initialize an empty configobj avoiding all
3910
3946
# parsing and encoding checks