/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

Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
72
72
                            is_inside_or_parent_of_any,
73
73
                            quotefn, sha_file, split_lines)
74
74
from bzrlib.testament import Testament
75
 
from bzrlib.trace import mutter, note, warning
 
75
from bzrlib.trace import mutter, note, warning, is_quiet
76
76
from bzrlib.xml5 import serializer_v5
77
77
from bzrlib.inventory import Inventory, InventoryEntry
78
78
from bzrlib import symbol_versioning
108
108
    def renamed(self, change, old_path, new_path):
109
109
        pass
110
110
 
 
111
    def is_verbose(self):
 
112
        return False
 
113
 
111
114
 
112
115
class ReportCommitToLog(NullCommitReporter):
113
116
 
134
137
 
135
138
    def completed(self, revno, rev_id):
136
139
        self._note('Committed revision %d.', revno)
137
 
    
 
140
 
138
141
    def deleted(self, file_id):
139
142
        self._note('deleted %s', file_id)
140
143
 
147
150
    def renamed(self, change, old_path, new_path):
148
151
        self._note('%s %s => %s', change, old_path, new_path)
149
152
 
 
153
    def is_verbose(self):
 
154
        return True
 
155
 
150
156
 
151
157
class Commit(object):
152
158
    """Task of committing a new revision.
163
169
    def __init__(self,
164
170
                 reporter=None,
165
171
                 config=None):
166
 
        if reporter is not None:
167
 
            self.reporter = reporter
168
 
        else:
169
 
            self.reporter = NullCommitReporter()
 
172
        """Create a Commit object.
 
173
 
 
174
        :param reporter: the default reporter to use or None to decide later
 
175
        """
 
176
        self.reporter = reporter
170
177
        self.config = config
171
 
        
 
178
 
172
179
    def commit(self,
173
180
               message=None,
174
181
               timestamp=None,
209
216
 
210
217
        :param revprops: Properties for new revision
211
218
        :param local: Perform a local only commit.
 
219
        :param reporter: the reporter to use or None for the default
 
220
        :param verbose: if True and the reporter is not None, report everything
212
221
        :param recursive: If set to 'down', commit in any subtrees that have
213
222
            pending changes of any sort during this commit.
214
223
        """
246
255
        self.strict = strict
247
256
        self.verbose = verbose
248
257
 
249
 
        if reporter is None and self.reporter is None:
250
 
            self.reporter = NullCommitReporter()
251
 
        elif reporter is not None:
252
 
            self.reporter = reporter
253
 
 
254
258
        self.work_tree.lock_write()
255
259
        self.pb = bzrlib.ui.ui_factory.nested_progress_bar()
256
260
        self.basis_tree = self.work_tree.basis_tree()
266
270
            # Check that the working tree is up to date
267
271
            old_revno, new_revno = self._check_out_of_date_tree()
268
272
 
 
273
            # Complete configuration setup
 
274
            if reporter is not None:
 
275
                self.reporter = reporter
 
276
            elif self.reporter is None:
 
277
                self.reporter = self._select_reporter()
269
278
            if self.config is None:
270
279
                self.config = self.branch.get_config()
271
280
 
369
378
            self._cleanup()
370
379
        return self.rev_id
371
380
 
 
381
    def _select_reporter(self):
 
382
        """Select the CommitReporter to use."""
 
383
        if is_quiet():
 
384
            return NullCommitReporter()
 
385
        return ReportCommitToLog()
 
386
 
372
387
    def _any_real_changes(self):
373
388
        """Are there real changes between new_inventory and basis?
374
389
 
671
686
                self.builder.record_entry_contents(ie, self.parent_invs, path,
672
687
                                                   self.basis_tree, None)
673
688
 
674
 
        # Report what was deleted. We could skip this when no deletes are
675
 
        # detected to gain a performance win, but it arguably serves as a
676
 
        # 'safety check' by informing the user whenever anything disappears.
677
 
        for path, ie in self.basis_inv.iter_entries():
678
 
            if ie.file_id not in self.builder.new_inventory:
679
 
                self.reporter.deleted(path)
 
689
        # Report what was deleted.
 
690
        if self.reporter.is_verbose():
 
691
            for path, ie in self.basis_inv.iter_entries():
 
692
                if ie.file_id not in self.builder.new_inventory:
 
693
                    self.reporter.deleted(path)
680
694
 
681
695
    def _populate_from_inventory(self, specific_files):
682
696
        """Populate the CommitBuilder by walking the working tree inventory."""
685
699
            for unknown in self.work_tree.unknowns():
686
700
                raise StrictCommitFailed()
687
701
               
 
702
        report_changes = self.reporter.is_verbose()
688
703
        deleted_ids = []
689
704
        deleted_paths = set()
690
705
        work_inv = self.work_tree.inventory
743
758
            # without it thanks to a unicode normalisation issue. :-(
744
759
            definitely_changed = kind != existing_ie.kind
745
760
            self._record_entry(path, file_id, specific_files, kind, name,
746
 
                parent_id, definitely_changed, existing_ie, content_summary)
 
761
                parent_id, definitely_changed, existing_ie, report_changes,
 
762
                content_summary)
747
763
 
748
764
        # Unversion IDs that were found to be deleted
749
765
        self.work_tree.unversion(deleted_ids)
774
790
            return self.work_tree.get_reference_revision(file_id)
775
791
 
776
792
    def _record_entry(self, path, file_id, specific_files, kind, name,
777
 
        parent_id, definitely_changed, existing_ie, content_summary):
 
793
        parent_id, definitely_changed, existing_ie, report_changes,
 
794
        content_summary):
778
795
        "Record the new inventory entry for a path if any."
779
796
        # mutter('check %s {%s}', path, file_id)
780
797
        if (not specific_files or 
795
812
        if ie is not None:
796
813
            self.builder.record_entry_contents(ie, self.parent_invs,
797
814
                path, self.work_tree, content_summary)
798
 
            self._report_change(ie, path)
 
815
            if report_changes:
 
816
                self._report_change(ie, path)
799
817
        return ie
800
818
 
801
819
    def _report_change(self, ie, path):