254
254
self._check_bound_branch()
256
256
# Check that the working tree is up to date
257
old_revno,new_revno = self._check_out_of_date_tree()
257
old_revno, new_revno = self._check_out_of_date_tree()
259
259
if self.config is None:
260
260
self.config = self.branch.get_config()
296
296
entries_title="Directory")
297
297
self.builder = self.branch.get_commit_builder(self.parents,
298
298
self.config, timestamp, timezone, committer, revprops, rev_id)
300
301
self._update_builder_with_changes()
301
302
self._check_pointless()
316
317
# Add revision data to the local branch
317
318
self.rev_id = self.builder.commit(self.message)
319
321
self.builder.abort()
324
self._process_pre_hooks(old_revno, new_revno)
322
326
# Upload revision data to the master.
323
327
# this will propagate merged revisions too if needed.
324
328
if self.bound_branch:
339
343
rev_tree = self.builder.revision_tree()
340
344
self.work_tree.set_parent_trees([(self.rev_id, rev_tree)])
341
345
self.reporter.completed(new_revno, self.rev_id)
342
self._process_hooks(old_revno, new_revno)
346
self._process_post_hooks(old_revno, new_revno)
345
349
return self.rev_id
466
470
return old_revno,new_revno
468
def _process_hooks(self, old_revno, new_revno):
469
"""Process any registered commit hooks."""
472
def _process_pre_hooks(self, old_revno, new_revno):
473
"""Process any registered pre commit hooks."""
474
self._set_progress_stage("Running pre_commit hooks")
475
self._process_hooks("pre_commit", old_revno, new_revno)
477
def _process_post_hooks(self, old_revno, new_revno):
478
"""Process any registered post commit hooks."""
470
479
# Process the post commit hooks, if any
471
self._set_progress_stage("Running post commit hooks")
480
self._set_progress_stage("Running post_commit hooks")
472
481
# old style commit hooks - should be deprecated ? (obsoleted in
474
483
if self.config.post_commit() is not None:
479
488
{'branch':self.branch,
481
490
'rev_id':self.rev_id})
491
# process new style post commit hooks
492
self._process_hooks("post_commit", old_revno, new_revno)
494
def _process_hooks(self, hook_name, old_revno, new_revno):
495
if not Branch.hooks[hook_name]:
482
498
# new style commit hooks:
483
499
if not self.bound_branch:
484
500
hook_master = self.branch
493
509
old_revid = self.parents[0]
495
511
old_revid = bzrlib.revision.NULL_REVISION
496
for hook in Branch.hooks['post_commit']:
513
if hook_name == "pre_commit":
514
future_tree = self.builder.revision_tree()
515
tree_delta = future_tree.changes_from(self.basis_tree,
518
for hook in Branch.hooks[hook_name]:
497
519
# show the running hook in the progress bar. As hooks may
498
520
# end up doing nothing (e.g. because they are not configured by
499
521
# the user) this is still showing progress, not showing overall
500
522
# actions - its up to each plugin to show a UI if it want's to
501
523
# (such as 'Emailing diff to foo@example.com').
502
self.pb_stage_name = "Running post commit hooks [%s]" % \
503
Branch.hooks.get_hook_name(hook)
524
self.pb_stage_name = "Running %s hooks [%s]" % \
525
(hook_name, Branch.hooks.get_hook_name(hook))
504
526
self._emit_progress()
505
527
if 'hooks' in debug.debug_flags:
506
528
mutter("Invoking commit hook: %r", hook)
507
hook(hook_local, hook_master, old_revno, old_revid, new_revno,
529
if hook_name == "post_commit":
530
hook(hook_local, hook_master, old_revno, old_revid, new_revno,
532
elif hook_name == "pre_commit":
533
hook(hook_local, hook_master,
534
old_revno, old_revid, new_revno, self.rev_id,
535
tree_delta, future_tree)
510
537
def _cleanup(self):
511
538
"""Cleanup any open locks, progress bars etc."""