/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
5557.1.11 by John Arbash Meinel
Remove extra pdb stuff
1
# Copyright (C) 2005-2011 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
485 by Martin Pool
- move commit code into its own module
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
1248 by Martin Pool
- new weave based cleanup [broken]
7
#
485 by Martin Pool
- move commit code into its own module
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
1248 by Martin Pool
- new weave based cleanup [broken]
12
#
485 by Martin Pool
- move commit code into its own module
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
485 by Martin Pool
- move commit code into its own module
16
6379.6.1 by Jelmer Vernooij
Import absolute_import in a few places.
17
from __future__ import absolute_import
485 by Martin Pool
- move commit code into its own module
18
2921.4.6 by Robert Collins
Typos found by Rob Weir.
19
# The newly committed revision is going to have a shape corresponding
2921.4.4 by Robert Collins
Minor import cleanup in commit.py.
20
# to that of the working tree.  Files that are not in the
1248 by Martin Pool
- new weave based cleanup [broken]
21
# working tree and that were in the predecessor are reported as
22
# removed --- this can include files that were either removed from the
23
# inventory or deleted in the working tree.  If they were only
24
# deleted from disk, they are removed from the working inventory.
25
26
# We then consider the remaining entries, which will be in the new
27
# version.  Directory entries are simply copied across.  File entries
28
# must be checked to see if a new version of the file should be
2921.4.4 by Robert Collins
Minor import cleanup in commit.py.
29
# recorded.  For each parent revision tree, we check to see what
1248 by Martin Pool
- new weave based cleanup [broken]
30
# version of the file was present.  If the file was present in at
31
# least one tree, and if it was the same version in all the trees,
32
# then we can just refer to that version.  Otherwise, a new version
33
# representing the merger of the file versions must be added.
34
35
# TODO: Update hashcache before and after - or does the WorkingTree
36
# look after that?
1245 by Martin Pool
doc
37
1339 by Martin Pool
- doc
38
# TODO: Rather than mashing together the ancestry and storing it back,
39
# perhaps the weave should have single method which does it all in one
40
# go, avoiding a lot of redundant work.
1335 by Martin Pool
doc
41
1341 by Martin Pool
- doc
42
# TODO: Perhaps give a warning if one of the revisions marked as
43
# merged is already in the ancestry, and then don't record it as a
44
# distinct parent.
45
1343 by Martin Pool
- fix up test for merge of trees
46
# TODO: If the file is newly merged but unchanged from the version it
47
# merges from, then it should still be reported as newly added
48
# relative to the basis revision.
49
1910.7.17 by Andrew Bennetts
Various cosmetic changes.
50
# TODO: Change the parameter 'rev_id' to 'revision_id' to be consistent with
51
# the rest of the code; add a deprecation of the old name.
1194 by Martin Pool
- [BROKEN] more progress of commit into weaves
52
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
53
from . import (
2560.1.4 by Robert Collins
Allow -Dhooks to get the hooks invoked during commit logged.
54
    debug,
1551.8.30 by Aaron Bentley
Tweak from review comments
55
    errors,
3830.3.3 by Martin Pool
commit should log original exception when aborting write group
56
    trace,
5856.1.4 by Jelmer Vernooij
Revert unnecessary change.
57
    tree,
5582.10.6 by Jelmer Vernooij
Fix ui imports.
58
    ui,
1551.8.30 by Aaron Bentley
Tweak from review comments
59
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
60
from .branch import Branch
61
from .cleanup import OperationWithCleanups
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
62
import breezy.config
6734.1.20 by Jelmer Vernooij
Move errors.
63
from .errors import (BzrError,
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
64
                     ConflictsInTree,
65
                     StrictCommitFailed
66
                     )
67
from .osutils import (get_user_encoding,
68
                      is_inside_any,
69
                      minimum_path_selection,
70
                      splitpath,
71
                      )
72
from .trace import mutter, note, is_quiet
6670.4.1 by Jelmer Vernooij
Update imports.
73
from .bzr.inventory import Inventory, InventoryEntry, make_entry
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
74
from .urlutils import unescape_for_display
75
from .i18n import gettext
76
1189 by Martin Pool
- BROKEN: partial support for commit into weave
77
6734.1.20 by Jelmer Vernooij
Move errors.
78
class PointlessCommit(BzrError):
79
80
    _fmt = "No changes to commit"
81
82
83
class CannotCommitSelectedFileMerge(BzrError):
84
85
    _fmt = 'Selected-file commit of merges is not supported yet:'\
86
        ' files %(files_str)s'
87
88
    def __init__(self, files):
89
        files_str = ', '.join(files)
90
        BzrError.__init__(self, files=files, files_str=files_str)
91
92
93
class ExcludesUnsupported(BzrError):
94
95
    _fmt = ('Excluding paths during commit is not supported by '
96
            'repository at %(repository)r.')
97
98
    def __init__(self, repository):
99
        BzrError.__init__(self, repository=repository)
100
101
6699.1.1 by Jelmer Vernooij
Support excludes with "bzr commit -x".
102
def filter_excluded(iter_changes, exclude):
103
    """Filter exclude filenames.
104
105
    :param iter_changes: iter_changes function
106
    :param exclude: List of paths to exclude
107
    :return: iter_changes function
108
    """
109
    for change in iter_changes:
110
        old_path = change[1][0]
111
        new_path = change[1][1]
112
113
        new_excluded = (new_path is not None and
114
            is_inside_any(exclude, new_path))
115
116
        old_excluded = (old_path is not None and
117
            is_inside_any(exclude, old_path))
118
119
        if old_excluded and new_excluded:
120
            continue
121
122
        if old_excluded or new_excluded:
123
            # TODO(jelmer): Perhaps raise an error here instead?
124
            continue
125
126
        yield change
127
128
1189 by Martin Pool
- BROKEN: partial support for commit into weave
129
class NullCommitReporter(object):
130
    """I report on progress of a commit."""
1185.12.8 by Aaron Bentley
Fixed commit so all output comes though CommitReporter
131
6630.1.1 by Jelmer Vernooij
Remove deprecated functionality.
132
    def started(self, revno, revid, location):
2789.2.10 by Ian Clatworthy
focus on performance gains, not better reporting
133
        pass
134
135
    def snapshot_change(self, change, path):
136
        pass
137
138
    def completed(self, revno, rev_id):
139
        pass
140
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
141
    def deleted(self, path):
2789.2.10 by Ian Clatworthy
focus on performance gains, not better reporting
142
        pass
143
144
    def missing(self, path):
145
        pass
146
147
    def renamed(self, change, old_path, new_path):
148
        pass
149
2789.2.11 by Ian Clatworthy
remove more reporting stuff
150
    def is_verbose(self):
151
        return False
152
153
154
class ReportCommitToLog(NullCommitReporter):
155
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
156
    def _note(self, format, *args):
157
        """Output a message.
158
2522.2.3 by Ian Clatworthy
Revert logging just to stderr in commit as broke unicode filenames (#120930)
159
        Subclasses may choose to override this method.
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
160
        """
2522.2.3 by Ian Clatworthy
Revert logging just to stderr in commit as broke unicode filenames (#120930)
161
        note(format, *args)
1668.1.5 by Martin Pool
[broken] fix up display of files changed by a commit
162
2789.2.4 by Ian Clatworthy
make change reporting smarter for initial commit
163
    def snapshot_change(self, change, path):
6138.3.2 by Jonathan Riddell
gettext-ify bzrlib/commit.py
164
        if path == '' and change in (gettext('added'), gettext('modified')):
2789.2.10 by Ian Clatworthy
focus on performance gains, not better reporting
165
            return
2789.2.11 by Ian Clatworthy
remove more reporting stuff
166
        self._note("%s %s", change, path)
2789.2.4 by Ian Clatworthy
make change reporting smarter for initial commit
167
6630.1.3 by Jelmer Vernooij
Make location argument non-optional.
168
    def started(self, revno, rev_id, location):
6630.1.1 by Jelmer Vernooij
Remove deprecated functionality.
169
        self._note(
170
            gettext('Committing to: %s'),
171
            unescape_for_display(location, 'utf-8'))
2747.6.5 by Daniel Watkins
Added 'started' hook to CommitReporters and moved location functionality from completed hook into it.
172
173
    def completed(self, revno, rev_id):
6138.3.2 by Jonathan Riddell
gettext-ify bzrlib/commit.py
174
        self._note(gettext('Committed revision %d.'), revno)
5086.6.2 by Robert Collins
Log revision id as well as revno when committing.
175
        # self._note goes to the console too; so while we want to log the
176
        # rev_id, we can't trivially only log it. (See bug 526425). Long
177
        # term we should rearrange the reporting structure, but for now
178
        # we just mutter seperately. We mutter the revid and revno together
179
        # so that concurrent bzr invocations won't lead to confusion.
180
        mutter('Committed revid %s as revno %d.', rev_id, revno)
2789.2.4 by Ian Clatworthy
make change reporting smarter for initial commit
181
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
182
    def deleted(self, path):
6138.3.2 by Jonathan Riddell
gettext-ify bzrlib/commit.py
183
        self._note(gettext('deleted %s'), path)
1185.12.8 by Aaron Bentley
Fixed commit so all output comes though CommitReporter
184
185
    def missing(self, path):
6138.3.2 by Jonathan Riddell
gettext-ify bzrlib/commit.py
186
        self._note(gettext('missing %s'), path)
1189 by Martin Pool
- BROKEN: partial support for commit into weave
187
1668.1.5 by Martin Pool
[broken] fix up display of files changed by a commit
188
    def renamed(self, change, old_path, new_path):
2789.2.11 by Ian Clatworthy
remove more reporting stuff
189
        self._note('%s %s => %s', change, old_path, new_path)
1668.1.5 by Martin Pool
[broken] fix up display of files changed by a commit
190
2789.2.1 by Ian Clatworthy
Make commit less verbose by default
191
    def is_verbose(self):
192
        return True
193
1508.1.6 by Robert Collins
Move Branch.unknowns() to WorkingTree.
194
1189 by Martin Pool
- BROKEN: partial support for commit into weave
195
class Commit(object):
196
    """Task of committing a new revision.
197
198
    This is a MethodObject: it accumulates state as the commit is
199
    prepared, and then it is discarded.  It doesn't represent
200
    historical revisions, just the act of recording a new one.
201
202
            missing_ids
203
            Modified to hold a list of files that have been deleted from
204
            the working directory; these should be removed from the
205
            working inventory.
485 by Martin Pool
- move commit code into its own module
206
    """
1189 by Martin Pool
- BROKEN: partial support for commit into weave
207
    def __init__(self,
1442.1.60 by Robert Collins
gpg sign commits if the policy says we need to
208
                 reporter=None,
6351.3.2 by Jelmer Vernooij
Convert some gpg options to config stacks.
209
                 config_stack=None):
2789.2.1 by Ian Clatworthy
Make commit less verbose by default
210
        """Create a Commit object.
211
212
        :param reporter: the default reporter to use or None to decide later
213
        """
214
        self.reporter = reporter
6351.3.2 by Jelmer Vernooij
Convert some gpg options to config stacks.
215
        self.config_stack = config_stack
2789.2.10 by Ian Clatworthy
focus on performance gains, not better reporting
216
5162.4.1 by Aaron Bentley
TreeTransform supports normal commit parameters and includes branch nick.
217
    @staticmethod
6630.1.1 by Jelmer Vernooij
Remove deprecated functionality.
218
    def update_revprops(revprops, branch, authors=None,
5162.4.1 by Aaron Bentley
TreeTransform supports normal commit parameters and includes branch nick.
219
                        local=False, possible_master_transports=None):
220
        if revprops is None:
221
            revprops = {}
222
        if possible_master_transports is None:
223
            possible_master_transports = []
224
        if not 'branch-nick' in revprops:
225
            revprops['branch-nick'] = branch._get_nick(
226
                local,
227
                possible_master_transports)
228
        if authors is not None:
229
            if 'author' in revprops or 'authors' in revprops:
230
                # XXX: maybe we should just accept one of them?
231
                raise AssertionError('author property given twice')
232
            if authors:
233
                for individual in authors:
234
                    if '\n' in individual:
235
                        raise AssertionError('\\n is not a valid character '
236
                                'in an author identity')
237
                revprops['authors'] = '\n'.join(authors)
238
        return revprops
239
1189 by Martin Pool
- BROKEN: partial support for commit into weave
240
    def commit(self,
2367.2.1 by Robert Collins
Remove bzrlib 0.8 compatability where it was making the code unclear or messy. (Robert Collins)
241
               message=None,
1189 by Martin Pool
- BROKEN: partial support for commit into weave
242
               timestamp=None,
243
               timezone=None,
244
               committer=None,
245
               specific_files=None,
246
               rev_id=None,
1276 by Martin Pool
- make Branch.commit accept (and ignore) verbose argument
247
               allow_pointless=True,
1185.16.65 by mbp at sourcefrog
- new commit --strict option
248
               strict=False,
2789.2.10 by Ian Clatworthy
focus on performance gains, not better reporting
249
               verbose=False,
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
250
               revprops=None,
1587.1.8 by Robert Collins
Local commits on unbound branches fail.
251
               working_tree=None,
1607.1.5 by Robert Collins
Make commit verbose mode work!.
252
               local=False,
253
               reporter=None,
2149.1.1 by Aaron Bentley
Provide a message_callback parameter to tree.commit
254
               config=None,
2255.2.218 by Robert Collins
Make the nested tree commit smoke test be more rigourous.
255
               message_callback=None,
3602.1.1 by Robert Collins
Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)
256
               recursive='down',
3565.6.9 by Marius Kruger
Jump through hoops not to open multiple connections when committing to a bound branch.
257
               exclude=None,
5777.6.1 by Jelmer Vernooij
Add --lossy option to 'bzr commit'.
258
               possible_master_transports=None,
259
               lossy=False):
1189 by Martin Pool
- BROKEN: partial support for commit into weave
260
        """Commit working copy as a new revision.
261
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
262
        :param message: the commit message (it or message_callback is required)
4536.3.1 by Robert Collins
Defer doing unversioning of file ids during commit to after completing branch operations. (Robert Collins, bug 282402)
263
        :param message_callback: A callback: message = message_callback(cmt_obj)
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
264
265
        :param timestamp: if not None, seconds-since-epoch for a
266
            postdated/predated commit.
267
4570.4.3 by Robert Collins
Fix a couple of small bugs in the patch - use specific files with record_iter_changs, and the CLI shouldn't generate a filter of [] for commit.
268
        :param specific_files: If not None, commit only those files. An empty
269
            list means 'commit no files'.
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
270
271
        :param rev_id: If set, use this as the new revision id.
1189 by Martin Pool
- BROKEN: partial support for commit into weave
272
            Useful for test or import commands that need to tightly
273
            control what revisions are assigned.  If you duplicate
274
            a revision id that exists elsewhere it is your own fault.
275
            If null (default), a time/random revision id is generated.
1253 by Martin Pool
- test that pointless commits are trapped
276
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
277
        :param allow_pointless: If true (default), commit even if nothing
1253 by Martin Pool
- test that pointless commits are trapped
278
            has changed and no merges are recorded.
1185.16.35 by Martin Pool
- stub for revision properties
279
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
280
        :param strict: If true, don't allow a commit if the working tree
1185.16.65 by mbp at sourcefrog
- new commit --strict option
281
            contains unknown files.
282
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
283
        :param revprops: Properties for new revision
1587.1.8 by Robert Collins
Local commits on unbound branches fail.
284
        :param local: Perform a local only commit.
2789.2.1 by Ian Clatworthy
Make commit less verbose by default
285
        :param reporter: the reporter to use or None for the default
286
        :param verbose: if True and the reporter is not None, report everything
2255.2.218 by Robert Collins
Make the nested tree commit smoke test be more rigourous.
287
        :param recursive: If set to 'down', commit in any subtrees that have
288
            pending changes of any sort during this commit.
3602.1.1 by Robert Collins
Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)
289
        :param exclude: None or a list of relative paths to exclude from the
290
            commit. Pending changes to excluded files will be ignored by the
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
291
            commit.
5777.6.1 by Jelmer Vernooij
Add --lossy option to 'bzr commit'.
292
        :param lossy: When committing to a foreign VCS, ignore any
293
            data that can not be natively represented.
1189 by Martin Pool
- BROKEN: partial support for commit into weave
294
        """
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
295
        operation = OperationWithCleanups(self._commit)
5086.6.1 by Robert Collins
Minor commit tidyup in preparation for hooking around revprops.
296
        self.revprops = revprops or {}
5141.1.1 by Robert Collins
``bzrlib.mutabletree.MutableTree.commit`` will now support a passed in
297
        # XXX: Can be set on __init__ or passed in - this is a bit ugly.
6351.3.2 by Jelmer Vernooij
Convert some gpg options to config stacks.
298
        self.config_stack = config or self.config_stack
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
299
        return operation.run(
300
               message=message,
301
               timestamp=timestamp,
302
               timezone=timezone,
303
               committer=committer,
304
               specific_files=specific_files,
305
               rev_id=rev_id,
306
               allow_pointless=allow_pointless,
307
               strict=strict,
308
               verbose=verbose,
309
               working_tree=working_tree,
310
               local=local,
311
               reporter=reporter,
312
               message_callback=message_callback,
313
               recursive=recursive,
314
               exclude=exclude,
5777.6.1 by Jelmer Vernooij
Add --lossy option to 'bzr commit'.
315
               possible_master_transports=possible_master_transports,
316
               lossy=lossy)
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
317
318
    def _commit(self, operation, message, timestamp, timezone, committer,
5086.6.1 by Robert Collins
Minor commit tidyup in preparation for hooking around revprops.
319
            specific_files, rev_id, allow_pointless, strict, verbose,
5141.1.1 by Robert Collins
``bzrlib.mutabletree.MutableTree.commit`` will now support a passed in
320
            working_tree, local, reporter, message_callback, recursive,
5777.6.1 by Jelmer Vernooij
Add --lossy option to 'bzr commit'.
321
            exclude, possible_master_transports, lossy):
1285 by Martin Pool
- fix bug in committing files that are renamed but not modified
322
        mutter('preparing to commit')
1189 by Martin Pool
- BROKEN: partial support for commit into weave
323
2367.2.1 by Robert Collins
Remove bzrlib 0.8 compatability where it was making the code unclear or messy. (Robert Collins)
324
        if working_tree is None:
325
            raise BzrError("working_tree must be passed into commit().")
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
326
        else:
327
            self.work_tree = working_tree
4354.4.4 by Aaron Bentley
Simplify by using CommitBuilder directly
328
            self.branch = self.work_tree.branch
2100.3.14 by Aaron Bentley
Test workingtree4 format, prevent use with old repos
329
            if getattr(self.work_tree, 'requires_rich_root', lambda: False)():
330
                if not self.branch.repository.supports_rich_root():
331
                    raise errors.RootNotRich()
2149.1.1 by Aaron Bentley
Provide a message_callback parameter to tree.commit
332
        if message_callback is None:
2149.1.3 by Aaron Bentley
Updates from review comments
333
            if message is not None:
6684.1.3 by Martin
Changes across many modules working towards Python 3 support
334
                if isinstance(message, bytes):
3224.5.1 by Andrew Bennetts
Lots of assorted hackery to reduce the number of imports for common operations. Improves 'rocks', 'st' and 'help' times by ~50ms on my laptop.
335
                    message = message.decode(get_user_encoding())
2149.1.3 by Aaron Bentley
Updates from review comments
336
                message_callback = lambda x: message
2149.1.1 by Aaron Bentley
Provide a message_callback parameter to tree.commit
337
            else:
2149.1.3 by Aaron Bentley
Updates from review comments
338
                raise BzrError("The message or message_callback keyword"
339
                               " parameter is required for commit().")
1534.4.25 by Robert Collins
Add a --transport parameter to the test suite to set the default transport to be used in the test suite.
340
1505.1.24 by John Arbash Meinel
Updated commit to handle bound branches. Included test to handle commit after merge
341
        self.bound_branch = None
2840.1.1 by Ian Clatworthy
faster pointless commit detection (Robert Collins)
342
        self.any_entries_deleted = False
3602.1.1 by Robert Collins
Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)
343
        if exclude is not None:
344
            self.exclude = sorted(
345
                minimum_path_selection(exclude))
346
        else:
347
            self.exclude = []
1587.1.9 by Robert Collins
Local commits do no alter or access the master branch.
348
        self.local = local
1505.1.24 by John Arbash Meinel
Updated commit to handle bound branches. Included test to handle commit after merge
349
        self.master_branch = None
2776.4.15 by Robert Collins
Put checking for recursive commits back to the commit driver, not commit builder.
350
        self.recursive = recursive
1740.3.10 by Jelmer Vernooij
Fix some minor issues pointed out by j-a-m.
351
        self.rev_id = None
4570.4.3 by Robert Collins
Fix a couple of small bugs in the patch - use specific files with record_iter_changs, and the CLI shouldn't generate a filter of [] for commit.
352
        # self.specific_files is None to indicate no filter, or any iterable to
353
        # indicate a filter - [] means no files at all, as per iter_changes.
2843.1.1 by Ian Clatworthy
Faster partial commits by walking less data (Robert Collins)
354
        if specific_files is not None:
355
            self.specific_files = sorted(
356
                minimum_path_selection(specific_files))
357
        else:
358
            self.specific_files = None
5718.4.1 by Jelmer Vernooij
Add CommitBuilder.supports_record_entry_contents.
359
1194 by Martin Pool
- [BROKEN] more progress of commit into weaves
360
        self.allow_pointless = allow_pointless
2255.2.218 by Robert Collins
Make the nested tree commit smoke test be more rigourous.
361
        self.message_callback = message_callback
362
        self.timestamp = timestamp
363
        self.timezone = timezone
364
        self.committer = committer
365
        self.strict = strict
366
        self.verbose = verbose
1189 by Martin Pool
- BROKEN: partial support for commit into weave
367
4354.4.4 by Aaron Bentley
Simplify by using CommitBuilder directly
368
        self.work_tree.lock_write()
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
369
        operation.add_cleanup(self.work_tree.unlock)
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
370
        self.parents = self.work_tree.get_parent_ids()
5582.10.6 by Jelmer Vernooij
Fix ui imports.
371
        self.pb = ui.ui_factory.nested_progress_bar()
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
372
        operation.add_cleanup(self.pb.finished)
2921.4.1 by Robert Collins
During commit check for the first commit by NULL_REVISION rather than a completely empty basis tree, removing one use of the basis inventory.
373
        self.basis_revid = self.work_tree.last_revision()
2789.2.4 by Ian Clatworthy
make change reporting smarter for initial commit
374
        self.basis_tree = self.work_tree.basis_tree()
2255.2.25 by John Arbash Meinel
DirstateRevisionTrees need to be read_locked before they will work as BasisTree
375
        self.basis_tree.lock_read()
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
376
        operation.add_cleanup(self.basis_tree.unlock)
377
        # Cannot commit with conflicts present.
378
        if len(self.work_tree.conflicts()) > 0:
379
            raise ConflictsInTree
380
381
        # Setup the bound branch variables as needed.
382
        self._check_bound_branch(operation, possible_master_transports)
383
384
        # Check that the working tree is up to date
6217.5.2 by Jelmer Vernooij
Factor out the updating of branches into a separate helper.
385
        old_revno, old_revid, new_revno = self._check_out_of_date_tree()
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
386
387
        # Complete configuration setup
388
        if reporter is not None:
389
            self.reporter = reporter
390
        elif self.reporter is None:
391
            self.reporter = self._select_reporter()
6351.3.2 by Jelmer Vernooij
Convert some gpg options to config stacks.
392
        if self.config_stack is None:
6449.6.4 by Jelmer Vernooij
Use config stack.
393
            self.config_stack = self.work_tree.get_config_stack()
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
394
395
        # Setup the progress bar. As the number of files that need to be
396
        # committed in unknown, progress is reported as stages.
397
        # We keep track of entries separately though and include that
398
        # information in the progress bar during the relevant stages.
399
        self.pb_stage_name = ""
400
        self.pb_stage_count = 0
401
        self.pb_stage_total = 5
402
        if self.bound_branch:
5050.52.3 by Andrew Bennetts
Merge tags from local to master when committing in a bound branch.
403
            # 2 extra stages: "Uploading data to master branch" and "Merging
404
            # tags to master branch"
405
            self.pb_stage_total += 2
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
406
        self.pb.show_pct = False
407
        self.pb.show_spinner = False
408
        self.pb.show_eta = False
409
        self.pb.show_count = True
410
        self.pb.show_bar = True
411
412
        # After a merge, a selected file commit is not supported.
413
        # See 'bzr help merge' for an explanation as to why.
414
        if len(self.parents) > 1 and self.specific_files is not None:
6744 by Jelmer Vernooij
Merge lp:~jelmer/brz/move-errors-knit.
415
            raise CannotCommitSelectedFileMerge(self.specific_files)
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
416
        # Excludes are a form of selected file commit.
417
        if len(self.parents) > 1 and self.exclude:
6744 by Jelmer Vernooij
Merge lp:~jelmer/brz/move-errors-knit.
418
            raise CannotCommitSelectedFileMerge(self.exclude)
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
419
420
        # Collect the changes
421
        self._set_progress_stage("Collecting changes", counter=True)
5777.6.5 by Jelmer Vernooij
Add tests for lossy commit.
422
        self._lossy = lossy
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
423
        self.builder = self.branch.get_commit_builder(self.parents,
6351.3.2 by Jelmer Vernooij
Convert some gpg options to config stacks.
424
            self.config_stack, timestamp, timezone, committer, self.revprops,
5777.6.1 by Jelmer Vernooij
Add --lossy option to 'bzr commit'.
425
            rev_id, lossy=lossy)
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
426
6217.5.2 by Jelmer Vernooij
Factor out the updating of branches into a separate helper.
427
        if self.builder.updates_branch and self.bound_branch:
428
            self.builder.abort()
429
            raise AssertionError(
430
                "bound branches not supported for commit builders "
431
                "that update the branch")
432
1189 by Martin Pool
- BROKEN: partial support for commit into weave
433
        try:
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
434
            # find the location being committed to
435
            if self.bound_branch:
436
                master_location = self.master_branch.base
437
            else:
438
                master_location = self.branch.base
439
440
            # report the start of the commit
441
            self.reporter.started(new_revno, self.rev_id, master_location)
442
443
            self._update_builder_with_changes()
444
            self._check_pointless()
445
446
            # TODO: Now the new inventory is known, check for conflicts.
447
            # ADHB 2006-08-08: If this is done, populate_new_inv should not add
448
            # weave lines, because nothing should be recorded until it is known
449
            # that commit will succeed.
450
            self._set_progress_stage("Saving data locally")
451
            self.builder.finish_inventory()
452
453
            # Prompt the user for a commit message if none provided
454
            message = message_callback(self)
455
            self.message = message
456
457
            # Add revision data to the local branch
458
            self.rev_id = self.builder.commit(self.message)
459
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
460
        except Exception as e:
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
461
            mutter("aborting commit write group because of exception:")
462
            trace.log_exception_quietly()
463
            self.builder.abort()
464
            raise
465
6217.5.2 by Jelmer Vernooij
Factor out the updating of branches into a separate helper.
466
        self._update_branches(old_revno, old_revid, new_revno)
467
468
        # Make the working tree be up to date with the branch. This
469
        # includes automatic changes scheduled to be made to the tree, such
470
        # as updating its basis and unversioning paths that were missing.
471
        self.work_tree.unversion(self.deleted_ids)
472
        self._set_progress_stage("Updating the working tree")
473
        self.work_tree.update_basis_by_delta(self.rev_id,
474
             self.builder.get_basis_delta())
475
        self.reporter.completed(new_revno, self.rev_id)
476
        self._process_post_hooks(old_revno, new_revno)
477
        return self.rev_id
478
479
    def _update_branches(self, old_revno, old_revid, new_revno):
480
        """Update the master and local branch to the new revision.
481
482
        This will try to make sure that the master branch is updated
483
        before the local branch.
484
485
        :param old_revno: Revision number of master branch before the
486
            commit
487
        :param old_revid: Tip of master branch before the commit
488
        :param new_revno: Revision number of the new commit
489
        """
6217.5.1 by Jelmer Vernooij
Add CommitBuilder.updates_branch.
490
        if not self.builder.updates_branch:
491
            self._process_pre_hooks(old_revno, new_revno)
492
493
            # Upload revision data to the master.
494
            # this will propagate merged revisions too if needed.
495
            if self.bound_branch:
496
                self._set_progress_stage("Uploading data to master branch")
497
                # 'commit' to the master first so a timeout here causes the
498
                # local branch to be out of date
499
                (new_revno, self.rev_id) = self.master_branch.import_last_revision_info_and_tags(
6217.5.2 by Jelmer Vernooij
Factor out the updating of branches into a separate helper.
500
                    self.branch, new_revno, self.rev_id, lossy=self._lossy)
501
                if self._lossy:
6217.5.1 by Jelmer Vernooij
Add CommitBuilder.updates_branch.
502
                    self.branch.fetch(self.master_branch, self.rev_id)
503
504
            # and now do the commit locally.
505
            self.branch.set_last_revision_info(new_revno, self.rev_id)
506
        else:
507
            try:
508
                self._process_pre_hooks(old_revno, new_revno)
509
            except:
510
                # The commit builder will already have updated the branch,
511
                # revert it.
6217.5.2 by Jelmer Vernooij
Factor out the updating of branches into a separate helper.
512
                self.branch.set_last_revision_info(old_revno, old_revid)
6217.5.1 by Jelmer Vernooij
Add CommitBuilder.updates_branch.
513
                raise
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
514
5050.52.3 by Andrew Bennetts
Merge tags from local to master when committing in a bound branch.
515
        # Merge local tags to remote
516
        if self.bound_branch:
517
            self._set_progress_stage("Merging tags to master branch")
6112.4.2 by Jelmer Vernooij
Fix tag tests.
518
            tag_updates, tag_conflicts = self.branch.tags.merge_to(
519
                self.master_branch.tags)
5050.52.3 by Andrew Bennetts
Merge tags from local to master when committing in a bound branch.
520
            if tag_conflicts:
521
                warning_lines = ['    ' + name for name, _, _ in tag_conflicts]
6138.3.5 by Jonathan Riddell
make the test suite pass
522
                note( gettext("Conflicting tags in bound branch:\n{0}".format(
523
                    "\n".join(warning_lines))) )
5050.52.3 by Andrew Bennetts
Merge tags from local to master when committing in a bound branch.
524
2789.2.4 by Ian Clatworthy
make change reporting smarter for initial commit
525
    def _select_reporter(self):
526
        """Select the CommitReporter to use."""
527
        if is_quiet():
528
            return NullCommitReporter()
2789.2.10 by Ian Clatworthy
focus on performance gains, not better reporting
529
        return ReportCommitToLog()
2789.2.4 by Ian Clatworthy
make change reporting smarter for initial commit
530
1910.2.37 by Aaron Bentley
Handle empty commits, fix test
531
    def _check_pointless(self):
532
        if self.allow_pointless:
533
            return
534
        # A merge with no effect on files
535
        if len(self.parents) > 1:
536
            return
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
537
        if self.builder.any_changes():
1910.2.37 by Aaron Bentley
Handle empty commits, fix test
538
            return
539
        raise PointlessCommit()
540
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
541
    def _check_bound_branch(self, operation, possible_master_transports=None):
1505.1.24 by John Arbash Meinel
Updated commit to handle bound branches. Included test to handle commit after merge
542
        """Check to see if the local branch is bound.
543
544
        If it is bound, then most of the commit will actually be
545
        done using the remote branch as the target branch.
546
        Only at the end will the local branch be updated.
547
        """
1587.1.9 by Robert Collins
Local commits do no alter or access the master branch.
548
        if self.local and not self.branch.get_bound_location():
549
            raise errors.LocalRequiresBoundBranch()
550
551
        if not self.local:
3565.6.9 by Marius Kruger
Jump through hoops not to open multiple connections when committing to a bound branch.
552
            self.master_branch = self.branch.get_master_branch(
553
                possible_master_transports)
1587.1.9 by Robert Collins
Local commits do no alter or access the master branch.
554
1505.1.24 by John Arbash Meinel
Updated commit to handle bound branches. Included test to handle commit after merge
555
        if not self.master_branch:
1587.1.8 by Robert Collins
Local commits on unbound branches fail.
556
            # make this branch the reference branch for out of date checks.
557
            self.master_branch = self.branch
1505.1.24 by John Arbash Meinel
Updated commit to handle bound branches. Included test to handle commit after merge
558
            return
559
560
        # If the master branch is bound, we must fail
561
        master_bound_location = self.master_branch.get_bound_location()
562
        if master_bound_location:
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
563
            raise errors.CommitToDoubleBoundBranch(self.branch,
1505.1.24 by John Arbash Meinel
Updated commit to handle bound branches. Included test to handle commit after merge
564
                    self.master_branch, master_bound_location)
565
566
        # TODO: jam 20051230 We could automatically push local
567
        #       commits to the remote branch if they would fit.
568
        #       But for now, just require remote to be identical
569
        #       to local.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
570
1505.1.24 by John Arbash Meinel
Updated commit to handle bound branches. Included test to handle commit after merge
571
        # Make sure the local branch is identical to the master
2249.4.2 by Wouter van Heyst
Convert callers of Branch.revision_history() to Branch.last_revision_info() where sensible.
572
        master_info = self.master_branch.last_revision_info()
573
        local_info = self.branch.last_revision_info()
574
        if local_info != master_info:
1505.1.24 by John Arbash Meinel
Updated commit to handle bound branches. Included test to handle commit after merge
575
            raise errors.BoundBranchOutOfDate(self.branch,
576
                    self.master_branch)
577
578
        # Now things are ready to change the master branch
579
        # so grab the lock
580
        self.bound_branch = self.branch
581
        self.master_branch.lock_write()
4744.3.2 by Andrew Bennetts
Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.
582
        operation.add_cleanup(self.master_branch.unlock)
1505.1.24 by John Arbash Meinel
Updated commit to handle bound branches. Included test to handle commit after merge
583
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
584
    def _check_out_of_date_tree(self):
585
        """Check that the working tree is up to date.
586
6217.5.2 by Jelmer Vernooij
Factor out the updating of branches into a separate helper.
587
        :return: old_revision_number, old_revision_id, new_revision_number
588
            tuple
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
589
        """
590
        try:
591
            first_tree_parent = self.work_tree.get_parent_ids()[0]
592
        except IndexError:
593
            # if there are no parents, treat our parent as 'None'
594
            # this is so that we still consider the master branch
595
            # - in a checkout scenario the tree may have no
596
            # parents but the branch may do.
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
597
            first_tree_parent = breezy.revision.NULL_REVISION
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
598
        old_revno, master_last = self.master_branch.last_revision_info()
599
        if master_last != first_tree_parent:
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
600
            if master_last != breezy.revision.NULL_REVISION:
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
601
                raise errors.OutOfDateTree(self.work_tree)
602
        if self.branch.repository.has_revision(first_tree_parent):
603
            new_revno = old_revno + 1
604
        else:
605
            # ghost parents never appear in revision history.
606
            new_revno = 1
6217.5.2 by Jelmer Vernooij
Factor out the updating of branches into a separate helper.
607
        return old_revno, master_last, new_revno
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
608
2659.3.1 by NamNguyen
``Branch.hooks`` now supports ``pre_commit`` hook.
609
    def _process_pre_hooks(self, old_revno, new_revno):
610
        """Process any registered pre commit hooks."""
2659.3.9 by NamNguyen
branch.py:
611
        self._set_progress_stage("Running pre_commit hooks")
2659.3.1 by NamNguyen
``Branch.hooks`` now supports ``pre_commit`` hook.
612
        self._process_hooks("pre_commit", old_revno, new_revno)
613
614
    def _process_post_hooks(self, old_revno, new_revno):
615
        """Process any registered post commit hooks."""
2553.1.2 by Robert Collins
Show hook names during commit.
616
        # Process the post commit hooks, if any
2659.3.9 by NamNguyen
branch.py:
617
        self._set_progress_stage("Running post_commit hooks")
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
618
        # old style commit hooks - should be deprecated ? (obsoleted in
6351.3.12 by Vincent Ladeuil
Use simpler config stacks and use strings as inputs to better respect the API.
619
        # 0.15^H^H^H^H 2.5.0)
620
        post_commit = self.config_stack.get('post_commit')
621
        if post_commit is not None:
622
            hooks = post_commit.split(' ')
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
623
            # this would be nicer with twisted.python.reflect.namedAny
624
            for hook in hooks:
625
                result = eval(hook + '(branch, rev_id)',
626
                              {'branch':self.branch,
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
627
                               'breezy':breezy,
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
628
                               'rev_id':self.rev_id})
2659.3.1 by NamNguyen
``Branch.hooks`` now supports ``pre_commit`` hook.
629
        # process new style post commit hooks
630
        self._process_hooks("post_commit", old_revno, new_revno)
631
632
    def _process_hooks(self, hook_name, old_revno, new_revno):
2659.3.3 by NamNguyen
Changed ``pre_commit`` hook signature.
633
        if not Branch.hooks[hook_name]:
634
            return
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
635
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
636
        # new style commit hooks:
637
        if not self.bound_branch:
638
            hook_master = self.branch
639
            hook_local = None
640
        else:
641
            hook_master = self.master_branch
642
            hook_local = self.branch
643
        # With bound branches, when the master is behind the local branch,
644
        # the 'old_revno' and old_revid values here are incorrect.
645
        # XXX: FIXME ^. RBC 20060206
646
        if self.parents:
647
            old_revid = self.parents[0]
648
        else:
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
649
            old_revid = breezy.revision.NULL_REVISION
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
650
2659.3.9 by NamNguyen
branch.py:
651
        if hook_name == "pre_commit":
652
            future_tree = self.builder.revision_tree()
653
            tree_delta = future_tree.changes_from(self.basis_tree,
654
                                             include_root=True)
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
655
2659.3.1 by NamNguyen
``Branch.hooks`` now supports ``pre_commit`` hook.
656
        for hook in Branch.hooks[hook_name]:
2553.1.3 by Robert Collins
Increase docs in response to review feedback.
657
            # show the running hook in the progress bar. As hooks may
658
            # end up doing nothing (e.g. because they are not configured by
659
            # the user) this is still showing progress, not showing overall
660
            # actions - its up to each plugin to show a UI if it want's to
661
            # (such as 'Emailing diff to foo@example.com').
2659.3.1 by NamNguyen
``Branch.hooks`` now supports ``pre_commit`` hook.
662
            self.pb_stage_name = "Running %s hooks [%s]" % \
2659.3.9 by NamNguyen
branch.py:
663
                (hook_name, Branch.hooks.get_hook_name(hook))
2553.1.2 by Robert Collins
Show hook names during commit.
664
            self._emit_progress()
2560.1.4 by Robert Collins
Allow -Dhooks to get the hooks invoked during commit logged.
665
            if 'hooks' in debug.debug_flags:
666
                mutter("Invoking commit hook: %r", hook)
2659.3.1 by NamNguyen
``Branch.hooks`` now supports ``pre_commit`` hook.
667
            if hook_name == "post_commit":
668
                hook(hook_local, hook_master, old_revno, old_revid, new_revno,
669
                     self.rev_id)
670
            elif hook_name == "pre_commit":
671
                hook(hook_local, hook_master,
672
                     old_revno, old_revid, new_revno, self.rev_id,
2659.3.9 by NamNguyen
branch.py:
673
                     tree_delta, future_tree)
2511.1.1 by Ian Clatworthy
commit.py clean-up including logging just to stderr, not bzr.log
674
4354.4.4 by Aaron Bentley
Simplify by using CommitBuilder directly
675
    def _update_builder_with_changes(self):
2541.1.1 by Ian Clatworthy
Refactor commit.commit() to walk the working inventory once/less
676
        """Update the commit builder with the data about what has changed.
677
        """
4570.4.3 by Robert Collins
Fix a couple of small bugs in the patch - use specific files with record_iter_changs, and the CLI shouldn't generate a filter of [] for commit.
678
        specific_files = self.specific_files
6684.1.3 by Martin
Changes across many modules working towards Python 3 support
679
        mutter("Selecting files for commit with filter %r", specific_files)
2541.1.1 by Ian Clatworthy
Refactor commit.commit() to walk the working inventory once/less
680
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
681
        self._check_strict()
6700.1.3 by Jelmer Vernooij
Drop support for committing using record_entr_contents.
682
        iter_changes = self.work_tree.iter_changes(self.basis_tree,
683
            specific_files=specific_files)
684
        if self.exclude:
685
            iter_changes = filter_excluded(iter_changes, self.exclude)
686
        iter_changes = self._filter_iter_changes(iter_changes)
687
        for file_id, path, fs_hash in self.builder.record_iter_changes(
688
            self.work_tree, self.basis_revid, iter_changes):
689
            self.work_tree._observed_sha1(file_id, path, fs_hash)
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
690
4354.4.4 by Aaron Bentley
Simplify by using CommitBuilder directly
691
    def _filter_iter_changes(self, iter_changes):
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
692
        """Process iter_changes.
693
694
        This method reports on the changes in iter_changes to the user, and 
695
        converts 'missing' entries in the iter_changes iterator to 'deleted'
696
        entries. 'missing' entries have their
697
698
        :param iter_changes: An iter_changes to process.
699
        :return: A generator of changes.
700
        """
701
        reporter = self.reporter
702
        report_changes = reporter.is_verbose()
703
        deleted_ids = []
704
        for change in iter_changes:
705
            if report_changes:
706
                old_path = change[1][0]
707
                new_path = change[1][1]
708
                versioned = change[3][1]
709
            kind = change[6][1]
710
            versioned = change[3][1]
711
            if kind is None and versioned:
712
                # 'missing' path
713
                if report_changes:
714
                    reporter.missing(new_path)
715
                deleted_ids.append(change[0])
716
                # Reset the new path (None) and new versioned flag (False)
717
                change = (change[0], (change[1][0], None), change[2],
718
                    (change[3][0], False)) + change[4:]
6125.1.1 by Jelmer Vernooij
Report missing files as removed in 'bzr commit', rather than modified.
719
                new_path = change[1][1]
720
                versioned = False
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
721
            elif kind == 'tree-reference':
722
                if self.recursive == 'down':
723
                    self._commit_nested_tree(change[0], change[1][1])
724
            if change[3][0] or change[3][1]:
725
                yield change
726
                if report_changes:
727
                    if new_path is None:
728
                        reporter.deleted(old_path)
729
                    elif old_path is None:
6138.3.2 by Jonathan Riddell
gettext-ify bzrlib/commit.py
730
                        reporter.snapshot_change(gettext('added'), new_path)
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
731
                    elif old_path != new_path:
6138.3.2 by Jonathan Riddell
gettext-ify bzrlib/commit.py
732
                        reporter.renamed(gettext('renamed'), old_path, new_path)
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
733
                    else:
734
                        if (new_path or 
735
                            self.work_tree.branch.repository._format.rich_root_data):
736
                            # Don't report on changes to '' in non rich root
737
                            # repositories.
6138.3.2 by Jonathan Riddell
gettext-ify bzrlib/commit.py
738
                            reporter.snapshot_change(gettext('modified'), new_path)
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
739
            self._next_progress_entry()
740
        # Unversion IDs that were found to be deleted
4536.3.1 by Robert Collins
Defer doing unversioning of file ids during commit to after completing branch operations. (Robert Collins, bug 282402)
741
        self.deleted_ids = deleted_ids
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
742
743
    def _check_strict(self):
744
        # XXX: when we use iter_changes this would likely be faster if
745
        # iter_changes would check for us (even in the presence of
746
        # selected_files).
2564.2.1 by Ian Clatworthy
refactor commit to support alternative population meothds
747
        if self.strict:
748
            # raise an exception as soon as we find a single unknown.
749
            for unknown in self.work_tree.unknowns():
750
                raise StrictCommitFailed()
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
751
2564.2.3 by Ian Clatworthy
more abentley feedback: use get_nested_tree and include file_id
752
    def _commit_nested_tree(self, file_id, path):
2564.2.1 by Ian Clatworthy
refactor commit to support alternative population meothds
753
        "Commit a nested tree."
2564.2.3 by Ian Clatworthy
more abentley feedback: use get_nested_tree and include file_id
754
        sub_tree = self.work_tree.get_nested_tree(file_id, path)
2564.2.1 by Ian Clatworthy
refactor commit to support alternative population meothds
755
        # FIXME: be more comprehensive here:
756
        # this works when both trees are in --trees repository,
757
        # but when both are bound to a different repository,
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
758
        # it fails; a better way of approaching this is to
2564.2.1 by Ian Clatworthy
refactor commit to support alternative population meothds
759
        # finally implement the explicit-caches approach design
760
        # a while back - RBC 20070306.
2665.5.2 by Aaron Bentley
Switch commit and merge to Repository.has_same_location
761
        if sub_tree.branch.repository.has_same_location(
762
            self.work_tree.branch.repository):
2564.2.1 by Ian Clatworthy
refactor commit to support alternative population meothds
763
            sub_tree.branch.repository = \
764
                self.work_tree.branch.repository
765
        try:
2776.4.6 by Robert Collins
Fixup various commit test failures falling out from the other commit changes.
766
            return sub_tree.commit(message=None, revprops=self.revprops,
2776.4.15 by Robert Collins
Put checking for recursive commits back to the commit driver, not commit builder.
767
                recursive=self.recursive,
2564.2.1 by Ian Clatworthy
refactor commit to support alternative population meothds
768
                message_callback=self.message_callback,
769
                timestamp=self.timestamp, timezone=self.timezone,
770
                committer=self.committer,
771
                allow_pointless=self.allow_pointless,
772
                strict=self.strict, verbose=self.verbose,
773
                local=self.local, reporter=self.reporter)
6744 by Jelmer Vernooij
Merge lp:~jelmer/brz/move-errors-knit.
774
        except PointlessCommit:
2776.4.6 by Robert Collins
Fixup various commit test failures falling out from the other commit changes.
775
            return self.work_tree.get_reference_revision(file_id)
2564.2.1 by Ian Clatworthy
refactor commit to support alternative population meothds
776
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
777
    def _set_progress_stage(self, name, counter=False):
2531.1.2 by Ian Clatworthy
Improved progress reporting for commit
778
        """Set the progress stage and emit an update to the progress bar."""
779
        self.pb_stage_name = name
780
        self.pb_stage_count += 1
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
781
        if counter:
2531.1.2 by Ian Clatworthy
Improved progress reporting for commit
782
            self.pb_entries_count = 0
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
783
        else:
784
            self.pb_entries_count = None
2531.1.2 by Ian Clatworthy
Improved progress reporting for commit
785
        self._emit_progress()
786
2564.2.2 by Ian Clatworthy
incorporate feedback from abentley
787
    def _next_progress_entry(self):
788
        """Emit an update to the progress bar and increment the entry count."""
2531.1.2 by Ian Clatworthy
Improved progress reporting for commit
789
        self.pb_entries_count += 1
790
        self._emit_progress()
791
792
    def _emit_progress(self):
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
793
        if self.pb_entries_count is not None:
6138.4.1 by Jonathan Riddell
add gettext to progress bar strings
794
            text = gettext("{0} [{1}] - Stage").format(self.pb_stage_name,
4183.5.5 by Robert Collins
Enable record_iter_changes for cases where it can work.
795
                self.pb_entries_count)
2531.1.2 by Ian Clatworthy
Improved progress reporting for commit
796
        else:
6138.4.1 by Jonathan Riddell
add gettext to progress bar strings
797
            text = gettext("%s - Stage") % (self.pb_stage_name, )
2531.1.2 by Ian Clatworthy
Improved progress reporting for commit
798
        self.pb.update(text, self.pb_stage_count, self.pb_stage_total)