~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commit.py

  • Committer: Robert Collins
  • Date: 2007-09-04 04:12:07 UTC
  • mfrom: (2794 +trunk)
  • mto: (2592.3.126 repository)
  • mto: This revision was merged to the branch mainline in revision 2795.
  • Revision ID: robertc@robertcollins.net-20070904041207-zb3l8hfco0sp6hu8
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
254
254
            self._check_bound_branch()
255
255
 
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()
258
258
 
259
259
            if self.config is None:
260
260
                self.config = self.branch.get_config()
275
275
            # information in the progress bar during the relevant stages.
276
276
            self.pb_stage_name = ""
277
277
            self.pb_stage_count = 0
278
 
            self.pb_stage_total = 4
 
278
            self.pb_stage_total = 5
279
279
            if self.bound_branch:
280
280
                self.pb_stage_total += 1
281
281
            self.pb.show_pct = False
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)
 
299
            
299
300
            try:
300
301
                self._update_builder_with_changes()
301
302
                self._check_pointless()
315
316
 
316
317
                # Add revision data to the local branch
317
318
                self.rev_id = self.builder.commit(self.message)
 
319
 
318
320
            except:
319
321
                self.builder.abort()
320
322
                raise
321
323
 
 
324
            self._process_pre_hooks(old_revno, new_revno)
 
325
 
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)
343
347
        finally:
344
348
            self._cleanup()
345
349
        return self.rev_id
465
469
            new_revno = 1
466
470
        return old_revno,new_revno
467
471
 
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)
 
476
 
 
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
473
482
        # 0.15)
474
483
        if self.config.post_commit() is not None:
479
488
                              {'branch':self.branch,
480
489
                               'bzrlib':bzrlib,
481
490
                               'rev_id':self.rev_id})
 
491
        # process new style post commit hooks
 
492
        self._process_hooks("post_commit", old_revno, new_revno)
 
493
 
 
494
    def _process_hooks(self, hook_name, old_revno, new_revno):
 
495
        if not Branch.hooks[hook_name]:
 
496
            return
 
497
        
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]
494
510
        else:
495
511
            old_revid = bzrlib.revision.NULL_REVISION
496
 
        for hook in Branch.hooks['post_commit']:
 
512
        
 
513
        if hook_name == "pre_commit":
 
514
            future_tree = self.builder.revision_tree()
 
515
            tree_delta = future_tree.changes_from(self.basis_tree,
 
516
                                             include_root=True)
 
517
        
 
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,
508
 
                self.rev_id)
 
529
            if hook_name == "post_commit":
 
530
                hook(hook_local, hook_master, old_revno, old_revid, new_revno,
 
531
                     self.rev_id)
 
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)
509
536
 
510
537
    def _cleanup(self):
511
538
        """Cleanup any open locks, progress bars etc."""