Hooks ===== Introduction ------------ A hook of type *xxx* of class *yyy* needs to be registered using:: yyy.hooks.install_named_hook("xxx", ...) See `Using hooks`_ in the User Guide for examples. .. _Using hooks: ../user-guide/index.html#using-hooks The class that contains each hook is given in parentheses immediately after each hook type below. Each description also indicates whether the hook runs on the client (the machine where bzr was invoked) or the server (the machine addressed by the branch URL). These may be, but are not necessarily, the same machine. Plugins (including hooks) are run on the server if any of these is true: * The remote branch is on the same machine as the client, and the client has plugins enabled. * The connection is via a smart server (accessed with a URL starting with "bzr://", "bzr+ssh://" or "bzr+http://", or accessed via a "http://" URL when a smart server is available via HTTP), and that server has plugins enabled. open (Branch) ------------- Called after a Branch object is opened, with the Branch object. Runs on the client and on the server. post_push (Branch) ------------------ Run after ``push`` has completed. Runs on the client. The hook signature is (push_result), containing the members source_branch Where the data is being pushed from (read locked). This should be the lowest latency branch. target_branch The direct location where data is being sent (write locked). master_branch Either target_branch, or if the target is a bound branch, it will be the master location (write locked). local_branch If the target is a bound branch, this will be the target branch, else it will be None. old_revno The revision number (eg 10) of the branch before the push. old_revid The revision id (eg joe@foo.com-1234234-aoeua34) before the push. new_revno The revision number (eg 12) of the branch after the push. new_revid The revision id (eg joe@foo.com-5676566-boa234a) after the push. post_pull (Branch) ------------------ Run after ``pull`` has completed. Runs on the client. The hook signature is (push_result) containing the members (source, local, master, old_revno, old_revid, new_revno, new_revid) where local is the local target branch or None, master is the target master branch, and the rest should be self explanatory. The source is read-locked and the target branches are write-locked. Source will be the local low-latency branch. start_commit (MutableTree) -------------------------- Run on the working tree before ``commit`` starts processing it. Runs on the client. Unlike the ``pre_commit`` hook (see below), the ``start_commit`` hook can safely change the working tree. The hook signature is (tree) where tree is a MutableTree object. pre_commit (Branch) ------------------- Run before ``commit`` has completed. Runs on the client. The hook signature is (local, master, old_revno, old_revid, future_revno, future_revid, tree_delta, future_tree) where old_revno is NULL_REVISION for the first commit to a branch, tree_delta is a TreeDelta object describing changes from the basis revision, and future_tree is an in-memory tree obtained from CommitBuilder.revision_tree(). Hooks MUST NOT modify tree_delta and future_tree. post_commit (Branch) -------------------- Run after ``commit`` has completed. Runs on the client. The hook signature is (local, master, old_revno, old_revid, new_revno, new_revid) old_revid is NULL_REVISION for the first commit to a branch. post_uncommit (Branch) ---------------------- Run after ``uncommit`` has completed. Runs on the client. The api signature is (local, master, old_revno, old_revid, new_revno, new_revid) where local is the local branch or None, master is the target branch, and an empty branch receives new_revno of 0, new_revid of None. pre_change_branch_tip (Branch) ------------------------------- Run before a branch tip has been changed, while the branch is write-locked. Runs on the client and on the server. Note that push, pull, commit and uncommit all invoke this hook. The hook signature is (params), where params is an object containing the members branch The branch whose tip has been changed. old_revno The revision number (eg 10) of the branch before the change. old_revid The revision id (eg joe@foo.com-1234234-aoeua34) before the change. new_revno The revision number (eg 12) of the branch after the change. new_revid The revision id (eg joe@foo.com-5676566-boa234a) after the change. The old_revno and new_revno members are integers, as the head revision never has a dotted revision number. post_change_branch_tip (Branch) ------------------------------- Run after a branch tip has been changed but while the branch is still write-locked. Runs on the client and on the server. Note that push, pull, commit and uncommit all invoke this hook. The hook signature is (params), where params is an object containing the members branch The branch whose tip has been changed. old_revno The revision number (eg 10) of the branch before the change. old_revid The revision id (eg joe@foo.com-1234234-aoeua34) before the change. new_revno The revision number (eg 12) of the branch after the change. new_revid The revision id (eg joe@foo.com-5676566-boa234a) after the change. The old_revno and new_revno members are integers, as the head revision never has a dotted revision number. set_rh (Branch) --------------- Note: This hook is now deprecated and will be removed in the near future. Please use the ``post_change_branch_tip`` hook instead. transform_fallback_location (Branch) ------------------------------------ Invoked as a stacked branch activates its fallback locations. The hook signature is (branch, url) where: branch The branch being opened. Note that as it does not yet have its fallback locations activated, the branch should be treated as half-built. url The URL that the branch specified for its fallback location. The hook must return a URL for the branch containing the fallback location. If multiple hooks are registered, the order in which they will be called is undefined and subject to change. (New in 1.9) server_started (SmartTCPServer) ------------------------------- Invoked whenever the server starts serving a directory. Runs on the server. The hook signature is (backing urls, public url), where: backing_url A list of (string) URLs giving the server-specific directory locations. public_url The public URL for the directory. server_stopped (SmartTCPServer) ------------------------------- Invoked whenever the server stops serving a directory. Runs on the server. The hook signature is the same as ``server_started``. lock_acquired (LockDir) ---------------------------- Called with a LockResult object when a lock has been successfully acquired. Runs on the client and on the server. (New in 1.8.) lock_released (LockDir) ---------------------------- Called with a LockResult object when a lock has been successfully released. Runs on the client. (New in 1.8.) commit_message_template (msgeditor) ----------------------------------- Invoked by commit to generate a commit message template. Each hook can modify the commit message template. The hook signature is (commit, start_message), where: commit A commit object, for the commit in progress start_message The original commit message, None initially. The hook should return a new commit message template. (New in 1.10.) extend_command (Commands) ------------------------- Invoked by the command line interface when constructing a command object, this hook permits the object to be altered after construction - for instance, to add options, hook into callbacks that that command offers or more. The hook signature is hook(cmd) -> None. This hook was added in 1.13.