~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/branch.py

  • Committer: Robert Collins
  • Date: 2007-01-29 16:58:49 UTC
  • mto: This revision was merged to the branch mainline in revision 2246.
  • Revision ID: robertc@robertcollins.net-20070129165849-409f5714fa7ebe48
New Branch hooks facility, with one initial hook 'set_rh' which triggers
whenever the revision history is set. This allows triggering on e.g.
push, pull, commit, and so on. Developed for use with the branchrss
plugin. See bzrlib/tests/branch_implementations/test_hooks for more
details. (Robert Collins)

Show diffs side-by-side

added added

removed removed

Lines of Context:
81
81
 
82
82
    base
83
83
        Base directory/url of the branch.
 
84
 
 
85
    hooks: A dictionary mapping hook actions to callables to invoke.
 
86
        e.g. 'set_rh':[] is the set_rh hook list. See DefaultHooks for
 
87
        full details.
84
88
    """
85
89
    # this is really an instance variable - FIXME move it there
86
90
    # - RBC 20060112
104
108
            master.break_lock()
105
109
 
106
110
    @staticmethod
 
111
    def DefaultHooks():
 
112
        """Return a dict of the default branch hook settings."""
 
113
        return {
 
114
            'set_rh':[], # invoked whenever the revision history has been set
 
115
                         # with set_revision_history. The api signature is
 
116
                         # (branch, revision_history), and the branch will
 
117
                         # be write-locked.
 
118
            }
 
119
 
 
120
    @staticmethod
107
121
    @deprecated_method(zero_eight)
108
122
    def open_downlevel(base):
109
123
        """Open a branch which may be of an old format."""
629
643
        return checkout.create_workingtree(revision_id)
630
644
 
631
645
 
 
646
# install the default hooks into the class.
 
647
Branch.hooks = Branch.DefaultHooks()
 
648
 
 
649
 
632
650
class BranchFormat(object):
633
651
    """An encapsulation of the initialization and open routines for a format.
634
652
 
1101
1119
            # this call is disabled because revision_history is 
1102
1120
            # not really an object yet, and the transaction is for objects.
1103
1121
            # transaction.register_clean(history)
 
1122
        for hook in Branch.hooks['set_rh']:
 
1123
            hook(self, rev_history)
1104
1124
 
1105
1125
    @needs_read_lock
1106
1126
    def revision_history(self):