~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/workingtree_implementations/test_commit.py

  • Committer: NamNguyen
  • Date: 2007-08-01 06:14:14 UTC
  • mto: (2789.1.1 ianc-integration)
  • mto: This revision was merged to the branch mainline in revision 2790.
  • Revision ID: namnguyen-20070801061414-u0tzrfgcz6z604lz
``Branch.hooks`` now supports ``pre_commit`` hook.

The hook's signature is

::

  hook(local, master, old_revno, old_revid, new_revno, new_revid,
       deleted_paths, added_paths, future_revision_tree)

``deleted_paths`` and ``added_paths`` are lists of paths. Renamed paths are
recorded in both ``deleted_paths`` and ``added_paths`` (i.e. deleted then
added).

``future_revision_tree`` is obtained from ``CommitBuilder.revision_tree``
to save hooks from getting it from the branch again.

For example, hooks can get a file:

::

  for path in added_paths:
      id = future_revision_tree.path2id(path)
      if future_revision_tree.kind(id) == 'file':
          file = future_revision_tree.get_file(id)
          ...

or export a tree and do ``make check`` or similar

::

  import bzrlib.export
  bzrlib.export.export(future_revision_tree, 'tmp_space')


If the commit is to be rejected, hooks should raise an ``Exception``.

Show diffs side-by-side

added added

removed removed

Lines of Context:
354
354
        # into the factory for this test - just make the test ui factory
355
355
        # pun as a reporter. Then we can check the ordering is right.
356
356
        tree.commit('second post', specific_files=['b'])
357
 
        # 4 steps, the first of which is reported 2 times, once per dir
 
357
        # 5 steps, the first of which is reported 2 times, once per dir
358
358
        self.assertEqual(
359
 
            [('update', 1, 4, 'Collecting changes [Directory 0] - Stage'),
360
 
             ('update', 1, 4, 'Collecting changes [Directory 1] - Stage'),
361
 
             ('update', 2, 4, 'Saving data locally - Stage'),
362
 
             ('update', 3, 4, 'Updating the working tree - Stage'),
363
 
             ('update', 4, 4, 'Running post commit hooks - Stage')],
 
359
            [('update', 1, 5, 'Collecting changes [Directory 0] - Stage'),
 
360
             ('update', 1, 5, 'Collecting changes [Directory 1] - Stage'),
 
361
             ('update', 2, 5, 'Saving data locally - Stage'),
 
362
             ('update', 3, 5, 'Running pre commit hooks - Stage'),
 
363
             ('update', 4, 5, 'Updating the working tree - Stage'),
 
364
             ('update', 5, 5, 'Running post commit hooks - Stage')],
364
365
            factory._calls
365
366
           )
366
367
 
367
 
    def test_commit_progress_shows_hook_names(self):
 
368
    def test_commit_progress_shows_post_hook_names(self):
368
369
        tree = self.make_branch_and_tree('.')
369
370
        # set a progress bar that captures the calls so we can see what is 
370
371
        # emitted
378
379
        branch.Branch.hooks.name_hook(a_hook, 'hook name')
379
380
        tree.commit('first post')
380
381
        self.assertEqual(
381
 
            [('update', 1, 4, 'Collecting changes [Directory 0] - Stage'),
382
 
             ('update', 1, 4, 'Collecting changes [Directory 1] - Stage'),
383
 
             ('update', 2, 4, 'Saving data locally - Stage'),
384
 
             ('update', 3, 4, 'Updating the working tree - Stage'),
385
 
             ('update', 4, 4, 'Running post commit hooks - Stage'),
386
 
             ('update', 4, 4, 'Running post commit hooks [hook name] - Stage'),
387
 
             ],
388
 
            factory._calls
389
 
           )
390
 
 
391
 
 
392
 
 
 
382
            [('update', 1, 5, 'Collecting changes [Directory 0] - Stage'),
 
383
             ('update', 1, 5, 'Collecting changes [Directory 1] - Stage'),
 
384
             ('update', 2, 5, 'Saving data locally - Stage'),
 
385
             ('update', 3, 5, 'Running pre commit hooks - Stage'),
 
386
             ('update', 4, 5, 'Updating the working tree - Stage'),
 
387
             ('update', 5, 5, 'Running post commit hooks - Stage'),
 
388
             ('update', 5, 5, 'Running post commit hooks [hook name] - Stage'),
 
389
             ],
 
390
            factory._calls
 
391
           )
 
392
 
 
393
    def test_commit_progress_shows_pre_hook_names(self):
 
394
        tree = self.make_branch_and_tree('.')
 
395
        # set a progress bar that captures the calls so we can see what is 
 
396
        # emitted
 
397
        self.old_ui_factory = ui.ui_factory
 
398
        self.addCleanup(self.restoreDefaults)
 
399
        factory = CapturingUIFactory()
 
400
        ui.ui_factory = factory
 
401
        def a_hook(_, _2, _3, _4, _5, _6, _7, _8, _9):
 
402
            pass
 
403
        branch.Branch.hooks.install_hook('pre_commit', a_hook)
 
404
        branch.Branch.hooks.name_hook(a_hook, 'hook name')
 
405
        tree.commit('first post')
 
406
        self.assertEqual(
 
407
            [('update', 1, 5, 'Collecting changes [Directory 0] - Stage'),
 
408
             ('update', 1, 5, 'Collecting changes [Directory 1] - Stage'),
 
409
             ('update', 2, 5, 'Saving data locally - Stage'),
 
410
             ('update', 3, 5, 'Running pre commit hooks - Stage'),
 
411
             ('update', 3, 5, 'Running pre commit hooks [hook name] - Stage'),
 
412
             ('update', 4, 5, 'Updating the working tree - Stage'),
 
413
             ('update', 5, 5, 'Running post commit hooks - Stage'),
 
414
             ],
 
415
            factory._calls
 
416
           )