/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/commit.py

Changed ``pre_commit`` hook signature.

The hook's signature is now

  ::

    hook(local, master, old_revno, old_revid, new_revno, new_revid,
         affected_ids, future_revision_tree)

``affected_ids`` is a dictionary of (change_type, ids). change_type is
a string describing the change (e.g. 'added', 'deleted', 'modified'), and
ids is a list of inventory entry ids.

Hooks can get an added file easier than before:

  ::

    for id in affected_ids.get('added', []):
        if future_revision_tree.kind(id) == 'file':
            file = future_revision_tree.get_file(id)
            ...

Show diffs side-by-side

added added

removed removed

Lines of Context:
235
235
        self.committer = committer
236
236
        self.strict = strict
237
237
        self.verbose = verbose
238
 
        self.deleted_paths = set()
239
 
        self.added_paths = set()
 
238
        self.affected_ids = {}
240
239
 
241
240
        if reporter is None and self.reporter is None:
242
241
            self.reporter = NullCommitReporter()
488
487
        self._process_hooks("post_commit", old_revno, new_revno)
489
488
 
490
489
    def _process_hooks(self, hook_name, old_revno, new_revno):
 
490
        if not Branch.hooks[hook_name]:
 
491
            return
 
492
        
491
493
        # new style commit hooks:
492
494
        if not self.bound_branch:
493
495
            hook_master = self.branch
502
504
            old_revid = self.parents[0]
503
505
        else:
504
506
            old_revid = bzrlib.revision.NULL_REVISION
 
507
            
505
508
        for hook in Branch.hooks[hook_name]:
506
509
            # show the running hook in the progress bar. As hooks may
507
510
            # end up doing nothing (e.g. because they are not configured by
517
520
                hook(hook_local, hook_master, old_revno, old_revid, new_revno,
518
521
                     self.rev_id)
519
522
            elif hook_name == "pre_commit":
520
 
                future_tree = self.builder.revision_tree()
521
 
                added = list(self.added_paths)
522
 
                added.sort()
523
 
                deleted = list(self.deleted_paths)
524
 
                deleted.sort()
525
523
                hook(hook_local, hook_master,
526
524
                     old_revno, old_revid, new_revno, self.rev_id,
527
 
                     deleted, added, future_tree)
 
525
                     self.affected_ids, self.builder.revision_tree())
528
526
 
529
527
    def _cleanup(self):
530
528
        """Cleanup any open locks, progress bars etc."""
637
635
                ie.revision = None
638
636
                self.builder.record_entry_contents(ie, self.parent_invs, path,
639
637
                                                   self.basis_tree)
640
 
                self.added_paths.add(path)
641
638
 
642
639
        # Report what was deleted. We could skip this when no deletes are
643
640
        # detected to gain a performance win, but it arguably serves as a
645
642
        for path, ie in self.basis_inv.iter_entries():
646
643
            if ie.file_id not in self.builder.new_inventory:
647
644
                self.reporter.deleted(path)
648
 
                self.deleted_paths.add(path)
 
645
                self.affected_ids.setdefault('deleted', []).append(ie.file_id)
649
646
 
650
647
    def _populate_from_inventory(self, specific_files):
651
648
        """Populate the CommitBuilder by walking the working tree inventory."""
763
760
        else:
764
761
            basis_ie = None
765
762
        change = ie.describe_change(basis_ie, ie)
 
763
        if change != 'unchanged' and path != '':
 
764
            self.affected_ids.setdefault(change, []).append(ie.file_id)
766
765
        if change in (InventoryEntry.RENAMED, 
767
766
            InventoryEntry.MODIFIED_AND_RENAMED):
768
767
            old_path = self.basis_inv.id2path(ie.file_id)
769
768
            self.reporter.renamed(change, old_path, path)
770
 
            self.deleted_paths.add(old_path)
771
 
            self.added_paths.add(path)
772
769
        else:
773
770
            self.reporter.snapshot_change(change, path)
774
 
            if change == 'added' and path != '':
775
 
                self.added_paths.add(path)
776
771
 
777
772
    def _set_progress_stage(self, name, entries_title=None):
778
773
        """Set the progress stage and emit an update to the progress bar."""