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  | 
| 
6624
by Jelmer Vernooij
 Merge Python3 porting work ('py3 pokes')  | 
63  | 
from .errors import (BzrError, PointlessCommit,  | 
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  | 
|
73  | 
from .inventory import Inventory, InventoryEntry, make_entry  | 
|
74  | 
from . import symbol_versioning  | 
|
75  | 
from .urlutils import unescape_for_display  | 
|
76  | 
from .i18n import gettext  | 
|
77  | 
||
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
78  | 
|
79  | 
class NullCommitReporter(object):  | 
|
80  | 
"""I report on progress of a commit."""  | 
|
| 
1185.12.8
by Aaron Bentley
 Fixed commit so all output comes though CommitReporter  | 
81  | 
|
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
82  | 
def started(self, revno, revid, location=None):  | 
| 
3052.4.2
by Matt Nordhoff
 Deprecate not passing a location to commit reporters' started() methods.  | 
83  | 
if location is None:  | 
| 
3052.4.6
by Matt Nordhoff
 Update the warning message to use 1.0 instead of 0.93.  | 
84  | 
symbol_versioning.warn("As of bzr 1.0 you must pass a location "  | 
| 
3052.4.2
by Matt Nordhoff
 Deprecate not passing a location to commit reporters' started() methods.  | 
85  | 
"to started.", DeprecationWarning,  | 
86  | 
stacklevel=2)  | 
|
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
87  | 
        pass
 | 
88  | 
||
89  | 
def snapshot_change(self, change, path):  | 
|
90  | 
        pass
 | 
|
91  | 
||
92  | 
def completed(self, revno, rev_id):  | 
|
93  | 
        pass
 | 
|
94  | 
||
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
95  | 
def deleted(self, path):  | 
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
96  | 
        pass
 | 
97  | 
||
98  | 
def missing(self, path):  | 
|
99  | 
        pass
 | 
|
100  | 
||
101  | 
def renamed(self, change, old_path, new_path):  | 
|
102  | 
        pass
 | 
|
103  | 
||
| 
2789.2.11
by Ian Clatworthy
 remove more reporting stuff  | 
104  | 
def is_verbose(self):  | 
105  | 
return False  | 
|
106  | 
||
107  | 
||
108  | 
class ReportCommitToLog(NullCommitReporter):  | 
|
109  | 
||
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
110  | 
def _note(self, format, *args):  | 
111  | 
"""Output a message.  | 
|
112  | 
||
| 
2522.2.3
by Ian Clatworthy
 Revert logging just to stderr in commit as broke unicode filenames (#120930)  | 
113  | 
        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  | 
114  | 
        """
 | 
| 
2522.2.3
by Ian Clatworthy
 Revert logging just to stderr in commit as broke unicode filenames (#120930)  | 
115  | 
note(format, *args)  | 
| 
1668.1.5
by Martin Pool
 [broken] fix up display of files changed by a commit  | 
116  | 
|
| 
2789.2.4
by Ian Clatworthy
 make change reporting smarter for initial commit  | 
117  | 
def snapshot_change(self, change, path):  | 
| 
6138.3.2
by Jonathan Riddell
 gettext-ify bzrlib/commit.py  | 
118  | 
if path == '' and change in (gettext('added'), gettext('modified')):  | 
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
119  | 
            return
 | 
| 
2789.2.11
by Ian Clatworthy
 remove more reporting stuff  | 
120  | 
self._note("%s %s", change, path)  | 
| 
2789.2.4
by Ian Clatworthy
 make change reporting smarter for initial commit  | 
121  | 
|
| 
2747.6.5
by Daniel Watkins
 Added 'started' hook to CommitReporters and moved location functionality from completed hook into it.  | 
122  | 
def started(self, revno, rev_id, location=None):  | 
| 
2747.6.1
by Daniel Watkins
 Added message at the end of commit for bound branches.  | 
123  | 
if location is not None:  | 
| 
3052.4.1
by Matt Nordhoff
 bzr commit: don't print the revision number twice. (Bug #172612)  | 
124  | 
location = ' to: ' + unescape_for_display(location, 'utf-8')  | 
| 
2747.6.1
by Daniel Watkins
 Added message at the end of commit for bound branches.  | 
125  | 
else:  | 
| 
3052.4.2
by Matt Nordhoff
 Deprecate not passing a location to commit reporters' started() methods.  | 
126  | 
            # When started was added, location was only made optional by
 | 
127  | 
            # accident.  Matt Nordhoff 20071129
 | 
|
| 
3052.4.6
by Matt Nordhoff
 Update the warning message to use 1.0 instead of 0.93.  | 
128  | 
symbol_versioning.warn("As of bzr 1.0 you must pass a location "  | 
| 
3052.4.2
by Matt Nordhoff
 Deprecate not passing a location to commit reporters' started() methods.  | 
129  | 
"to started.", DeprecationWarning,  | 
130  | 
stacklevel=2)  | 
|
| 
2747.6.1
by Daniel Watkins
 Added message at the end of commit for bound branches.  | 
131  | 
location = ''  | 
| 
6138.3.2
by Jonathan Riddell
 gettext-ify bzrlib/commit.py  | 
132  | 
self._note(gettext('Committing%s'), location)  | 
| 
2747.6.5
by Daniel Watkins
 Added 'started' hook to CommitReporters and moved location functionality from completed hook into it.  | 
133  | 
|
134  | 
def completed(self, revno, rev_id):  | 
|
| 
6138.3.2
by Jonathan Riddell
 gettext-ify bzrlib/commit.py  | 
135  | 
self._note(gettext('Committed revision %d.'), revno)  | 
| 
5086.6.2
by Robert Collins
 Log revision id as well as revno when committing.  | 
136  | 
        # self._note goes to the console too; so while we want to log the
 | 
137  | 
        # rev_id, we can't trivially only log it. (See bug 526425). Long
 | 
|
138  | 
        # term we should rearrange the reporting structure, but for now
 | 
|
139  | 
        # we just mutter seperately. We mutter the revid and revno together
 | 
|
140  | 
        # so that concurrent bzr invocations won't lead to confusion.
 | 
|
141  | 
mutter('Committed revid %s as revno %d.', rev_id, revno)  | 
|
| 
2789.2.4
by Ian Clatworthy
 make change reporting smarter for initial commit  | 
142  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
143  | 
def deleted(self, path):  | 
| 
6138.3.2
by Jonathan Riddell
 gettext-ify bzrlib/commit.py  | 
144  | 
self._note(gettext('deleted %s'), path)  | 
| 
1185.12.8
by Aaron Bentley
 Fixed commit so all output comes though CommitReporter  | 
145  | 
|
146  | 
def missing(self, path):  | 
|
| 
6138.3.2
by Jonathan Riddell
 gettext-ify bzrlib/commit.py  | 
147  | 
self._note(gettext('missing %s'), path)  | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
148  | 
|
| 
1668.1.5
by Martin Pool
 [broken] fix up display of files changed by a commit  | 
149  | 
def renamed(self, change, old_path, new_path):  | 
| 
2789.2.11
by Ian Clatworthy
 remove more reporting stuff  | 
150  | 
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  | 
151  | 
|
| 
2789.2.1
by Ian Clatworthy
 Make commit less verbose by default  | 
152  | 
def is_verbose(self):  | 
153  | 
return True  | 
|
154  | 
||
| 
1508.1.6
by Robert Collins
 Move Branch.unknowns() to WorkingTree.  | 
155  | 
|
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
156  | 
class Commit(object):  | 
157  | 
"""Task of committing a new revision.  | 
|
158  | 
||
159  | 
    This is a MethodObject: it accumulates state as the commit is
 | 
|
160  | 
    prepared, and then it is discarded.  It doesn't represent
 | 
|
161  | 
    historical revisions, just the act of recording a new one.
 | 
|
162  | 
||
163  | 
            missing_ids
 | 
|
164  | 
            Modified to hold a list of files that have been deleted from
 | 
|
165  | 
            the working directory; these should be removed from the
 | 
|
166  | 
            working inventory.
 | 
|
| 
485
by Martin Pool
 - move commit code into its own module  | 
167  | 
    """
 | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
168  | 
def __init__(self,  | 
| 
1442.1.60
by Robert Collins
 gpg sign commits if the policy says we need to  | 
169  | 
reporter=None,  | 
| 
6351.3.2
by Jelmer Vernooij
 Convert some gpg options to config stacks.  | 
170  | 
config_stack=None):  | 
| 
2789.2.1
by Ian Clatworthy
 Make commit less verbose by default  | 
171  | 
"""Create a Commit object.  | 
172  | 
||
173  | 
        :param reporter: the default reporter to use or None to decide later
 | 
|
174  | 
        """
 | 
|
175  | 
self.reporter = reporter  | 
|
| 
6351.3.2
by Jelmer Vernooij
 Convert some gpg options to config stacks.  | 
176  | 
self.config_stack = config_stack  | 
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
177  | 
|
| 
5162.4.1
by Aaron Bentley
 TreeTransform supports normal commit parameters and includes branch nick.  | 
178  | 
    @staticmethod
 | 
179  | 
def update_revprops(revprops, branch, authors=None, author=None,  | 
|
180  | 
local=False, possible_master_transports=None):  | 
|
181  | 
if revprops is None:  | 
|
182  | 
revprops = {}  | 
|
183  | 
if possible_master_transports is None:  | 
|
184  | 
possible_master_transports = []  | 
|
185  | 
if not 'branch-nick' in revprops:  | 
|
186  | 
revprops['branch-nick'] = branch._get_nick(  | 
|
187  | 
local,  | 
|
188  | 
possible_master_transports)  | 
|
189  | 
if authors is not None:  | 
|
190  | 
if author is not None:  | 
|
191  | 
raise AssertionError('Specifying both author and authors '  | 
|
192  | 
'is not allowed. Specify just authors instead')  | 
|
193  | 
if 'author' in revprops or 'authors' in revprops:  | 
|
194  | 
                # XXX: maybe we should just accept one of them?
 | 
|
195  | 
raise AssertionError('author property given twice')  | 
|
196  | 
if authors:  | 
|
197  | 
for individual in authors:  | 
|
198  | 
if '\n' in individual:  | 
|
199  | 
raise AssertionError('\\n is not a valid character '  | 
|
200  | 
'in an author identity')  | 
|
201  | 
revprops['authors'] = '\n'.join(authors)  | 
|
202  | 
if author is not None:  | 
|
203  | 
symbol_versioning.warn('The parameter author was deprecated'  | 
|
204  | 
' in version 1.13. Use authors instead',  | 
|
205  | 
DeprecationWarning)  | 
|
206  | 
if 'author' in revprops or 'authors' in revprops:  | 
|
207  | 
                # XXX: maybe we should just accept one of them?
 | 
|
208  | 
raise AssertionError('author property given twice')  | 
|
209  | 
if '\n' in author:  | 
|
210  | 
raise AssertionError('\\n is not a valid character '  | 
|
211  | 
'in an author identity')  | 
|
212  | 
revprops['authors'] = author  | 
|
213  | 
return revprops  | 
|
214  | 
||
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
215  | 
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)  | 
216  | 
message=None,  | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
217  | 
timestamp=None,  | 
218  | 
timezone=None,  | 
|
219  | 
committer=None,  | 
|
220  | 
specific_files=None,  | 
|
221  | 
rev_id=None,  | 
|
| 
1276
by Martin Pool
 - make Branch.commit accept (and ignore) verbose argument  | 
222  | 
allow_pointless=True,  | 
| 
1185.16.65
by mbp at sourcefrog
 - new commit --strict option  | 
223  | 
strict=False,  | 
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
224  | 
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.  | 
225  | 
revprops=None,  | 
| 
1587.1.8
by Robert Collins
 Local commits on unbound branches fail.  | 
226  | 
working_tree=None,  | 
| 
1607.1.5
by Robert Collins
 Make commit verbose mode work!.  | 
227  | 
local=False,  | 
228  | 
reporter=None,  | 
|
| 
2149.1.1
by Aaron Bentley
 Provide a message_callback parameter to tree.commit  | 
229  | 
config=None,  | 
| 
2255.2.218
by Robert Collins
 Make the nested tree commit smoke test be more rigourous.  | 
230  | 
message_callback=None,  | 
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
231  | 
recursive='down',  | 
| 
3565.6.9
by Marius Kruger
 Jump through hoops not to open multiple connections when committing to a bound branch.  | 
232  | 
exclude=None,  | 
| 
5777.6.1
by Jelmer Vernooij
 Add --lossy option to 'bzr commit'.  | 
233  | 
possible_master_transports=None,  | 
234  | 
lossy=False):  | 
|
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
235  | 
"""Commit working copy as a new revision.  | 
236  | 
||
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
237  | 
        :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)  | 
238  | 
        :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  | 
239  | 
|
240  | 
        :param timestamp: if not None, seconds-since-epoch for a
 | 
|
241  | 
            postdated/predated commit.
 | 
|
242  | 
||
| 
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.  | 
243  | 
        :param specific_files: If not None, commit only those files. An empty
 | 
244  | 
            list means 'commit no files'.
 | 
|
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
245  | 
|
246  | 
        :param rev_id: If set, use this as the new revision id.
 | 
|
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
247  | 
            Useful for test or import commands that need to tightly
 | 
248  | 
            control what revisions are assigned.  If you duplicate
 | 
|
249  | 
            a revision id that exists elsewhere it is your own fault.
 | 
|
250  | 
            If null (default), a time/random revision id is generated.
 | 
|
| 
1253
by Martin Pool
 - test that pointless commits are trapped  | 
251  | 
|
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
252  | 
        :param allow_pointless: If true (default), commit even if nothing
 | 
| 
1253
by Martin Pool
 - test that pointless commits are trapped  | 
253  | 
            has changed and no merges are recorded.
 | 
| 
1185.16.35
by Martin Pool
 - stub for revision properties  | 
254  | 
|
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
255  | 
        :param strict: If true, don't allow a commit if the working tree
 | 
| 
1185.16.65
by mbp at sourcefrog
 - new commit --strict option  | 
256  | 
            contains unknown files.
 | 
257  | 
||
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
258  | 
        :param revprops: Properties for new revision
 | 
| 
1587.1.8
by Robert Collins
 Local commits on unbound branches fail.  | 
259  | 
        :param local: Perform a local only commit.
 | 
| 
2789.2.1
by Ian Clatworthy
 Make commit less verbose by default  | 
260  | 
        :param reporter: the reporter to use or None for the default
 | 
261  | 
        :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.  | 
262  | 
        :param recursive: If set to 'down', commit in any subtrees that have
 | 
263  | 
            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)  | 
264  | 
        :param exclude: None or a list of relative paths to exclude from the
 | 
265  | 
            commit. Pending changes to excluded files will be ignored by the
 | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
266  | 
            commit.
 | 
| 
5777.6.1
by Jelmer Vernooij
 Add --lossy option to 'bzr commit'.  | 
267  | 
        :param lossy: When committing to a foreign VCS, ignore any
 | 
268  | 
            data that can not be natively represented.
 | 
|
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
269  | 
        """
 | 
| 
4744.3.2
by Andrew Bennetts
 Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.  | 
270  | 
operation = OperationWithCleanups(self._commit)  | 
| 
5086.6.1
by Robert Collins
 Minor commit tidyup in preparation for hooking around revprops.  | 
271  | 
self.revprops = revprops or {}  | 
| 
5141.1.1
by Robert Collins
 ``bzrlib.mutabletree.MutableTree.commit`` will now support a passed in  | 
272  | 
        # 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.  | 
273  | 
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.  | 
274  | 
return operation.run(  | 
275  | 
message=message,  | 
|
276  | 
timestamp=timestamp,  | 
|
277  | 
timezone=timezone,  | 
|
278  | 
committer=committer,  | 
|
279  | 
specific_files=specific_files,  | 
|
280  | 
rev_id=rev_id,  | 
|
281  | 
allow_pointless=allow_pointless,  | 
|
282  | 
strict=strict,  | 
|
283  | 
verbose=verbose,  | 
|
284  | 
working_tree=working_tree,  | 
|
285  | 
local=local,  | 
|
286  | 
reporter=reporter,  | 
|
287  | 
message_callback=message_callback,  | 
|
288  | 
recursive=recursive,  | 
|
289  | 
exclude=exclude,  | 
|
| 
5777.6.1
by Jelmer Vernooij
 Add --lossy option to 'bzr commit'.  | 
290  | 
possible_master_transports=possible_master_transports,  | 
291  | 
lossy=lossy)  | 
|
| 
4744.3.2
by Andrew Bennetts
 Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.  | 
292  | 
|
293  | 
def _commit(self, operation, message, timestamp, timezone, committer,  | 
|
| 
5086.6.1
by Robert Collins
 Minor commit tidyup in preparation for hooking around revprops.  | 
294  | 
specific_files, rev_id, allow_pointless, strict, verbose,  | 
| 
5141.1.1
by Robert Collins
 ``bzrlib.mutabletree.MutableTree.commit`` will now support a passed in  | 
295  | 
working_tree, local, reporter, message_callback, recursive,  | 
| 
5777.6.1
by Jelmer Vernooij
 Add --lossy option to 'bzr commit'.  | 
296  | 
exclude, possible_master_transports, lossy):  | 
| 
1285
by Martin Pool
 - fix bug in committing files that are renamed but not modified  | 
297  | 
mutter('preparing to commit')  | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
298  | 
|
| 
2367.2.1
by Robert Collins
 Remove bzrlib 0.8 compatability where it was making the code unclear or messy. (Robert Collins)  | 
299  | 
if working_tree is None:  | 
300  | 
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.  | 
301  | 
else:  | 
302  | 
self.work_tree = working_tree  | 
|
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
303  | 
self.branch = self.work_tree.branch  | 
| 
2100.3.14
by Aaron Bentley
 Test workingtree4 format, prevent use with old repos  | 
304  | 
if getattr(self.work_tree, 'requires_rich_root', lambda: False)():  | 
305  | 
if not self.branch.repository.supports_rich_root():  | 
|
306  | 
raise errors.RootNotRich()  | 
|
| 
2149.1.1
by Aaron Bentley
 Provide a message_callback parameter to tree.commit  | 
307  | 
if message_callback is None:  | 
| 
2149.1.3
by Aaron Bentley
 Updates from review comments  | 
308  | 
if message is not None:  | 
309  | 
if isinstance(message, str):  | 
|
| 
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.  | 
310  | 
message = message.decode(get_user_encoding())  | 
| 
2149.1.3
by Aaron Bentley
 Updates from review comments  | 
311  | 
message_callback = lambda x: message  | 
| 
2149.1.1
by Aaron Bentley
 Provide a message_callback parameter to tree.commit  | 
312  | 
else:  | 
| 
2149.1.3
by Aaron Bentley
 Updates from review comments  | 
313  | 
raise BzrError("The message or message_callback keyword"  | 
314  | 
" 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.  | 
315  | 
|
| 
1505.1.24
by John Arbash Meinel
 Updated commit to handle bound branches. Included test to handle commit after merge  | 
316  | 
self.bound_branch = None  | 
| 
2840.1.1
by Ian Clatworthy
 faster pointless commit detection (Robert Collins)  | 
317  | 
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)  | 
318  | 
if exclude is not None:  | 
319  | 
self.exclude = sorted(  | 
|
320  | 
minimum_path_selection(exclude))  | 
|
321  | 
else:  | 
|
322  | 
self.exclude = []  | 
|
| 
1587.1.9
by Robert Collins
 Local commits do no alter or access the master branch.  | 
323  | 
self.local = local  | 
| 
1505.1.24
by John Arbash Meinel
 Updated commit to handle bound branches. Included test to handle commit after merge  | 
324  | 
self.master_branch = None  | 
| 
2776.4.15
by Robert Collins
 Put checking for recursive commits back to the commit driver, not commit builder.  | 
325  | 
self.recursive = recursive  | 
| 
1740.3.10
by Jelmer Vernooij
 Fix some minor issues pointed out by j-a-m.  | 
326  | 
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.  | 
327  | 
        # self.specific_files is None to indicate no filter, or any iterable to
 | 
328  | 
        # 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)  | 
329  | 
if specific_files is not None:  | 
330  | 
self.specific_files = sorted(  | 
|
331  | 
minimum_path_selection(specific_files))  | 
|
332  | 
else:  | 
|
333  | 
self.specific_files = None  | 
|
| 
5718.4.1
by Jelmer Vernooij
 Add CommitBuilder.supports_record_entry_contents.  | 
334  | 
|
| 
1194
by Martin Pool
 - [BROKEN] more progress of commit into weaves  | 
335  | 
self.allow_pointless = allow_pointless  | 
| 
2255.2.218
by Robert Collins
 Make the nested tree commit smoke test be more rigourous.  | 
336  | 
self.message_callback = message_callback  | 
337  | 
self.timestamp = timestamp  | 
|
338  | 
self.timezone = timezone  | 
|
339  | 
self.committer = committer  | 
|
340  | 
self.strict = strict  | 
|
341  | 
self.verbose = verbose  | 
|
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
342  | 
|
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
343  | 
self.work_tree.lock_write()  | 
| 
4744.3.2
by Andrew Bennetts
 Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.  | 
344  | 
operation.add_cleanup(self.work_tree.unlock)  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
345  | 
self.parents = self.work_tree.get_parent_ids()  | 
346  | 
        # We can use record_iter_changes IFF iter_changes is compatible with
 | 
|
347  | 
        # the command line parameters, and the repository has fast delta
 | 
|
348  | 
        # generation. See bug 347649.
 | 
|
349  | 
self.use_record_iter_changes = (  | 
|
350  | 
not self.exclude and  | 
|
351  | 
not self.branch.repository._format.supports_tree_reference and  | 
|
| 
4183.5.8
by Robert Collins
 Correct logic for detecting when to use record_iter_changes in commit.  | 
352  | 
(self.branch.repository._format.fast_deltas or  | 
353  | 
len(self.parents) < 2))  | 
|
| 
5582.10.6
by Jelmer Vernooij
 Fix ui imports.  | 
354  | 
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.  | 
355  | 
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.  | 
356  | 
self.basis_revid = self.work_tree.last_revision()  | 
| 
2789.2.4
by Ian Clatworthy
 make change reporting smarter for initial commit  | 
357  | 
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  | 
358  | 
self.basis_tree.lock_read()  | 
| 
4744.3.2
by Andrew Bennetts
 Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.  | 
359  | 
operation.add_cleanup(self.basis_tree.unlock)  | 
360  | 
        # Cannot commit with conflicts present.
 | 
|
361  | 
if len(self.work_tree.conflicts()) > 0:  | 
|
362  | 
raise ConflictsInTree  | 
|
363  | 
||
364  | 
        # Setup the bound branch variables as needed.
 | 
|
365  | 
self._check_bound_branch(operation, possible_master_transports)  | 
|
366  | 
||
367  | 
        # 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.  | 
368  | 
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.  | 
369  | 
|
370  | 
        # Complete configuration setup
 | 
|
371  | 
if reporter is not None:  | 
|
372  | 
self.reporter = reporter  | 
|
373  | 
elif self.reporter is None:  | 
|
374  | 
self.reporter = self._select_reporter()  | 
|
| 
6351.3.2
by Jelmer Vernooij
 Convert some gpg options to config stacks.  | 
375  | 
if self.config_stack is None:  | 
| 
6449.6.4
by Jelmer Vernooij
 Use config stack.  | 
376  | 
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.  | 
377  | 
|
378  | 
self._set_specific_file_ids()  | 
|
379  | 
||
380  | 
        # Setup the progress bar. As the number of files that need to be
 | 
|
381  | 
        # committed in unknown, progress is reported as stages.
 | 
|
382  | 
        # We keep track of entries separately though and include that
 | 
|
383  | 
        # information in the progress bar during the relevant stages.
 | 
|
384  | 
self.pb_stage_name = ""  | 
|
385  | 
self.pb_stage_count = 0  | 
|
386  | 
self.pb_stage_total = 5  | 
|
387  | 
if self.bound_branch:  | 
|
| 
5050.52.3
by Andrew Bennetts
 Merge tags from local to master when committing in a bound branch.  | 
388  | 
            # 2 extra stages: "Uploading data to master branch" and "Merging
 | 
389  | 
            # tags to master branch"
 | 
|
390  | 
self.pb_stage_total += 2  | 
|
| 
4744.3.2
by Andrew Bennetts
 Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.  | 
391  | 
self.pb.show_pct = False  | 
392  | 
self.pb.show_spinner = False  | 
|
393  | 
self.pb.show_eta = False  | 
|
394  | 
self.pb.show_count = True  | 
|
395  | 
self.pb.show_bar = True  | 
|
396  | 
||
397  | 
self._gather_parents()  | 
|
398  | 
        # After a merge, a selected file commit is not supported.
 | 
|
399  | 
        # See 'bzr help merge' for an explanation as to why.
 | 
|
400  | 
if len(self.parents) > 1 and self.specific_files is not None:  | 
|
401  | 
raise errors.CannotCommitSelectedFileMerge(self.specific_files)  | 
|
402  | 
        # Excludes are a form of selected file commit.
 | 
|
403  | 
if len(self.parents) > 1 and self.exclude:  | 
|
404  | 
raise errors.CannotCommitSelectedFileMerge(self.exclude)  | 
|
405  | 
||
406  | 
        # Collect the changes
 | 
|
407  | 
self._set_progress_stage("Collecting changes", counter=True)  | 
|
| 
5777.6.5
by Jelmer Vernooij
 Add tests for lossy commit.  | 
408  | 
self._lossy = lossy  | 
| 
4744.3.2
by Andrew Bennetts
 Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.  | 
409  | 
self.builder = self.branch.get_commit_builder(self.parents,  | 
| 
6351.3.2
by Jelmer Vernooij
 Convert some gpg options to config stacks.  | 
410  | 
self.config_stack, timestamp, timezone, committer, self.revprops,  | 
| 
5777.6.1
by Jelmer Vernooij
 Add --lossy option to 'bzr commit'.  | 
411  | 
rev_id, lossy=lossy)  | 
| 
5718.4.9
by Jelmer Vernooij
 Fix logic for raising ExcludesUnsupported exception. It's a pity we have no record-iter-changes-only formats in bzr.dev.  | 
412  | 
if not self.builder.supports_record_entry_contents and self.exclude:  | 
| 
5718.4.5
by Jelmer Vernooij
 Move ExcludesUnsupported raise location.  | 
413  | 
self.builder.abort()  | 
414  | 
raise errors.ExcludesUnsupported(self.branch.repository)  | 
|
| 
4744.3.2
by Andrew Bennetts
 Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.  | 
415  | 
|
| 
6217.5.2
by Jelmer Vernooij
 Factor out the updating of branches into a separate helper.  | 
416  | 
if self.builder.updates_branch and self.bound_branch:  | 
417  | 
self.builder.abort()  | 
|
418  | 
raise AssertionError(  | 
|
419  | 
                "bound branches not supported for commit builders "
 | 
|
420  | 
"that update the branch")  | 
|
421  | 
||
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
422  | 
try:  | 
| 
5718.4.8
by Jelmer Vernooij
 Revert conditional will_record_deletes.  | 
423  | 
self.builder.will_record_deletes()  | 
| 
4744.3.2
by Andrew Bennetts
 Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.  | 
424  | 
            # find the location being committed to
 | 
425  | 
if self.bound_branch:  | 
|
426  | 
master_location = self.master_branch.base  | 
|
427  | 
else:  | 
|
428  | 
master_location = self.branch.base  | 
|
429  | 
||
430  | 
            # report the start of the commit
 | 
|
431  | 
self.reporter.started(new_revno, self.rev_id, master_location)  | 
|
432  | 
||
433  | 
self._update_builder_with_changes()  | 
|
434  | 
self._check_pointless()  | 
|
435  | 
||
436  | 
            # TODO: Now the new inventory is known, check for conflicts.
 | 
|
437  | 
            # ADHB 2006-08-08: If this is done, populate_new_inv should not add
 | 
|
438  | 
            # weave lines, because nothing should be recorded until it is known
 | 
|
439  | 
            # that commit will succeed.
 | 
|
440  | 
self._set_progress_stage("Saving data locally")  | 
|
441  | 
self.builder.finish_inventory()  | 
|
442  | 
||
443  | 
            # Prompt the user for a commit message if none provided
 | 
|
444  | 
message = message_callback(self)  | 
|
445  | 
self.message = message  | 
|
446  | 
||
447  | 
            # Add revision data to the local branch
 | 
|
448  | 
self.rev_id = self.builder.commit(self.message)  | 
|
449  | 
||
| 
6619.3.2
by Jelmer Vernooij
 Apply 2to3 except fix.  | 
450  | 
except Exception as e:  | 
| 
4744.3.2
by Andrew Bennetts
 Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.  | 
451  | 
mutter("aborting commit write group because of exception:")  | 
452  | 
trace.log_exception_quietly()  | 
|
453  | 
self.builder.abort()  | 
|
454  | 
            raise
 | 
|
455  | 
||
| 
6217.5.2
by Jelmer Vernooij
 Factor out the updating of branches into a separate helper.  | 
456  | 
self._update_branches(old_revno, old_revid, new_revno)  | 
457  | 
||
458  | 
        # Make the working tree be up to date with the branch. This
 | 
|
459  | 
        # includes automatic changes scheduled to be made to the tree, such
 | 
|
460  | 
        # as updating its basis and unversioning paths that were missing.
 | 
|
461  | 
self.work_tree.unversion(self.deleted_ids)  | 
|
462  | 
self._set_progress_stage("Updating the working tree")  | 
|
463  | 
self.work_tree.update_basis_by_delta(self.rev_id,  | 
|
464  | 
self.builder.get_basis_delta())  | 
|
465  | 
self.reporter.completed(new_revno, self.rev_id)  | 
|
466  | 
self._process_post_hooks(old_revno, new_revno)  | 
|
467  | 
return self.rev_id  | 
|
468  | 
||
469  | 
def _update_branches(self, old_revno, old_revid, new_revno):  | 
|
470  | 
"""Update the master and local branch to the new revision.  | 
|
471  | 
||
472  | 
        This will try to make sure that the master branch is updated
 | 
|
473  | 
        before the local branch.
 | 
|
474  | 
||
475  | 
        :param old_revno: Revision number of master branch before the
 | 
|
476  | 
            commit
 | 
|
477  | 
        :param old_revid: Tip of master branch before the commit
 | 
|
478  | 
        :param new_revno: Revision number of the new commit
 | 
|
479  | 
        """
 | 
|
| 
6217.5.1
by Jelmer Vernooij
 Add CommitBuilder.updates_branch.  | 
480  | 
if not self.builder.updates_branch:  | 
481  | 
self._process_pre_hooks(old_revno, new_revno)  | 
|
482  | 
||
483  | 
            # Upload revision data to the master.
 | 
|
484  | 
            # this will propagate merged revisions too if needed.
 | 
|
485  | 
if self.bound_branch:  | 
|
486  | 
self._set_progress_stage("Uploading data to master branch")  | 
|
487  | 
                # 'commit' to the master first so a timeout here causes the
 | 
|
488  | 
                # local branch to be out of date
 | 
|
489  | 
(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.  | 
490  | 
self.branch, new_revno, self.rev_id, lossy=self._lossy)  | 
491  | 
if self._lossy:  | 
|
| 
6217.5.1
by Jelmer Vernooij
 Add CommitBuilder.updates_branch.  | 
492  | 
self.branch.fetch(self.master_branch, self.rev_id)  | 
493  | 
||
494  | 
            # and now do the commit locally.
 | 
|
495  | 
self.branch.set_last_revision_info(new_revno, self.rev_id)  | 
|
496  | 
else:  | 
|
497  | 
try:  | 
|
498  | 
self._process_pre_hooks(old_revno, new_revno)  | 
|
499  | 
except:  | 
|
500  | 
                # The commit builder will already have updated the branch,
 | 
|
501  | 
                # revert it.
 | 
|
| 
6217.5.2
by Jelmer Vernooij
 Factor out the updating of branches into a separate helper.  | 
502  | 
self.branch.set_last_revision_info(old_revno, old_revid)  | 
| 
6217.5.1
by Jelmer Vernooij
 Add CommitBuilder.updates_branch.  | 
503  | 
                raise
 | 
| 
4744.3.2
by Andrew Bennetts
 Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.  | 
504  | 
|
| 
5050.52.3
by Andrew Bennetts
 Merge tags from local to master when committing in a bound branch.  | 
505  | 
        # Merge local tags to remote
 | 
506  | 
if self.bound_branch:  | 
|
507  | 
self._set_progress_stage("Merging tags to master branch")  | 
|
| 
6112.4.2
by Jelmer Vernooij
 Fix tag tests.  | 
508  | 
tag_updates, tag_conflicts = self.branch.tags.merge_to(  | 
509  | 
self.master_branch.tags)  | 
|
| 
5050.52.3
by Andrew Bennetts
 Merge tags from local to master when committing in a bound branch.  | 
510  | 
if tag_conflicts:  | 
511  | 
warning_lines = [' ' + name for name, _, _ in tag_conflicts]  | 
|
| 
6138.3.5
by Jonathan Riddell
 make the test suite pass  | 
512  | 
note( gettext("Conflicting tags in bound branch:\n{0}".format(  | 
513  | 
"\n".join(warning_lines))) )  | 
|
| 
5050.52.3
by Andrew Bennetts
 Merge tags from local to master when committing in a bound branch.  | 
514  | 
|
| 
2789.2.4
by Ian Clatworthy
 make change reporting smarter for initial commit  | 
515  | 
def _select_reporter(self):  | 
516  | 
"""Select the CommitReporter to use."""  | 
|
517  | 
if is_quiet():  | 
|
518  | 
return NullCommitReporter()  | 
|
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
519  | 
return ReportCommitToLog()  | 
| 
2789.2.4
by Ian Clatworthy
 make change reporting smarter for initial commit  | 
520  | 
|
| 
1910.2.37
by Aaron Bentley
 Handle empty commits, fix test  | 
521  | 
def _check_pointless(self):  | 
522  | 
if self.allow_pointless:  | 
|
523  | 
            return
 | 
|
524  | 
        # A merge with no effect on files
 | 
|
525  | 
if len(self.parents) > 1:  | 
|
526  | 
            return
 | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
527  | 
if self.builder.any_changes():  | 
| 
1910.2.37
by Aaron Bentley
 Handle empty commits, fix test  | 
528  | 
            return
 | 
529  | 
raise PointlessCommit()  | 
|
530  | 
||
| 
4744.3.2
by Andrew Bennetts
 Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.  | 
531  | 
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  | 
532  | 
"""Check to see if the local branch is bound.  | 
533  | 
||
534  | 
        If it is bound, then most of the commit will actually be
 | 
|
535  | 
        done using the remote branch as the target branch.
 | 
|
536  | 
        Only at the end will the local branch be updated.
 | 
|
537  | 
        """
 | 
|
| 
1587.1.9
by Robert Collins
 Local commits do no alter or access the master branch.  | 
538  | 
if self.local and not self.branch.get_bound_location():  | 
539  | 
raise errors.LocalRequiresBoundBranch()  | 
|
540  | 
||
541  | 
if not self.local:  | 
|
| 
3565.6.9
by Marius Kruger
 Jump through hoops not to open multiple connections when committing to a bound branch.  | 
542  | 
self.master_branch = self.branch.get_master_branch(  | 
543  | 
possible_master_transports)  | 
|
| 
1587.1.9
by Robert Collins
 Local commits do no alter or access the master branch.  | 
544  | 
|
| 
1505.1.24
by John Arbash Meinel
 Updated commit to handle bound branches. Included test to handle commit after merge  | 
545  | 
if not self.master_branch:  | 
| 
1587.1.8
by Robert Collins
 Local commits on unbound branches fail.  | 
546  | 
            # make this branch the reference branch for out of date checks.
 | 
547  | 
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  | 
548  | 
            return
 | 
549  | 
||
550  | 
        # If the master branch is bound, we must fail
 | 
|
551  | 
master_bound_location = self.master_branch.get_bound_location()  | 
|
552  | 
if master_bound_location:  | 
|
| 
1505.1.27
by John Arbash Meinel
 Adding tests against an sftp branch.  | 
553  | 
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  | 
554  | 
self.master_branch, master_bound_location)  | 
555  | 
||
556  | 
        # TODO: jam 20051230 We could automatically push local
 | 
|
557  | 
        #       commits to the remote branch if they would fit.
 | 
|
558  | 
        #       But for now, just require remote to be identical
 | 
|
559  | 
        #       to local.
 | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
560  | 
|
| 
1505.1.24
by John Arbash Meinel
 Updated commit to handle bound branches. Included test to handle commit after merge  | 
561  | 
        # 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.  | 
562  | 
master_info = self.master_branch.last_revision_info()  | 
563  | 
local_info = self.branch.last_revision_info()  | 
|
564  | 
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  | 
565  | 
raise errors.BoundBranchOutOfDate(self.branch,  | 
566  | 
self.master_branch)  | 
|
567  | 
||
568  | 
        # Now things are ready to change the master branch
 | 
|
569  | 
        # so grab the lock
 | 
|
570  | 
self.bound_branch = self.branch  | 
|
571  | 
self.master_branch.lock_write()  | 
|
| 
4744.3.2
by Andrew Bennetts
 Add OperationWithCleanups helper, use it to make commit.py simpler and more robust.  | 
572  | 
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  | 
573  | 
|
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
574  | 
def _check_out_of_date_tree(self):  | 
575  | 
"""Check that the working tree is up to date.  | 
|
576  | 
||
| 
6217.5.2
by Jelmer Vernooij
 Factor out the updating of branches into a separate helper.  | 
577  | 
        :return: old_revision_number, old_revision_id, new_revision_number
 | 
578  | 
            tuple
 | 
|
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
579  | 
        """
 | 
580  | 
try:  | 
|
581  | 
first_tree_parent = self.work_tree.get_parent_ids()[0]  | 
|
582  | 
except IndexError:  | 
|
583  | 
            # if there are no parents, treat our parent as 'None'
 | 
|
584  | 
            # this is so that we still consider the master branch
 | 
|
585  | 
            # - in a checkout scenario the tree may have no
 | 
|
586  | 
            # parents but the branch may do.
 | 
|
| 
6622.1.34
by Jelmer Vernooij
 Rename brzlib => breezy.  | 
587  | 
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  | 
588  | 
old_revno, master_last = self.master_branch.last_revision_info()  | 
589  | 
if master_last != first_tree_parent:  | 
|
| 
6622.1.34
by Jelmer Vernooij
 Rename brzlib => breezy.  | 
590  | 
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  | 
591  | 
raise errors.OutOfDateTree(self.work_tree)  | 
592  | 
if self.branch.repository.has_revision(first_tree_parent):  | 
|
593  | 
new_revno = old_revno + 1  | 
|
594  | 
else:  | 
|
595  | 
            # ghost parents never appear in revision history.
 | 
|
596  | 
new_revno = 1  | 
|
| 
6217.5.2
by Jelmer Vernooij
 Factor out the updating of branches into a separate helper.  | 
597  | 
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  | 
598  | 
|
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
599  | 
def _process_pre_hooks(self, old_revno, new_revno):  | 
600  | 
"""Process any registered pre commit hooks."""  | 
|
| 
2659.3.9
by NamNguyen
 branch.py:  | 
601  | 
self._set_progress_stage("Running pre_commit hooks")  | 
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
602  | 
self._process_hooks("pre_commit", old_revno, new_revno)  | 
603  | 
||
604  | 
def _process_post_hooks(self, old_revno, new_revno):  | 
|
605  | 
"""Process any registered post commit hooks."""  | 
|
| 
2553.1.2
by Robert Collins
 Show hook names during commit.  | 
606  | 
        # Process the post commit hooks, if any
 | 
| 
2659.3.9
by NamNguyen
 branch.py:  | 
607  | 
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  | 
608  | 
        # 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.  | 
609  | 
        # 0.15^H^H^H^H 2.5.0)
 | 
610  | 
post_commit = self.config_stack.get('post_commit')  | 
|
611  | 
if post_commit is not None:  | 
|
612  | 
hooks = post_commit.split(' ')  | 
|
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
613  | 
            # this would be nicer with twisted.python.reflect.namedAny
 | 
614  | 
for hook in hooks:  | 
|
615  | 
result = eval(hook + '(branch, rev_id)',  | 
|
616  | 
{'branch':self.branch,  | 
|
| 
6622.1.34
by Jelmer Vernooij
 Rename brzlib => breezy.  | 
617  | 
'breezy':breezy,  | 
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
618  | 
'rev_id':self.rev_id})  | 
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
619  | 
        # process new style post commit hooks
 | 
620  | 
self._process_hooks("post_commit", old_revno, new_revno)  | 
|
621  | 
||
622  | 
def _process_hooks(self, hook_name, old_revno, new_revno):  | 
|
| 
2659.3.3
by NamNguyen
 Changed ``pre_commit`` hook signature.  | 
623  | 
if not Branch.hooks[hook_name]:  | 
624  | 
            return
 | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
625  | 
|
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
626  | 
        # new style commit hooks:
 | 
627  | 
if not self.bound_branch:  | 
|
628  | 
hook_master = self.branch  | 
|
629  | 
hook_local = None  | 
|
630  | 
else:  | 
|
631  | 
hook_master = self.master_branch  | 
|
632  | 
hook_local = self.branch  | 
|
633  | 
        # With bound branches, when the master is behind the local branch,
 | 
|
634  | 
        # the 'old_revno' and old_revid values here are incorrect.
 | 
|
635  | 
        # XXX: FIXME ^. RBC 20060206
 | 
|
636  | 
if self.parents:  | 
|
637  | 
old_revid = self.parents[0]  | 
|
638  | 
else:  | 
|
| 
6622.1.34
by Jelmer Vernooij
 Rename brzlib => breezy.  | 
639  | 
old_revid = breezy.revision.NULL_REVISION  | 
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
640  | 
|
| 
2659.3.9
by NamNguyen
 branch.py:  | 
641  | 
if hook_name == "pre_commit":  | 
642  | 
future_tree = self.builder.revision_tree()  | 
|
643  | 
tree_delta = future_tree.changes_from(self.basis_tree,  | 
|
644  | 
include_root=True)  | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
645  | 
|
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
646  | 
for hook in Branch.hooks[hook_name]:  | 
| 
2553.1.3
by Robert Collins
 Increase docs in response to review feedback.  | 
647  | 
            # show the running hook in the progress bar. As hooks may
 | 
648  | 
            # end up doing nothing (e.g. because they are not configured by
 | 
|
649  | 
            # the user) this is still showing progress, not showing overall
 | 
|
650  | 
            # actions - its up to each plugin to show a UI if it want's to
 | 
|
651  | 
            # (such as 'Emailing diff to foo@example.com').
 | 
|
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
652  | 
self.pb_stage_name = "Running %s hooks [%s]" % \  | 
| 
2659.3.9
by NamNguyen
 branch.py:  | 
653  | 
(hook_name, Branch.hooks.get_hook_name(hook))  | 
| 
2553.1.2
by Robert Collins
 Show hook names during commit.  | 
654  | 
self._emit_progress()  | 
| 
2560.1.4
by Robert Collins
 Allow -Dhooks to get the hooks invoked during commit logged.  | 
655  | 
if 'hooks' in debug.debug_flags:  | 
656  | 
mutter("Invoking commit hook: %r", hook)  | 
|
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
657  | 
if hook_name == "post_commit":  | 
658  | 
hook(hook_local, hook_master, old_revno, old_revid, new_revno,  | 
|
659  | 
self.rev_id)  | 
|
660  | 
elif hook_name == "pre_commit":  | 
|
661  | 
hook(hook_local, hook_master,  | 
|
662  | 
old_revno, old_revid, new_revno, self.rev_id,  | 
|
| 
2659.3.9
by NamNguyen
 branch.py:  | 
663  | 
tree_delta, future_tree)  | 
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
664  | 
|
| 
1223
by Martin Pool
 - store inventories in weave  | 
665  | 
def _gather_parents(self):  | 
| 
1092.2.25
by Robert Collins
 support ghosts in commits  | 
666  | 
"""Record the parents of a merge for merge detection."""  | 
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
667  | 
        # TODO: Make sure that this list doesn't contain duplicate
 | 
| 
1740.3.6
by Jelmer Vernooij
 Move inventory writing to the commit builder.  | 
668  | 
        # entries and the order is preserved when doing this.
 | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
669  | 
if self.use_record_iter_changes:  | 
670  | 
            return
 | 
|
| 
6405.2.5
by Jelmer Vernooij
 Add root_inventory.  | 
671  | 
self.basis_inv = self.basis_tree.root_inventory  | 
| 
5856.1.4
by Jelmer Vernooij
 Revert unnecessary change.  | 
672  | 
self.parent_invs = [self.basis_inv]  | 
| 
2283.2.1
by John Arbash Meinel
 Avoid deserializing an inventory we have already parsed.  | 
673  | 
for revision in self.parents[1:]:  | 
| 
5856.1.4
by Jelmer Vernooij
 Revert unnecessary change.  | 
674  | 
if self.branch.repository.has_revision(revision):  | 
| 
1927.2.1
by Robert Collins
 Alter set_pending_merges to shove the left most merge into the trees last-revision if that is not set. Related bugfixes include basis_tree handling ghosts, de-duping the merges with the last-revision and update changing where and how it adds its pending merge.  | 
675  | 
mutter('commit parent revision {%s}', revision)  | 
| 
5856.1.4
by Jelmer Vernooij
 Revert unnecessary change.  | 
676  | 
inventory = self.branch.repository.get_inventory(revision)  | 
677  | 
self.parent_invs.append(inventory)  | 
|
678  | 
else:  | 
|
| 
1927.2.1
by Robert Collins
 Alter set_pending_merges to shove the left most merge into the trees last-revision if that is not set. Related bugfixes include basis_tree handling ghosts, de-duping the merges with the last-revision and update changing where and how it adds its pending merge.  | 
679  | 
mutter('commit parent ghost revision {%s}', revision)  | 
| 
1284
by Martin Pool
 - in commit, avoid reading basis inventory twice  | 
680  | 
|
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
681  | 
def _update_builder_with_changes(self):  | 
| 
2541.1.1
by Ian Clatworthy
 Refactor commit.commit() to walk the working inventory once/less  | 
682  | 
"""Update the commit builder with the data about what has changed.  | 
683  | 
        """
 | 
|
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
684  | 
exclude = self.exclude  | 
| 
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.  | 
685  | 
specific_files = self.specific_files  | 
| 
2541.1.1
by Ian Clatworthy
 Refactor commit.commit() to walk the working inventory once/less  | 
686  | 
mutter("Selecting files for commit with filter %s", specific_files)  | 
687  | 
||
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
688  | 
self._check_strict()  | 
689  | 
if self.use_record_iter_changes:  | 
|
| 
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.  | 
690  | 
iter_changes = self.work_tree.iter_changes(self.basis_tree,  | 
691  | 
specific_files=specific_files)  | 
|
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
692  | 
iter_changes = self._filter_iter_changes(iter_changes)  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
693  | 
for file_id, path, fs_hash in self.builder.record_iter_changes(  | 
694  | 
self.work_tree, self.basis_revid, iter_changes):  | 
|
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
695  | 
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.  | 
696  | 
else:  | 
697  | 
            # Build the new inventory
 | 
|
| 
5856.1.4
by Jelmer Vernooij
 Revert unnecessary change.  | 
698  | 
self._populate_from_inventory()  | 
699  | 
self._record_unselected()  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
700  | 
self._report_and_accumulate_deletes()  | 
701  | 
||
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
702  | 
def _filter_iter_changes(self, iter_changes):  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
703  | 
"""Process iter_changes.  | 
704  | 
||
705  | 
        This method reports on the changes in iter_changes to the user, and 
 | 
|
706  | 
        converts 'missing' entries in the iter_changes iterator to 'deleted'
 | 
|
707  | 
        entries. 'missing' entries have their
 | 
|
708  | 
||
709  | 
        :param iter_changes: An iter_changes to process.
 | 
|
710  | 
        :return: A generator of changes.
 | 
|
711  | 
        """
 | 
|
712  | 
reporter = self.reporter  | 
|
713  | 
report_changes = reporter.is_verbose()  | 
|
714  | 
deleted_ids = []  | 
|
715  | 
for change in iter_changes:  | 
|
716  | 
if report_changes:  | 
|
717  | 
old_path = change[1][0]  | 
|
718  | 
new_path = change[1][1]  | 
|
719  | 
versioned = change[3][1]  | 
|
720  | 
kind = change[6][1]  | 
|
721  | 
versioned = change[3][1]  | 
|
722  | 
if kind is None and versioned:  | 
|
723  | 
                # 'missing' path
 | 
|
724  | 
if report_changes:  | 
|
725  | 
reporter.missing(new_path)  | 
|
726  | 
deleted_ids.append(change[0])  | 
|
727  | 
                # Reset the new path (None) and new versioned flag (False)
 | 
|
728  | 
change = (change[0], (change[1][0], None), change[2],  | 
|
729  | 
(change[3][0], False)) + change[4:]  | 
|
| 
6125.1.1
by Jelmer Vernooij
 Report missing files as removed in 'bzr commit', rather than modified.  | 
730  | 
new_path = change[1][1]  | 
731  | 
versioned = False  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
732  | 
elif kind == 'tree-reference':  | 
733  | 
if self.recursive == 'down':  | 
|
734  | 
self._commit_nested_tree(change[0], change[1][1])  | 
|
735  | 
if change[3][0] or change[3][1]:  | 
|
736  | 
yield change  | 
|
737  | 
if report_changes:  | 
|
738  | 
if new_path is None:  | 
|
739  | 
reporter.deleted(old_path)  | 
|
740  | 
elif old_path is None:  | 
|
| 
6138.3.2
by Jonathan Riddell
 gettext-ify bzrlib/commit.py  | 
741  | 
reporter.snapshot_change(gettext('added'), new_path)  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
742  | 
elif old_path != new_path:  | 
| 
6138.3.2
by Jonathan Riddell
 gettext-ify bzrlib/commit.py  | 
743  | 
reporter.renamed(gettext('renamed'), old_path, new_path)  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
744  | 
else:  | 
745  | 
if (new_path or  | 
|
746  | 
self.work_tree.branch.repository._format.rich_root_data):  | 
|
747  | 
                            # Don't report on changes to '' in non rich root
 | 
|
748  | 
                            # repositories.
 | 
|
| 
6138.3.2
by Jonathan Riddell
 gettext-ify bzrlib/commit.py  | 
749  | 
reporter.snapshot_change(gettext('modified'), new_path)  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
750  | 
self._next_progress_entry()  | 
751  | 
        # 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)  | 
752  | 
self.deleted_ids = deleted_ids  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
753  | 
|
| 
5856.1.4
by Jelmer Vernooij
 Revert unnecessary change.  | 
754  | 
def _record_unselected(self):  | 
| 
2564.2.7
by Ian Clatworthy
 Clean-up comments and make use of self.builder.record_root_entry more explicit  | 
755  | 
        # If specific files are selected, then all un-selected files must be
 | 
756  | 
        # recorded in their previous state. For more details, see
 | 
|
757  | 
        # https://lists.ubuntu.com/archives/bazaar/2007q3/028476.html.
 | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
758  | 
if self.specific_files or self.exclude:  | 
759  | 
specific_files = self.specific_files or []  | 
|
| 
2825.7.1
by Robert Collins
 * Partial commits are now approximately 40% faster by walking over the  | 
760  | 
for path, old_ie in self.basis_inv.iter_entries():  | 
| 
5967.7.1
by Martin Pool
 Deprecate __contains__ on Tree and Inventory  | 
761  | 
if self.builder.new_inventory.has_id(old_ie.file_id):  | 
| 
2776.4.6
by Robert Collins
 Fixup various commit test failures falling out from the other commit changes.  | 
762  | 
                    # already added - skip.
 | 
| 
2541.1.1
by Ian Clatworthy
 Refactor commit.commit() to walk the working inventory once/less  | 
763  | 
                    continue
 | 
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
764  | 
if (is_inside_any(specific_files, path)  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
765  | 
and not is_inside_any(self.exclude, path)):  | 
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
766  | 
                    # was inside the selected path, and not excluded - if not
 | 
767  | 
                    # present it has been deleted so skip.
 | 
|
| 
2541.1.1
by Ian Clatworthy
 Refactor commit.commit() to walk the working inventory once/less  | 
768  | 
                    continue
 | 
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
769  | 
                # From here down it was either not selected, or was excluded:
 | 
770  | 
                # We preserve the entry unaltered.
 | 
|
| 
2825.7.1
by Robert Collins
 * Partial commits are now approximately 40% faster by walking over the  | 
771  | 
ie = old_ie.copy()  | 
| 
2843.1.1
by Ian Clatworthy
 Faster partial commits by walking less data (Robert Collins)  | 
772  | 
                # Note: specific file commits after a merge are currently
 | 
773  | 
                # prohibited. This test is for sanity/safety in case it's
 | 
|
774  | 
                # required after that changes.
 | 
|
775  | 
if len(self.parents) > 1:  | 
|
776  | 
ie.revision = None  | 
|
| 
5856.1.4
by Jelmer Vernooij
 Revert unnecessary change.  | 
777  | 
self.builder.record_entry_contents(ie, self.parent_invs, path,  | 
| 
3775.2.8
by Robert Collins
 Move --unchanged detection in commit into the CommitBuilder.  | 
778  | 
self.basis_tree, None)  | 
| 
2541.1.1
by Ian Clatworthy
 Refactor commit.commit() to walk the working inventory once/less  | 
779  | 
|
| 
2903.2.1
by Martin Pool
 Commit now tells the working tree about the new basis by passing the an inventory delta from the previous basis  | 
780  | 
def _report_and_accumulate_deletes(self):  | 
| 
3735.5.2
by Martin Pool
 Restore optimization in commit _report_and_accumulate_deletes  | 
781  | 
if (isinstance(self.basis_inv, Inventory)  | 
782  | 
and isinstance(self.builder.new_inventory, Inventory)):  | 
|
| 
3825.1.1
by Martin Pool
 commit should not assume Inventories have a _byid dictionary  | 
783  | 
            # the older Inventory classes provide a _byid dict, and building a
 | 
784  | 
            # set from the keys of this dict is substantially faster than even
 | 
|
785  | 
            # getting a set of ids from the inventory
 | 
|
786  | 
            #
 | 
|
787  | 
            # <lifeless> set(dict) is roughly the same speed as
 | 
|
788  | 
            # set(iter(dict)) and both are significantly slower than
 | 
|
789  | 
            # set(dict.keys())
 | 
|
| 
3735.5.2
by Martin Pool
 Restore optimization in commit _report_and_accumulate_deletes  | 
790  | 
deleted_ids = set(self.basis_inv._byid.keys()) - \  | 
791  | 
set(self.builder.new_inventory._byid.keys())  | 
|
792  | 
else:  | 
|
793  | 
deleted_ids = set(self.basis_inv) - set(self.builder.new_inventory)  | 
|
| 
2903.2.1
by Martin Pool
 Commit now tells the working tree about the new basis by passing the an inventory delta from the previous basis  | 
794  | 
if deleted_ids:  | 
| 
2840.1.1
by Ian Clatworthy
 faster pointless commit detection (Robert Collins)  | 
795  | 
self.any_entries_deleted = True  | 
| 
6619.3.18
by Jelmer Vernooij
 Run 2to3 idioms fixer.  | 
796  | 
deleted = sorted([(self.basis_tree.id2path(file_id), file_id)  | 
797  | 
for file_id in deleted_ids])  | 
|
| 
2903.2.8
by Martin Pool
 More efficient reporting of deletions from a large tree during commit  | 
798  | 
            # XXX: this is not quite directory-order sorting
 | 
799  | 
for path, file_id in deleted:  | 
|
| 
3775.2.3
by Robert Collins
 Delegate basis inventory calculation during commit to the CommitBuilder object.  | 
800  | 
self.builder.record_delete(path, file_id)  | 
| 
2903.2.8
by Martin Pool
 More efficient reporting of deletions from a large tree during commit  | 
801  | 
self.reporter.deleted(path)  | 
| 
1551.7.24
by Aaron Bentley
 Ensure commit respects file spec when committing removals  | 
802  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
803  | 
def _check_strict(self):  | 
804  | 
        # XXX: when we use iter_changes this would likely be faster if
 | 
|
805  | 
        # iter_changes would check for us (even in the presence of
 | 
|
806  | 
        # selected_files).
 | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
807  | 
if self.strict:  | 
808  | 
            # raise an exception as soon as we find a single unknown.
 | 
|
809  | 
for unknown in self.work_tree.unknowns():  | 
|
810  | 
raise StrictCommitFailed()  | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
811  | 
|
| 
5856.1.4
by Jelmer Vernooij
 Revert unnecessary change.  | 
812  | 
def _populate_from_inventory(self):  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
813  | 
"""Populate the CommitBuilder by walking the working tree inventory."""  | 
814  | 
        # Build the revision inventory.
 | 
|
815  | 
        #
 | 
|
816  | 
        # This starts by creating a new empty inventory. Depending on
 | 
|
817  | 
        # which files are selected for commit, and what is present in the
 | 
|
818  | 
        # current tree, the new inventory is populated. inventory entries
 | 
|
819  | 
        # which are candidates for modification have their revision set to
 | 
|
820  | 
        # None; inventory entries that are carried over untouched have their
 | 
|
821  | 
        # revision set to their prior value.
 | 
|
822  | 
        #
 | 
|
823  | 
        # ESEPARATIONOFCONCERNS: this function is diffing and using the diff
 | 
|
824  | 
        # results to create a new inventory at the same time, which results
 | 
|
825  | 
        # in bugs like #46635.  Any reason not to use/enhance Tree.changes_from?
 | 
|
826  | 
        # ADHB 11-07-2006
 | 
|
827  | 
||
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
828  | 
specific_files = self.specific_files  | 
829  | 
exclude = self.exclude  | 
|
| 
2789.2.11
by Ian Clatworthy
 remove more reporting stuff  | 
830  | 
report_changes = self.reporter.is_verbose()  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
831  | 
deleted_ids = []  | 
| 
2938.3.2
by Robert Collins
 Review feedback.  | 
832  | 
        # A tree of paths that have been deleted. E.g. if foo/bar has been
 | 
833  | 
        # deleted, then we have {'foo':{'bar':{}}}
 | 
|
| 
2938.3.1
by Robert Collins
 * Commit with many automatically found deleted paths no longer performs  | 
834  | 
deleted_paths = {}  | 
| 
2921.4.5
by Robert Collins
 Remove an unnecessary assertion.  | 
835  | 
        # XXX: Note that entries may have the wrong kind because the entry does
 | 
836  | 
        # not reflect the status on disk.
 | 
|
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
837  | 
        # NB: entries will include entries within the excluded ids/paths
 | 
838  | 
        # because iter_entries_by_dir has no 'exclude' facility today.
 | 
|
| 
6468.2.7
by Jelmer Vernooij
 Use .iter_entries_by_dir.  | 
839  | 
entries = self.work_tree.iter_entries_by_dir(  | 
| 
2825.7.1
by Robert Collins
 * Partial commits are now approximately 40% faster by walking over the  | 
840  | 
specific_file_ids=self.specific_file_ids, yield_parents=True)  | 
| 
2564.2.6
by Ian Clatworthy
 Incorporate feedback from abentley  | 
841  | 
for path, existing_ie in entries:  | 
842  | 
file_id = existing_ie.file_id  | 
|
843  | 
name = existing_ie.name  | 
|
844  | 
parent_id = existing_ie.parent_id  | 
|
845  | 
kind = existing_ie.kind  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
846  | 
            # Skip files that have been deleted from the working tree.
 | 
| 
2938.3.1
by Robert Collins
 * Commit with many automatically found deleted paths no longer performs  | 
847  | 
            # The deleted path ids are also recorded so they can be explicitly
 | 
848  | 
            # unversioned later.
 | 
|
849  | 
if deleted_paths:  | 
|
850  | 
path_segments = splitpath(path)  | 
|
851  | 
deleted_dict = deleted_paths  | 
|
852  | 
for segment in path_segments:  | 
|
853  | 
deleted_dict = deleted_dict.get(segment, None)  | 
|
854  | 
if not deleted_dict:  | 
|
| 
2938.3.2
by Robert Collins
 Review feedback.  | 
855  | 
                        # We either took a path not present in the dict
 | 
856  | 
                        # (deleted_dict was None), or we've reached an empty
 | 
|
857  | 
                        # child dir in the dict, so are now a sub-path.
 | 
|
| 
2938.3.1
by Robert Collins
 * Commit with many automatically found deleted paths no longer performs  | 
858  | 
                        break
 | 
859  | 
else:  | 
|
860  | 
deleted_dict = None  | 
|
861  | 
if deleted_dict is not None:  | 
|
862  | 
                    # the path has a deleted parent, do not add it.
 | 
|
863  | 
                    continue
 | 
|
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
864  | 
if exclude and is_inside_any(exclude, path):  | 
| 
3603.1.1
by Robert Collins
 Further tweaks to tests and comments in the commit excludes feature.  | 
865  | 
                # Skip excluded paths. Excluded paths are processed by
 | 
866  | 
                # _update_builder_with_changes.
 | 
|
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
867  | 
                continue
 | 
| 
4595.11.13
by Martin Pool
 Remove get_kind_and_executable_by_path; go back to using plain path_content_summary  | 
868  | 
content_summary = self.work_tree.path_content_summary(path)  | 
869  | 
kind = content_summary[0]  | 
|
| 
2938.3.1
by Robert Collins
 * Commit with many automatically found deleted paths no longer performs  | 
870  | 
            # Note that when a filter of specific files is given, we must only
 | 
871  | 
            # skip/record deleted files matching that filter.
 | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
872  | 
if not specific_files or is_inside_any(specific_files, path):  | 
| 
4595.11.8
by Martin Pool
 Commit synthesizes a content_summary without using path_content_summary  | 
873  | 
if kind == 'missing':  | 
| 
2938.3.1
by Robert Collins
 * Commit with many automatically found deleted paths no longer performs  | 
874  | 
if not deleted_paths:  | 
875  | 
                        # path won't have been split yet.
 | 
|
876  | 
path_segments = splitpath(path)  | 
|
877  | 
deleted_dict = deleted_paths  | 
|
878  | 
for segment in path_segments:  | 
|
879  | 
deleted_dict = deleted_dict.setdefault(segment, {})  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
880  | 
self.reporter.missing(path)  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
881  | 
self._next_progress_entry()  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
882  | 
deleted_ids.append(file_id)  | 
883  | 
                    continue
 | 
|
| 
4595.11.14
by Martin Pool
 Small code cleanups  | 
884  | 
            # TODO: have the builder do the nested commit just-in-time IF and
 | 
885  | 
            # only if needed.
 | 
|
| 
4595.11.12
by Martin Pool
 Change commit back to using path_content_summary rather than synthesizing it  | 
886  | 
if kind == 'tree-reference':  | 
| 
2776.4.4
by Robert Collins
 Move content summary generation outside of record_entry_contents.  | 
887  | 
                # enforce repository nested tree policy.
 | 
888  | 
if (not self.work_tree.supports_tree_reference() or  | 
|
889  | 
                    # repository does not support it either.
 | 
|
| 
2776.4.6
by Robert Collins
 Fixup various commit test failures falling out from the other commit changes.  | 
890  | 
not self.branch.repository._format.supports_tree_reference):  | 
| 
4595.11.8
by Martin Pool
 Commit synthesizes a content_summary without using path_content_summary  | 
891  | 
kind = 'directory'  | 
| 
4595.11.14
by Martin Pool
 Small code cleanups  | 
892  | 
content_summary = (kind, None, None, None)  | 
| 
4595.11.8
by Martin Pool
 Commit synthesizes a content_summary without using path_content_summary  | 
893  | 
elif self.recursive == 'down':  | 
| 
2776.4.6
by Robert Collins
 Fixup various commit test failures falling out from the other commit changes.  | 
894  | 
nested_revision_id = self._commit_nested_tree(  | 
895  | 
file_id, path)  | 
|
| 
4595.11.8
by Martin Pool
 Commit synthesizes a content_summary without using path_content_summary  | 
896  | 
content_summary = (kind, None, None, nested_revision_id)  | 
| 
2776.4.6
by Robert Collins
 Fixup various commit test failures falling out from the other commit changes.  | 
897  | 
else:  | 
| 
4595.11.8
by Martin Pool
 Commit synthesizes a content_summary without using path_content_summary  | 
898  | 
nested_revision_id = self.work_tree.get_reference_revision(file_id)  | 
899  | 
content_summary = (kind, None, None, nested_revision_id)  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
900  | 
|
901  | 
            # Record an entry for this item
 | 
|
902  | 
            # Note: I don't particularly want to have the existing_ie
 | 
|
903  | 
            # parameter but the test suite currently (28-Jun-07) breaks
 | 
|
904  | 
            # without it thanks to a unicode normalisation issue. :-(
 | 
|
| 
2776.4.2
by Robert Collins
 nuke _read_tree_state and snapshot from inventory, moving responsibility into the commit builder.  | 
905  | 
definitely_changed = kind != existing_ie.kind  | 
| 
5856.1.4
by Jelmer Vernooij
 Revert unnecessary change.  | 
906  | 
self._record_entry(path, file_id, specific_files, kind, name,  | 
| 
2592.3.140
by Robert Collins
 Merge bzr.dev.  | 
907  | 
parent_id, definitely_changed, existing_ie, report_changes,  | 
908  | 
content_summary)  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
909  | 
|
910  | 
        # 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)  | 
911  | 
self.deleted_ids = deleted_ids  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
912  | 
|
| 
2564.2.3
by Ian Clatworthy
 more abentley feedback: use get_nested_tree and include file_id  | 
913  | 
def _commit_nested_tree(self, file_id, path):  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
914  | 
        "Commit a nested tree."
 | 
| 
2564.2.3
by Ian Clatworthy
 more abentley feedback: use get_nested_tree and include file_id  | 
915  | 
sub_tree = self.work_tree.get_nested_tree(file_id, path)  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
916  | 
        # FIXME: be more comprehensive here:
 | 
917  | 
        # this works when both trees are in --trees repository,
 | 
|
918  | 
        # but when both are bound to a different repository,
 | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
919  | 
        # it fails; a better way of approaching this is to
 | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
920  | 
        # finally implement the explicit-caches approach design
 | 
921  | 
        # a while back - RBC 20070306.
 | 
|
| 
2665.5.2
by Aaron Bentley
 Switch commit and merge to Repository.has_same_location  | 
922  | 
if sub_tree.branch.repository.has_same_location(  | 
923  | 
self.work_tree.branch.repository):  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
924  | 
sub_tree.branch.repository = \  | 
925  | 
self.work_tree.branch.repository  | 
|
926  | 
try:  | 
|
| 
2776.4.6
by Robert Collins
 Fixup various commit test failures falling out from the other commit changes.  | 
927  | 
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.  | 
928  | 
recursive=self.recursive,  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
929  | 
message_callback=self.message_callback,  | 
930  | 
timestamp=self.timestamp, timezone=self.timezone,  | 
|
931  | 
committer=self.committer,  | 
|
932  | 
allow_pointless=self.allow_pointless,  | 
|
933  | 
strict=self.strict, verbose=self.verbose,  | 
|
934  | 
local=self.local, reporter=self.reporter)  | 
|
935  | 
except errors.PointlessCommit:  | 
|
| 
2776.4.6
by Robert Collins
 Fixup various commit test failures falling out from the other commit changes.  | 
936  | 
return self.work_tree.get_reference_revision(file_id)  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
937  | 
|
| 
5856.1.4
by Jelmer Vernooij
 Revert unnecessary change.  | 
938  | 
def _record_entry(self, path, file_id, specific_files, kind, name,  | 
939  | 
parent_id, definitely_changed, existing_ie, report_changes,  | 
|
940  | 
content_summary):  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
941  | 
        "Record the new inventory entry for a path if any."
 | 
942  | 
        # mutter('check %s {%s}', path, file_id)
 | 
|
| 
2825.7.1
by Robert Collins
 * Partial commits are now approximately 40% faster by walking over the  | 
943  | 
        # mutter('%s selected for commit', path)
 | 
944  | 
if definitely_changed or existing_ie is None:  | 
|
| 
2921.4.4
by Robert Collins
 Minor import cleanup in commit.py.  | 
945  | 
ie = make_entry(kind, name, parent_id, file_id)  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
946  | 
else:  | 
| 
2825.7.1
by Robert Collins
 * Partial commits are now approximately 40% faster by walking over the  | 
947  | 
ie = existing_ie.copy()  | 
948  | 
ie.revision = None  | 
|
| 
3709.3.1
by Robert Collins
 First cut - make it work - at updating the tree stat cache during commit.  | 
949  | 
        # For carried over entries we don't care about the fs hash - the repo
 | 
950  | 
        # isn't generating a sha, so we're not saving computation time.
 | 
|
| 
3775.2.8
by Robert Collins
 Move --unchanged detection in commit into the CommitBuilder.  | 
951  | 
_, _, fs_hash = self.builder.record_entry_contents(  | 
| 
5856.1.4
by Jelmer Vernooij
 Revert unnecessary change.  | 
952  | 
ie, self.parent_invs, path, self.work_tree, content_summary)  | 
| 
2825.7.1
by Robert Collins
 * Partial commits are now approximately 40% faster by walking over the  | 
953  | 
if report_changes:  | 
954  | 
self._report_change(ie, path)  | 
|
| 
3709.3.1
by Robert Collins
 First cut - make it work - at updating the tree stat cache during commit.  | 
955  | 
if fs_hash:  | 
956  | 
self.work_tree._observed_sha1(ie.file_id, path, fs_hash)  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
957  | 
return ie  | 
958  | 
||
959  | 
def _report_change(self, ie, path):  | 
|
960  | 
"""Report a change to the user.  | 
|
961  | 
||
962  | 
        The change that has occurred is described relative to the basis
 | 
|
963  | 
        inventory.
 | 
|
964  | 
        """
 | 
|
965  | 
if (self.basis_inv.has_id(ie.file_id)):  | 
|
966  | 
basis_ie = self.basis_inv[ie.file_id]  | 
|
967  | 
else:  | 
|
968  | 
basis_ie = None  | 
|
969  | 
change = ie.describe_change(basis_ie, ie)  | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
970  | 
if change in (InventoryEntry.RENAMED,  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
971  | 
InventoryEntry.MODIFIED_AND_RENAMED):  | 
972  | 
old_path = self.basis_inv.id2path(ie.file_id)  | 
|
973  | 
self.reporter.renamed(change, old_path, path)  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
974  | 
self._next_progress_entry()  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
975  | 
else:  | 
| 
6138.3.2
by Jonathan Riddell
 gettext-ify bzrlib/commit.py  | 
976  | 
if change == gettext('unchanged'):  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
977  | 
                return
 | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
978  | 
self.reporter.snapshot_change(change, path)  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
979  | 
self._next_progress_entry()  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
980  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
981  | 
def _set_progress_stage(self, name, counter=False):  | 
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
982  | 
"""Set the progress stage and emit an update to the progress bar."""  | 
983  | 
self.pb_stage_name = name  | 
|
984  | 
self.pb_stage_count += 1  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
985  | 
if counter:  | 
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
986  | 
self.pb_entries_count = 0  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
987  | 
else:  | 
988  | 
self.pb_entries_count = None  | 
|
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
989  | 
self._emit_progress()  | 
990  | 
||
| 
2564.2.2
by Ian Clatworthy
 incorporate feedback from abentley  | 
991  | 
def _next_progress_entry(self):  | 
992  | 
"""Emit an update to the progress bar and increment the entry count."""  | 
|
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
993  | 
self.pb_entries_count += 1  | 
994  | 
self._emit_progress()  | 
|
995  | 
||
996  | 
def _emit_progress(self):  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
997  | 
if self.pb_entries_count is not None:  | 
| 
6138.4.1
by Jonathan Riddell
 add gettext to progress bar strings  | 
998  | 
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.  | 
999  | 
self.pb_entries_count)  | 
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
1000  | 
else:  | 
| 
6138.4.1
by Jonathan Riddell
 add gettext to progress bar strings  | 
1001  | 
text = gettext("%s - Stage") % (self.pb_stage_name, )  | 
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
1002  | 
self.pb.update(text, self.pb_stage_count, self.pb_stage_total)  | 
1003  | 
||
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
1004  | 
def _set_specific_file_ids(self):  | 
1005  | 
"""populate self.specific_file_ids if we will use it."""  | 
|
1006  | 
if not self.use_record_iter_changes:  | 
|
1007  | 
            # If provided, ensure the specified files are versioned
 | 
|
1008  | 
if self.specific_files is not None:  | 
|
1009  | 
                # Note: This routine is being called because it raises
 | 
|
1010  | 
                # PathNotVersionedError as a side effect of finding the IDs. We
 | 
|
1011  | 
                # later use the ids we found as input to the working tree
 | 
|
1012  | 
                # inventory iterator, so we only consider those ids rather than
 | 
|
1013  | 
                # examining the whole tree again.
 | 
|
1014  | 
                # XXX: Dont we have filter_unversioned to do this more
 | 
|
1015  | 
                # cheaply?
 | 
|
| 
5856.1.4
by Jelmer Vernooij
 Revert unnecessary change.  | 
1016  | 
self.specific_file_ids = tree.find_ids_across_trees(  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
1017  | 
self.specific_files, [self.basis_tree, self.work_tree])  | 
1018  | 
else:  | 
|
1019  | 
self.specific_file_ids = None  |