bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 
3735.5.1
by Martin Pool
 commit code should not rely on inventory._byid  | 
1  | 
# Copyright (C) 2005, 2006, 2007, 2008 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  | 
|
17  | 
||
| 
2921.4.6
by Robert Collins
 Typos found by Rob Weir.  | 
18  | 
# The newly committed revision is going to have a shape corresponding
 | 
| 
2921.4.4
by Robert Collins
 Minor import cleanup in commit.py.  | 
19  | 
# to that of the working tree.  Files that are not in the
 | 
| 
1248
by Martin Pool
 - new weave based cleanup [broken]  | 
20  | 
# working tree and that were in the predecessor are reported as
 | 
21  | 
# removed --- this can include files that were either removed from the
 | 
|
22  | 
# inventory or deleted in the working tree.  If they were only
 | 
|
23  | 
# deleted from disk, they are removed from the working inventory.
 | 
|
24  | 
||
25  | 
# We then consider the remaining entries, which will be in the new
 | 
|
26  | 
# version.  Directory entries are simply copied across.  File entries
 | 
|
27  | 
# 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.  | 
28  | 
# recorded.  For each parent revision tree, we check to see what
 | 
| 
1248
by Martin Pool
 - new weave based cleanup [broken]  | 
29  | 
# version of the file was present.  If the file was present in at
 | 
30  | 
# least one tree, and if it was the same version in all the trees,
 | 
|
31  | 
# then we can just refer to that version.  Otherwise, a new version
 | 
|
32  | 
# representing the merger of the file versions must be added.
 | 
|
33  | 
||
34  | 
# TODO: Update hashcache before and after - or does the WorkingTree
 | 
|
35  | 
# look after that?
 | 
|
| 
1245
by Martin Pool
 doc  | 
36  | 
|
| 
1339
by Martin Pool
 - doc  | 
37  | 
# TODO: Rather than mashing together the ancestry and storing it back,
 | 
38  | 
# perhaps the weave should have single method which does it all in one
 | 
|
39  | 
# go, avoiding a lot of redundant work.
 | 
|
| 
1335
by Martin Pool
 doc  | 
40  | 
|
| 
1341
by Martin Pool
 - doc  | 
41  | 
# TODO: Perhaps give a warning if one of the revisions marked as
 | 
42  | 
# merged is already in the ancestry, and then don't record it as a
 | 
|
43  | 
# distinct parent.
 | 
|
44  | 
||
| 
1343
by Martin Pool
 - fix up test for merge of trees  | 
45  | 
# TODO: If the file is newly merged but unchanged from the version it
 | 
46  | 
# merges from, then it should still be reported as newly added
 | 
|
47  | 
# relative to the basis revision.
 | 
|
48  | 
||
| 
1910.7.17
by Andrew Bennetts
 Various cosmetic changes.  | 
49  | 
# TODO: Change the parameter 'rev_id' to 'revision_id' to be consistent with
 | 
50  | 
# the rest of the code; add a deprecation of the old name.
 | 
|
| 
1194
by Martin Pool
 - [BROKEN] more progress of commit into weaves  | 
51  | 
|
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
52  | 
import os  | 
| 
1390
by Robert Collins
 pair programming worx... merge integration and weave  | 
53  | 
import re  | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
54  | 
import sys  | 
| 
1188
by Martin Pool
 - clean up imports in commit code  | 
55  | 
import time  | 
| 
1194
by Martin Pool
 - [BROKEN] more progress of commit into weaves  | 
56  | 
|
57  | 
from cStringIO import StringIO  | 
|
| 
1188
by Martin Pool
 - clean up imports in commit code  | 
58  | 
|
| 
1551.8.30
by Aaron Bentley
 Tweak from review comments  | 
59  | 
from bzrlib import (  | 
| 
2560.1.4
by Robert Collins
 Allow -Dhooks to get the hooks invoked during commit logged.  | 
60  | 
debug,  | 
| 
1551.8.30
by Aaron Bentley
 Tweak from review comments  | 
61  | 
errors,  | 
| 
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.  | 
62  | 
revision,  | 
| 
3830.3.3
by Martin Pool
 commit should log original exception when aborting write group  | 
63  | 
trace,  | 
| 
1551.8.30
by Aaron Bentley
 Tweak from review comments  | 
64  | 
tree,  | 
| 
4222.1.1
by Jelmer Vernooij
 Make function for escaping invalid XML characters public.  | 
65  | 
xml_serializer,  | 
| 
1551.8.30
by Aaron Bentley
 Tweak from review comments  | 
66  | 
    )
 | 
| 
2246.1.3
by Robert Collins
 New branch hooks: post_push, post_pull, post_commit, post_uncommit. These  | 
67  | 
from bzrlib.branch import Branch  | 
| 
1442.1.2
by Robert Collins
 create a config module - there is enough config logic to make this worthwhile, and start testing config processing.  | 
68  | 
import bzrlib.config  | 
| 
1264
by Martin Pool
 - Raise a better error from commit when a parent is absent  | 
69  | 
from bzrlib.errors import (BzrError, PointlessCommit,  | 
| 
1185.16.65
by mbp at sourcefrog
 - new commit --strict option  | 
70  | 
ConflictsInTree,  | 
| 
2564.2.2
by Ian Clatworthy
 incorporate feedback from abentley  | 
71  | 
                           StrictCommitFailed
 | 
| 
1264
by Martin Pool
 - Raise a better error from commit when a parent is absent  | 
72  | 
                           )
 | 
| 
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.  | 
73  | 
from bzrlib.osutils import (get_user_encoding,  | 
74  | 
kind_marker, isdir,isfile, is_inside_any,  | 
|
| 
1740.3.10
by Jelmer Vernooij
 Fix some minor issues pointed out by j-a-m.  | 
75  | 
is_inside_or_parent_of_any,  | 
| 
2825.7.1
by Robert Collins
 * Partial commits are now approximately 40% faster by walking over the  | 
76  | 
minimum_path_selection,  | 
| 
2938.3.1
by Robert Collins
 * Commit with many automatically found deleted paths no longer performs  | 
77  | 
quotefn, sha_file, split_lines,  | 
78  | 
splitpath,  | 
|
79  | 
                            )
 | 
|
| 
1442.1.62
by Robert Collins
 Allow creation of testaments from uncommitted data, and use that to get signatures before committing revisions.  | 
80  | 
from bzrlib.testament import Testament  | 
| 
2789.2.1
by Ian Clatworthy
 Make commit less verbose by default  | 
81  | 
from bzrlib.trace import mutter, note, warning, is_quiet  | 
| 
3735.5.2
by Martin Pool
 Restore optimization in commit _report_and_accumulate_deletes  | 
82  | 
from bzrlib.inventory import Inventory, InventoryEntry, make_entry  | 
| 
1910.2.9
by Aaron Bentley
 Inroduce assertDeprecated, and use it to test old commitbuilder API  | 
83  | 
from bzrlib import symbol_versioning  | 
| 
1773.4.1
by Martin Pool
 Add pyflakes makefile target; fix many warnings  | 
84  | 
from bzrlib.symbol_versioning import (deprecated_passed,  | 
| 
1773.4.3
by Martin Pool
 [merge] bzr.dev  | 
85  | 
deprecated_function,  | 
| 
1773.4.1
by Martin Pool
 Add pyflakes makefile target; fix many warnings  | 
86  | 
DEPRECATED_PARAMETER)  | 
| 
1508.1.6
by Robert Collins
 Move Branch.unknowns() to WorkingTree.  | 
87  | 
from bzrlib.workingtree import WorkingTree  | 
| 
2747.6.11
by Daniel Watkins
 Modified ReportCommitToLog.started to use urlutils.unescape_for_display for 'location'.  | 
88  | 
from bzrlib.urlutils import unescape_for_display  | 
| 
2094.3.5
by John Arbash Meinel
 Fix imports to ensure modules are loaded before they are used  | 
89  | 
import bzrlib.ui  | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
90  | 
|
91  | 
||
92  | 
class NullCommitReporter(object):  | 
|
93  | 
"""I report on progress of a commit."""  | 
|
| 
1185.12.8
by Aaron Bentley
 Fixed commit so all output comes though CommitReporter  | 
94  | 
|
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
95  | 
def started(self, revno, revid, location=None):  | 
| 
3052.4.2
by Matt Nordhoff
 Deprecate not passing a location to commit reporters' started() methods.  | 
96  | 
if location is None:  | 
| 
3052.4.6
by Matt Nordhoff
 Update the warning message to use 1.0 instead of 0.93.  | 
97  | 
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.  | 
98  | 
"to started.", DeprecationWarning,  | 
99  | 
stacklevel=2)  | 
|
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
100  | 
        pass
 | 
101  | 
||
102  | 
def snapshot_change(self, change, path):  | 
|
103  | 
        pass
 | 
|
104  | 
||
105  | 
def completed(self, revno, rev_id):  | 
|
106  | 
        pass
 | 
|
107  | 
||
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
108  | 
def deleted(self, path):  | 
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
109  | 
        pass
 | 
110  | 
||
111  | 
def missing(self, path):  | 
|
112  | 
        pass
 | 
|
113  | 
||
114  | 
def renamed(self, change, old_path, new_path):  | 
|
115  | 
        pass
 | 
|
116  | 
||
| 
2789.2.11
by Ian Clatworthy
 remove more reporting stuff  | 
117  | 
def is_verbose(self):  | 
118  | 
return False  | 
|
119  | 
||
120  | 
||
121  | 
class ReportCommitToLog(NullCommitReporter):  | 
|
122  | 
||
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
123  | 
def _note(self, format, *args):  | 
124  | 
"""Output a message.  | 
|
125  | 
||
| 
2522.2.3
by Ian Clatworthy
 Revert logging just to stderr in commit as broke unicode filenames (#120930)  | 
126  | 
        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  | 
127  | 
        """
 | 
| 
2522.2.3
by Ian Clatworthy
 Revert logging just to stderr in commit as broke unicode filenames (#120930)  | 
128  | 
note(format, *args)  | 
| 
1668.1.5
by Martin Pool
 [broken] fix up display of files changed by a commit  | 
129  | 
|
| 
2789.2.4
by Ian Clatworthy
 make change reporting smarter for initial commit  | 
130  | 
def snapshot_change(self, change, path):  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
131  | 
if path == '' and change in ('added', 'modified'):  | 
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
132  | 
            return
 | 
| 
2789.2.11
by Ian Clatworthy
 remove more reporting stuff  | 
133  | 
self._note("%s %s", change, path)  | 
| 
2789.2.4
by Ian Clatworthy
 make change reporting smarter for initial commit  | 
134  | 
|
| 
2747.6.5
by Daniel Watkins
 Added 'started' hook to CommitReporters and moved location functionality from completed hook into it.  | 
135  | 
def started(self, revno, rev_id, location=None):  | 
| 
2747.6.1
by Daniel Watkins
 Added message at the end of commit for bound branches.  | 
136  | 
if location is not None:  | 
| 
3052.4.1
by Matt Nordhoff
 bzr commit: don't print the revision number twice. (Bug #172612)  | 
137  | 
location = ' to: ' + unescape_for_display(location, 'utf-8')  | 
| 
2747.6.1
by Daniel Watkins
 Added message at the end of commit for bound branches.  | 
138  | 
else:  | 
| 
3052.4.2
by Matt Nordhoff
 Deprecate not passing a location to commit reporters' started() methods.  | 
139  | 
            # When started was added, location was only made optional by
 | 
140  | 
            # accident.  Matt Nordhoff 20071129
 | 
|
| 
3052.4.6
by Matt Nordhoff
 Update the warning message to use 1.0 instead of 0.93.  | 
141  | 
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.  | 
142  | 
"to started.", DeprecationWarning,  | 
143  | 
stacklevel=2)  | 
|
| 
2747.6.1
by Daniel Watkins
 Added message at the end of commit for bound branches.  | 
144  | 
location = ''  | 
| 
3052.4.1
by Matt Nordhoff
 bzr commit: don't print the revision number twice. (Bug #172612)  | 
145  | 
self._note('Committing%s', location)  | 
| 
2747.6.5
by Daniel Watkins
 Added 'started' hook to CommitReporters and moved location functionality from completed hook into it.  | 
146  | 
|
147  | 
def completed(self, revno, rev_id):  | 
|
| 
2789.2.11
by Ian Clatworthy
 remove more reporting stuff  | 
148  | 
self._note('Committed revision %d.', revno)  | 
| 
2789.2.4
by Ian Clatworthy
 make change reporting smarter for initial commit  | 
149  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
150  | 
def deleted(self, path):  | 
151  | 
self._note('deleted %s', path)  | 
|
| 
1185.12.8
by Aaron Bentley
 Fixed commit so all output comes though CommitReporter  | 
152  | 
|
153  | 
def missing(self, path):  | 
|
| 
2789.2.11
by Ian Clatworthy
 remove more reporting stuff  | 
154  | 
self._note('missing %s', path)  | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
155  | 
|
| 
1668.1.5
by Martin Pool
 [broken] fix up display of files changed by a commit  | 
156  | 
def renamed(self, change, old_path, new_path):  | 
| 
2789.2.11
by Ian Clatworthy
 remove more reporting stuff  | 
157  | 
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  | 
158  | 
|
| 
2789.2.1
by Ian Clatworthy
 Make commit less verbose by default  | 
159  | 
def is_verbose(self):  | 
160  | 
return True  | 
|
161  | 
||
| 
1508.1.6
by Robert Collins
 Move Branch.unknowns() to WorkingTree.  | 
162  | 
|
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
163  | 
class Commit(object):  | 
164  | 
"""Task of committing a new revision.  | 
|
165  | 
||
166  | 
    This is a MethodObject: it accumulates state as the commit is
 | 
|
167  | 
    prepared, and then it is discarded.  It doesn't represent
 | 
|
168  | 
    historical revisions, just the act of recording a new one.
 | 
|
169  | 
||
170  | 
            missing_ids
 | 
|
171  | 
            Modified to hold a list of files that have been deleted from
 | 
|
172  | 
            the working directory; these should be removed from the
 | 
|
173  | 
            working inventory.
 | 
|
| 
485
by Martin Pool
 - move commit code into its own module  | 
174  | 
    """
 | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
175  | 
def __init__(self,  | 
| 
1442.1.60
by Robert Collins
 gpg sign commits if the policy says we need to  | 
176  | 
reporter=None,  | 
177  | 
config=None):  | 
|
| 
2789.2.1
by Ian Clatworthy
 Make commit less verbose by default  | 
178  | 
"""Create a Commit object.  | 
179  | 
||
180  | 
        :param reporter: the default reporter to use or None to decide later
 | 
|
181  | 
        """
 | 
|
182  | 
self.reporter = reporter  | 
|
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
183  | 
self.config = config  | 
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
184  | 
|
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
185  | 
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)  | 
186  | 
message=None,  | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
187  | 
timestamp=None,  | 
188  | 
timezone=None,  | 
|
189  | 
committer=None,  | 
|
190  | 
specific_files=None,  | 
|
191  | 
rev_id=None,  | 
|
| 
1276
by Martin Pool
 - make Branch.commit accept (and ignore) verbose argument  | 
192  | 
allow_pointless=True,  | 
| 
1185.16.65
by mbp at sourcefrog
 - new commit --strict option  | 
193  | 
strict=False,  | 
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
194  | 
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.  | 
195  | 
revprops=None,  | 
| 
1587.1.8
by Robert Collins
 Local commits on unbound branches fail.  | 
196  | 
working_tree=None,  | 
| 
1607.1.5
by Robert Collins
 Make commit verbose mode work!.  | 
197  | 
local=False,  | 
198  | 
reporter=None,  | 
|
| 
2149.1.1
by Aaron Bentley
 Provide a message_callback parameter to tree.commit  | 
199  | 
config=None,  | 
| 
2255.2.218
by Robert Collins
 Make the nested tree commit smoke test be more rigourous.  | 
200  | 
message_callback=None,  | 
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
201  | 
recursive='down',  | 
| 
3565.6.9
by Marius Kruger
 Jump through hoops not to open multiple connections when committing to a bound branch.  | 
202  | 
exclude=None,  | 
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
203  | 
possible_master_transports=None):  | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
204  | 
"""Commit working copy as a new revision.  | 
205  | 
||
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
206  | 
        :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)  | 
207  | 
        :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  | 
208  | 
|
209  | 
        :param timestamp: if not None, seconds-since-epoch for a
 | 
|
210  | 
            postdated/predated commit.
 | 
|
211  | 
||
| 
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.  | 
212  | 
        :param specific_files: If not None, commit only those files. An empty
 | 
213  | 
            list means 'commit no files'.
 | 
|
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
214  | 
|
215  | 
        :param rev_id: If set, use this as the new revision id.
 | 
|
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
216  | 
            Useful for test or import commands that need to tightly
 | 
217  | 
            control what revisions are assigned.  If you duplicate
 | 
|
218  | 
            a revision id that exists elsewhere it is your own fault.
 | 
|
219  | 
            If null (default), a time/random revision id is generated.
 | 
|
| 
1253
by Martin Pool
 - test that pointless commits are trapped  | 
220  | 
|
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
221  | 
        :param allow_pointless: If true (default), commit even if nothing
 | 
| 
1253
by Martin Pool
 - test that pointless commits are trapped  | 
222  | 
            has changed and no merges are recorded.
 | 
| 
1185.16.35
by Martin Pool
 - stub for revision properties  | 
223  | 
|
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
224  | 
        :param strict: If true, don't allow a commit if the working tree
 | 
| 
1185.16.65
by mbp at sourcefrog
 - new commit --strict option  | 
225  | 
            contains unknown files.
 | 
226  | 
||
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
227  | 
        :param revprops: Properties for new revision
 | 
| 
1587.1.8
by Robert Collins
 Local commits on unbound branches fail.  | 
228  | 
        :param local: Perform a local only commit.
 | 
| 
2789.2.1
by Ian Clatworthy
 Make commit less verbose by default  | 
229  | 
        :param reporter: the reporter to use or None for the default
 | 
230  | 
        :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.  | 
231  | 
        :param recursive: If set to 'down', commit in any subtrees that have
 | 
232  | 
            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)  | 
233  | 
        :param exclude: None or a list of relative paths to exclude from the
 | 
234  | 
            commit. Pending changes to excluded files will be ignored by the
 | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
235  | 
            commit.
 | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
236  | 
        """
 | 
| 
1285
by Martin Pool
 - fix bug in committing files that are renamed but not modified  | 
237  | 
mutter('preparing to commit')  | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
238  | 
|
| 
2367.2.1
by Robert Collins
 Remove bzrlib 0.8 compatability where it was making the code unclear or messy. (Robert Collins)  | 
239  | 
if working_tree is None:  | 
240  | 
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.  | 
241  | 
else:  | 
242  | 
self.work_tree = working_tree  | 
|
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
243  | 
self.branch = self.work_tree.branch  | 
| 
2100.3.14
by Aaron Bentley
 Test workingtree4 format, prevent use with old repos  | 
244  | 
if getattr(self.work_tree, 'requires_rich_root', lambda: False)():  | 
245  | 
if not self.branch.repository.supports_rich_root():  | 
|
246  | 
raise errors.RootNotRich()  | 
|
| 
2149.1.1
by Aaron Bentley
 Provide a message_callback parameter to tree.commit  | 
247  | 
if message_callback is None:  | 
| 
2149.1.3
by Aaron Bentley
 Updates from review comments  | 
248  | 
if message is not None:  | 
249  | 
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.  | 
250  | 
message = message.decode(get_user_encoding())  | 
| 
2149.1.3
by Aaron Bentley
 Updates from review comments  | 
251  | 
message_callback = lambda x: message  | 
| 
2149.1.1
by Aaron Bentley
 Provide a message_callback parameter to tree.commit  | 
252  | 
else:  | 
| 
2149.1.3
by Aaron Bentley
 Updates from review comments  | 
253  | 
raise BzrError("The message or message_callback keyword"  | 
254  | 
" 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.  | 
255  | 
|
| 
1505.1.24
by John Arbash Meinel
 Updated commit to handle bound branches. Included test to handle commit after merge  | 
256  | 
self.bound_branch = None  | 
| 
2840.1.1
by Ian Clatworthy
 faster pointless commit detection (Robert Collins)  | 
257  | 
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)  | 
258  | 
if exclude is not None:  | 
259  | 
self.exclude = sorted(  | 
|
260  | 
minimum_path_selection(exclude))  | 
|
261  | 
else:  | 
|
262  | 
self.exclude = []  | 
|
| 
1587.1.9
by Robert Collins
 Local commits do no alter or access the master branch.  | 
263  | 
self.local = local  | 
| 
1505.1.24
by John Arbash Meinel
 Updated commit to handle bound branches. Included test to handle commit after merge  | 
264  | 
self.master_branch = None  | 
| 
1614.1.1
by Aaron Bentley
 Fixed master locking in commit  | 
265  | 
self.master_locked = False  | 
| 
2776.4.15
by Robert Collins
 Put checking for recursive commits back to the commit driver, not commit builder.  | 
266  | 
self.recursive = recursive  | 
| 
1740.3.10
by Jelmer Vernooij
 Fix some minor issues pointed out by j-a-m.  | 
267  | 
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.  | 
268  | 
        # self.specific_files is None to indicate no filter, or any iterable to
 | 
269  | 
        # 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)  | 
270  | 
if specific_files is not None:  | 
271  | 
self.specific_files = sorted(  | 
|
272  | 
minimum_path_selection(specific_files))  | 
|
273  | 
else:  | 
|
274  | 
self.specific_files = None  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
275  | 
|
| 
1194
by Martin Pool
 - [BROKEN] more progress of commit into weaves  | 
276  | 
self.allow_pointless = allow_pointless  | 
| 
2255.2.218
by Robert Collins
 Make the nested tree commit smoke test be more rigourous.  | 
277  | 
self.revprops = revprops  | 
278  | 
self.message_callback = message_callback  | 
|
279  | 
self.timestamp = timestamp  | 
|
280  | 
self.timezone = timezone  | 
|
281  | 
self.committer = committer  | 
|
282  | 
self.strict = strict  | 
|
283  | 
self.verbose = verbose  | 
|
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
284  | 
|
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
285  | 
self.work_tree.lock_write()  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
286  | 
self.parents = self.work_tree.get_parent_ids()  | 
287  | 
        # We can use record_iter_changes IFF iter_changes is compatible with
 | 
|
288  | 
        # the command line parameters, and the repository has fast delta
 | 
|
289  | 
        # generation. See bug 347649.
 | 
|
290  | 
self.use_record_iter_changes = (  | 
|
291  | 
not self.exclude and  | 
|
292  | 
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.  | 
293  | 
(self.branch.repository._format.fast_deltas or  | 
294  | 
len(self.parents) < 2))  | 
|
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
295  | 
self.pb = bzrlib.ui.ui_factory.nested_progress_bar()  | 
| 
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.  | 
296  | 
self.basis_revid = self.work_tree.last_revision()  | 
| 
2789.2.4
by Ian Clatworthy
 make change reporting smarter for initial commit  | 
297  | 
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  | 
298  | 
self.basis_tree.lock_read()  | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
299  | 
try:  | 
| 
1666.1.18
by Robert Collins
 Add a progress bar during commit operations.  | 
300  | 
            # Cannot commit with conflicts present.
 | 
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
301  | 
if len(self.work_tree.conflicts()) > 0:  | 
| 
1666.1.18
by Robert Collins
 Add a progress bar during commit operations.  | 
302  | 
raise ConflictsInTree  | 
303  | 
||
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
304  | 
            # Setup the bound branch variables as needed.
 | 
| 
3565.6.9
by Marius Kruger
 Jump through hoops not to open multiple connections when committing to a bound branch.  | 
305  | 
self._check_bound_branch(possible_master_transports)  | 
| 
1505.1.24
by John Arbash Meinel
 Updated commit to handle bound branches. Included test to handle commit after merge  | 
306  | 
|
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
307  | 
            # Check that the working tree is up to date
 | 
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
308  | 
old_revno, new_revno = self._check_out_of_date_tree()  | 
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
309  | 
|
| 
2789.2.5
by Ian Clatworthy
 Upgrade commit tests to reflect new reporting formats  | 
310  | 
            # Complete configuration setup
 | 
311  | 
if reporter is not None:  | 
|
312  | 
self.reporter = reporter  | 
|
313  | 
elif self.reporter is None:  | 
|
314  | 
self.reporter = self._select_reporter()  | 
|
| 
1587.1.6
by Robert Collins
 Update bound branch implementation to 0.8.  | 
315  | 
if self.config is None:  | 
| 
1770.2.9
by Aaron Bentley
 Add Branch.get_config, update BranchConfig() callers  | 
316  | 
self.config = self.branch.get_config()  | 
| 
1587.1.6
by Robert Collins
 Update bound branch implementation to 0.8.  | 
317  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
318  | 
self._set_specific_file_ids()  | 
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
319  | 
|
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
320  | 
            # Setup the progress bar. As the number of files that need to be
 | 
321  | 
            # committed in unknown, progress is reported as stages.
 | 
|
322  | 
            # We keep track of entries separately though and include that
 | 
|
323  | 
            # information in the progress bar during the relevant stages.
 | 
|
324  | 
self.pb_stage_name = ""  | 
|
325  | 
self.pb_stage_count = 0  | 
|
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
326  | 
self.pb_stage_total = 5  | 
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
327  | 
if self.bound_branch:  | 
328  | 
self.pb_stage_total += 1  | 
|
329  | 
self.pb.show_pct = False  | 
|
330  | 
self.pb.show_spinner = False  | 
|
331  | 
self.pb.show_eta = False  | 
|
332  | 
self.pb.show_count = True  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
333  | 
self.pb.show_bar = True  | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
334  | 
|
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
335  | 
self._gather_parents()  | 
| 
2541.1.1
by Ian Clatworthy
 Refactor commit.commit() to walk the working inventory once/less  | 
336  | 
            # After a merge, a selected file commit is not supported.
 | 
337  | 
            # See 'bzr help merge' for an explanation as to why.
 | 
|
| 
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.  | 
338  | 
if len(self.parents) > 1 and self.specific_files is not None:  | 
| 
1551.15.9
by Aaron Bentley
 Better error for selected-file commit of merges  | 
339  | 
raise errors.CannotCommitSelectedFileMerge(self.specific_files)  | 
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
340  | 
            # Excludes are a form of selected file commit.
 | 
341  | 
if len(self.parents) > 1 and self.exclude:  | 
|
342  | 
raise errors.CannotCommitSelectedFileMerge(self.exclude)  | 
|
| 
2747.6.6
by Daniel Watkins
 Added call to CommitReport.started hook.  | 
343  | 
|
| 
2541.1.1
by Ian Clatworthy
 Refactor commit.commit() to walk the working inventory once/less  | 
344  | 
            # Collect the changes
 | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
345  | 
self._set_progress_stage("Collecting changes", counter=True)  | 
| 
2255.2.218
by Robert Collins
 Make the nested tree commit smoke test be more rigourous.  | 
346  | 
self.builder = self.branch.get_commit_builder(self.parents,  | 
| 
1740.3.7
by Jelmer Vernooij
 Move committer, log, revprops, timestamp and timezone to CommitBuilder.  | 
347  | 
self.config, timestamp, timezone, committer, revprops, rev_id)  | 
| 
3879.2.3
by John Arbash Meinel
 Hide the .basis_delta variable, and require callers to use .get_basis_delta()  | 
348  | 
|
| 
2617.6.2
by Robert Collins
 Add abort_write_group and wire write_groups into fetch and commit.  | 
349  | 
try:  | 
| 
3879.2.3
by John Arbash Meinel
 Hide the .basis_delta variable, and require callers to use .get_basis_delta()  | 
350  | 
self.builder.will_record_deletes()  | 
| 
2747.6.6
by Daniel Watkins
 Added call to CommitReport.started hook.  | 
351  | 
                # find the location being committed to
 | 
352  | 
if self.bound_branch:  | 
|
353  | 
master_location = self.master_branch.base  | 
|
354  | 
else:  | 
|
355  | 
master_location = self.branch.base  | 
|
356  | 
||
357  | 
                # report the start of the commit
 | 
|
358  | 
self.reporter.started(new_revno, self.rev_id, master_location)  | 
|
359  | 
||
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
360  | 
self._update_builder_with_changes()  | 
| 
2617.6.2
by Robert Collins
 Add abort_write_group and wire write_groups into fetch and commit.  | 
361  | 
self._check_pointless()  | 
362  | 
||
363  | 
                # TODO: Now the new inventory is known, check for conflicts.
 | 
|
364  | 
                # ADHB 2006-08-08: If this is done, populate_new_inv should not add
 | 
|
365  | 
                # weave lines, because nothing should be recorded until it is known
 | 
|
366  | 
                # that commit will succeed.
 | 
|
| 
2592.3.49
by Robert Collins
 Merge bzr.dev.  | 
367  | 
self._set_progress_stage("Saving data locally")  | 
| 
2617.6.2
by Robert Collins
 Add abort_write_group and wire write_groups into fetch and commit.  | 
368  | 
self.builder.finish_inventory()  | 
369  | 
||
370  | 
                # Prompt the user for a commit message if none provided
 | 
|
371  | 
message = message_callback(self)  | 
|
372  | 
self.message = message  | 
|
373  | 
||
374  | 
                # Add revision data to the local branch
 | 
|
375  | 
self.rev_id = self.builder.commit(self.message)  | 
|
| 
2659.3.5
by NamNguyen
 merge with bzr.dev  | 
376  | 
|
| 
3830.3.3
by Martin Pool
 commit should log original exception when aborting write group  | 
377  | 
except Exception, e:  | 
378  | 
mutter("aborting commit write group because of exception:")  | 
|
379  | 
trace.log_exception_quietly()  | 
|
380  | 
note("aborting commit write group: %r" % (e,))  | 
|
| 
2749.3.1
by Jelmer Vernooij
 Add CommitBuilder.abort().  | 
381  | 
self.builder.abort()  | 
| 
2617.6.2
by Robert Collins
 Add abort_write_group and wire write_groups into fetch and commit.  | 
382  | 
                raise
 | 
383  | 
||
| 
2659.3.6
by NamNguyen
 branch_implementations/test_commit.py:  | 
384  | 
self._process_pre_hooks(old_revno, new_revno)  | 
385  | 
||
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
386  | 
            # Upload revision data to the master.
 | 
| 
1759.2.1
by Jelmer Vernooij
 Fix some types (found using aspell).  | 
387  | 
            # this will propagate merged revisions too if needed.
 | 
| 
1587.1.7
by Robert Collins
 Commit revision data locally first for bound branch commits.  | 
388  | 
if self.bound_branch:  | 
| 
4048.2.1
by Jelmer Vernooij
 Use Branch.pull() to update master branch.  | 
389  | 
self._set_progress_stage("Uploading data to master branch")  | 
| 
4048.2.2
by Jelmer Vernooij
 New Branch.import_last_Revision_info() function used to pull revisions into the master branch during commit.  | 
390  | 
                # 'commit' to the master first so a timeout here causes the
 | 
391  | 
                # local branch to be out of date
 | 
|
392  | 
self.master_branch.import_last_revision_info(  | 
|
393  | 
self.branch.repository, new_revno, self.rev_id)  | 
|
| 
1587.1.7
by Robert Collins
 Commit revision data locally first for bound branch commits.  | 
394  | 
|
395  | 
            # and now do the commit locally.
 | 
|
| 
2230.3.51
by Aaron Bentley
 Store revno for Branch6, set_last_revision -> set_last_revision_info  | 
396  | 
self.branch.set_last_revision_info(new_revno, self.rev_id)  | 
| 
1587.1.6
by Robert Collins
 Update bound branch implementation to 0.8.  | 
397  | 
|
| 
4536.3.1
by Robert Collins
 Defer doing unversioning of file ids during commit to after completing branch operations. (Robert Collins, bug 282402)  | 
398  | 
            # Make the working tree be up to date with the branch. This
 | 
399  | 
            # includes automatic changes scheduled to be made to the tree, such
 | 
|
400  | 
            # as updating its basis and unversioning paths that were missing.
 | 
|
401  | 
self.work_tree.unversion(self.deleted_ids)  | 
|
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
402  | 
self._set_progress_stage("Updating the working tree")  | 
403  | 
self.work_tree.update_basis_by_delta(self.rev_id,  | 
|
404  | 
self.builder.get_basis_delta())  | 
|
| 
2747.6.5
by Daniel Watkins
 Added 'started' hook to CommitReporters and moved location functionality from completed hook into it.  | 
405  | 
self.reporter.completed(new_revno, self.rev_id)  | 
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
406  | 
self._process_post_hooks(old_revno, new_revno)  | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
407  | 
finally:  | 
| 
1666.1.18
by Robert Collins
 Add a progress bar during commit operations.  | 
408  | 
self._cleanup()  | 
| 
1773.1.1
by Robert Collins
 Teach WorkingTree.commit to return the committed revision id.  | 
409  | 
return self.rev_id  | 
| 
1189
by Martin Pool
 - BROKEN: partial support for commit into weave  | 
410  | 
|
| 
2789.2.4
by Ian Clatworthy
 make change reporting smarter for initial commit  | 
411  | 
def _select_reporter(self):  | 
412  | 
"""Select the CommitReporter to use."""  | 
|
413  | 
if is_quiet():  | 
|
414  | 
return NullCommitReporter()  | 
|
| 
2789.2.10
by Ian Clatworthy
 focus on performance gains, not better reporting  | 
415  | 
return ReportCommitToLog()  | 
| 
2789.2.4
by Ian Clatworthy
 make change reporting smarter for initial commit  | 
416  | 
|
| 
1910.2.37
by Aaron Bentley
 Handle empty commits, fix test  | 
417  | 
def _check_pointless(self):  | 
418  | 
if self.allow_pointless:  | 
|
419  | 
            return
 | 
|
420  | 
        # A merge with no effect on files
 | 
|
421  | 
if len(self.parents) > 1:  | 
|
422  | 
            return
 | 
|
| 
3775.2.3
by Robert Collins
 Delegate basis inventory calculation during commit to the CommitBuilder object.  | 
423  | 
        # TODO: we could simplify this by using self.builder.basis_delta.
 | 
| 
2903.2.8
by Martin Pool
 More efficient reporting of deletions from a large tree during commit  | 
424  | 
|
| 
2921.4.6
by Robert Collins
 Typos found by Rob Weir.  | 
425  | 
        # The initial commit adds a root directory, but this in itself is not
 | 
| 
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.  | 
426  | 
        # a worthwhile commit.
 | 
427  | 
if (self.basis_revid == revision.NULL_REVISION and  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
428  | 
((self.builder.new_inventory is not None and  | 
429  | 
len(self.builder.new_inventory) == 1) or  | 
|
430  | 
len(self.builder._basis_delta) == 1)):  | 
|
| 
1731.1.49
by Aaron Bentley
 Merge bzr.dev  | 
431  | 
raise PointlessCommit()  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
432  | 
if self.builder.any_changes():  | 
| 
1910.2.37
by Aaron Bentley
 Handle empty commits, fix test  | 
433  | 
            return
 | 
434  | 
raise PointlessCommit()  | 
|
435  | 
||
| 
3565.6.9
by Marius Kruger
 Jump through hoops not to open multiple connections when committing to a bound branch.  | 
436  | 
def _check_bound_branch(self, possible_master_transports=None):  | 
| 
1505.1.24
by John Arbash Meinel
 Updated commit to handle bound branches. Included test to handle commit after merge  | 
437  | 
"""Check to see if the local branch is bound.  | 
438  | 
||
439  | 
        If it is bound, then most of the commit will actually be
 | 
|
440  | 
        done using the remote branch as the target branch.
 | 
|
441  | 
        Only at the end will the local branch be updated.
 | 
|
442  | 
        """
 | 
|
| 
1587.1.9
by Robert Collins
 Local commits do no alter or access the master branch.  | 
443  | 
if self.local and not self.branch.get_bound_location():  | 
444  | 
raise errors.LocalRequiresBoundBranch()  | 
|
445  | 
||
446  | 
if not self.local:  | 
|
| 
3565.6.9
by Marius Kruger
 Jump through hoops not to open multiple connections when committing to a bound branch.  | 
447  | 
self.master_branch = self.branch.get_master_branch(  | 
448  | 
possible_master_transports)  | 
|
| 
1587.1.9
by Robert Collins
 Local commits do no alter or access the master branch.  | 
449  | 
|
| 
1505.1.24
by John Arbash Meinel
 Updated commit to handle bound branches. Included test to handle commit after merge  | 
450  | 
if not self.master_branch:  | 
| 
1587.1.8
by Robert Collins
 Local commits on unbound branches fail.  | 
451  | 
            # make this branch the reference branch for out of date checks.
 | 
452  | 
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  | 
453  | 
            return
 | 
454  | 
||
455  | 
        # If the master branch is bound, we must fail
 | 
|
456  | 
master_bound_location = self.master_branch.get_bound_location()  | 
|
457  | 
if master_bound_location:  | 
|
| 
1505.1.27
by John Arbash Meinel
 Adding tests against an sftp branch.  | 
458  | 
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  | 
459  | 
self.master_branch, master_bound_location)  | 
460  | 
||
461  | 
        # TODO: jam 20051230 We could automatically push local
 | 
|
462  | 
        #       commits to the remote branch if they would fit.
 | 
|
463  | 
        #       But for now, just require remote to be identical
 | 
|
464  | 
        #       to local.
 | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
465  | 
|
| 
1505.1.24
by John Arbash Meinel
 Updated commit to handle bound branches. Included test to handle commit after merge  | 
466  | 
        # 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.  | 
467  | 
master_info = self.master_branch.last_revision_info()  | 
468  | 
local_info = self.branch.last_revision_info()  | 
|
469  | 
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  | 
470  | 
raise errors.BoundBranchOutOfDate(self.branch,  | 
471  | 
self.master_branch)  | 
|
472  | 
||
473  | 
        # Now things are ready to change the master branch
 | 
|
474  | 
        # so grab the lock
 | 
|
475  | 
self.bound_branch = self.branch  | 
|
476  | 
self.master_branch.lock_write()  | 
|
| 
1614.1.1
by Aaron Bentley
 Fixed master locking in commit  | 
477  | 
self.master_locked = True  | 
| 
1505.1.24
by John Arbash Meinel
 Updated commit to handle bound branches. Included test to handle commit after merge  | 
478  | 
|
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
479  | 
def _check_out_of_date_tree(self):  | 
480  | 
"""Check that the working tree is up to date.  | 
|
481  | 
||
482  | 
        :return: old_revision_number,new_revision_number tuple
 | 
|
483  | 
        """
 | 
|
484  | 
try:  | 
|
485  | 
first_tree_parent = self.work_tree.get_parent_ids()[0]  | 
|
486  | 
except IndexError:  | 
|
487  | 
            # if there are no parents, treat our parent as 'None'
 | 
|
488  | 
            # this is so that we still consider the master branch
 | 
|
489  | 
            # - in a checkout scenario the tree may have no
 | 
|
490  | 
            # parents but the branch may do.
 | 
|
491  | 
first_tree_parent = bzrlib.revision.NULL_REVISION  | 
|
492  | 
old_revno, master_last = self.master_branch.last_revision_info()  | 
|
493  | 
if master_last != first_tree_parent:  | 
|
494  | 
if master_last != bzrlib.revision.NULL_REVISION:  | 
|
495  | 
raise errors.OutOfDateTree(self.work_tree)  | 
|
496  | 
if self.branch.repository.has_revision(first_tree_parent):  | 
|
497  | 
new_revno = old_revno + 1  | 
|
498  | 
else:  | 
|
499  | 
            # ghost parents never appear in revision history.
 | 
|
500  | 
new_revno = 1  | 
|
501  | 
return old_revno,new_revno  | 
|
502  | 
||
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
503  | 
def _process_pre_hooks(self, old_revno, new_revno):  | 
504  | 
"""Process any registered pre commit hooks."""  | 
|
| 
2659.3.9
by NamNguyen
 branch.py:  | 
505  | 
self._set_progress_stage("Running pre_commit hooks")  | 
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
506  | 
self._process_hooks("pre_commit", old_revno, new_revno)  | 
507  | 
||
508  | 
def _process_post_hooks(self, old_revno, new_revno):  | 
|
509  | 
"""Process any registered post commit hooks."""  | 
|
| 
2553.1.2
by Robert Collins
 Show hook names during commit.  | 
510  | 
        # Process the post commit hooks, if any
 | 
| 
2659.3.9
by NamNguyen
 branch.py:  | 
511  | 
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  | 
512  | 
        # old style commit hooks - should be deprecated ? (obsoleted in
 | 
513  | 
        # 0.15)
 | 
|
514  | 
if self.config.post_commit() is not None:  | 
|
515  | 
hooks = self.config.post_commit().split(' ')  | 
|
516  | 
            # this would be nicer with twisted.python.reflect.namedAny
 | 
|
517  | 
for hook in hooks:  | 
|
518  | 
result = eval(hook + '(branch, rev_id)',  | 
|
519  | 
{'branch':self.branch,  | 
|
520  | 
'bzrlib':bzrlib,  | 
|
521  | 
'rev_id':self.rev_id})  | 
|
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
522  | 
        # process new style post commit hooks
 | 
523  | 
self._process_hooks("post_commit", old_revno, new_revno)  | 
|
524  | 
||
525  | 
def _process_hooks(self, hook_name, old_revno, new_revno):  | 
|
| 
2659.3.3
by NamNguyen
 Changed ``pre_commit`` hook signature.  | 
526  | 
if not Branch.hooks[hook_name]:  | 
527  | 
            return
 | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
528  | 
|
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
529  | 
        # new style commit hooks:
 | 
530  | 
if not self.bound_branch:  | 
|
531  | 
hook_master = self.branch  | 
|
532  | 
hook_local = None  | 
|
533  | 
else:  | 
|
534  | 
hook_master = self.master_branch  | 
|
535  | 
hook_local = self.branch  | 
|
536  | 
        # With bound branches, when the master is behind the local branch,
 | 
|
537  | 
        # the 'old_revno' and old_revid values here are incorrect.
 | 
|
538  | 
        # XXX: FIXME ^. RBC 20060206
 | 
|
539  | 
if self.parents:  | 
|
540  | 
old_revid = self.parents[0]  | 
|
541  | 
else:  | 
|
542  | 
old_revid = bzrlib.revision.NULL_REVISION  | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
543  | 
|
| 
2659.3.9
by NamNguyen
 branch.py:  | 
544  | 
if hook_name == "pre_commit":  | 
545  | 
future_tree = self.builder.revision_tree()  | 
|
546  | 
tree_delta = future_tree.changes_from(self.basis_tree,  | 
|
547  | 
include_root=True)  | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
548  | 
|
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
549  | 
for hook in Branch.hooks[hook_name]:  | 
| 
2553.1.3
by Robert Collins
 Increase docs in response to review feedback.  | 
550  | 
            # show the running hook in the progress bar. As hooks may
 | 
551  | 
            # end up doing nothing (e.g. because they are not configured by
 | 
|
552  | 
            # the user) this is still showing progress, not showing overall
 | 
|
553  | 
            # actions - its up to each plugin to show a UI if it want's to
 | 
|
554  | 
            # (such as 'Emailing diff to foo@example.com').
 | 
|
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
555  | 
self.pb_stage_name = "Running %s hooks [%s]" % \  | 
| 
2659.3.9
by NamNguyen
 branch.py:  | 
556  | 
(hook_name, Branch.hooks.get_hook_name(hook))  | 
| 
2553.1.2
by Robert Collins
 Show hook names during commit.  | 
557  | 
self._emit_progress()  | 
| 
2560.1.4
by Robert Collins
 Allow -Dhooks to get the hooks invoked during commit logged.  | 
558  | 
if 'hooks' in debug.debug_flags:  | 
559  | 
mutter("Invoking commit hook: %r", hook)  | 
|
| 
2659.3.1
by NamNguyen
 ``Branch.hooks`` now supports ``pre_commit`` hook.  | 
560  | 
if hook_name == "post_commit":  | 
561  | 
hook(hook_local, hook_master, old_revno, old_revid, new_revno,  | 
|
562  | 
self.rev_id)  | 
|
563  | 
elif hook_name == "pre_commit":  | 
|
564  | 
hook(hook_local, hook_master,  | 
|
565  | 
old_revno, old_revid, new_revno, self.rev_id,  | 
|
| 
2659.3.9
by NamNguyen
 branch.py:  | 
566  | 
tree_delta, future_tree)  | 
| 
2511.1.1
by Ian Clatworthy
 commit.py clean-up including logging just to stderr, not bzr.log  | 
567  | 
|
| 
1666.1.18
by Robert Collins
 Add a progress bar during commit operations.  | 
568  | 
def _cleanup(self):  | 
569  | 
"""Cleanup any open locks, progress bars etc."""  | 
|
570  | 
cleanups = [self._cleanup_bound_branch,  | 
|
| 
2255.2.25
by John Arbash Meinel
 DirstateRevisionTrees need to be read_locked before they will work as BasisTree  | 
571  | 
self.basis_tree.unlock,  | 
| 
1666.1.18
by Robert Collins
 Add a progress bar during commit operations.  | 
572  | 
self.work_tree.unlock,  | 
573  | 
self.pb.finished]  | 
|
574  | 
found_exception = None  | 
|
575  | 
for cleanup in cleanups:  | 
|
576  | 
try:  | 
|
577  | 
cleanup()  | 
|
578  | 
            # we want every cleanup to run no matter what.
 | 
|
579  | 
            # so we have a catchall here, but we will raise the
 | 
|
580  | 
            # last encountered exception up the stack: and
 | 
|
581  | 
            # typically this will be useful enough.
 | 
|
582  | 
except Exception, e:  | 
|
583  | 
found_exception = e  | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
584  | 
if found_exception is not None:  | 
| 
1759.2.2
by Jelmer Vernooij
 Revert some of my spelling fixes and fix some typos after review by Aaron.  | 
585  | 
            # don't do a plan raise, because the last exception may have been
 | 
| 
1666.1.18
by Robert Collins
 Add a progress bar during commit operations.  | 
586  | 
            # trashed, e is our sure-to-work exception even though it loses the
 | 
587  | 
            # full traceback. XXX: RBC 20060421 perhaps we could check the
 | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
588  | 
            # exc_info and if its the same one do a plain raise otherwise
 | 
| 
1666.1.18
by Robert Collins
 Add a progress bar during commit operations.  | 
589  | 
            # 'raise e' as we do now.
 | 
590  | 
raise e  | 
|
591  | 
||
| 
1505.1.24
by John Arbash Meinel
 Updated commit to handle bound branches. Included test to handle commit after merge  | 
592  | 
def _cleanup_bound_branch(self):  | 
593  | 
"""Executed at the end of a try/finally to cleanup a bound branch.  | 
|
594  | 
||
595  | 
        If the branch wasn't bound, this is a no-op.
 | 
|
596  | 
        If it was, it resents self.branch to the local branch, instead
 | 
|
597  | 
        of being the master.
 | 
|
598  | 
        """
 | 
|
599  | 
if not self.bound_branch:  | 
|
600  | 
            return
 | 
|
| 
1614.1.1
by Aaron Bentley
 Fixed master locking in commit  | 
601  | 
if self.master_locked:  | 
602  | 
self.master_branch.unlock()  | 
|
| 
1505.1.24
by John Arbash Meinel
 Updated commit to handle bound branches. Included test to handle commit after merge  | 
603  | 
|
| 
1223
by Martin Pool
 - store inventories in weave  | 
604  | 
def _gather_parents(self):  | 
| 
1092.2.25
by Robert Collins
 support ghosts in commits  | 
605  | 
"""Record the parents of a merge for merge detection."""  | 
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
606  | 
        # TODO: Make sure that this list doesn't contain duplicate
 | 
| 
1740.3.6
by Jelmer Vernooij
 Move inventory writing to the commit builder.  | 
607  | 
        # 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.  | 
608  | 
if self.use_record_iter_changes:  | 
609  | 
            return
 | 
|
610  | 
self.basis_inv = self.basis_tree.inventory  | 
|
| 
2283.2.1
by John Arbash Meinel
 Avoid deserializing an inventory we have already parsed.  | 
611  | 
self.parent_invs = [self.basis_inv]  | 
612  | 
for revision in self.parents[1:]:  | 
|
| 
1185.67.2
by Aaron Bentley
 Renamed Branch.storage to Branch.repository  | 
613  | 
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.  | 
614  | 
mutter('commit parent revision {%s}', revision)  | 
| 
1185.67.2
by Aaron Bentley
 Renamed Branch.storage to Branch.repository  | 
615  | 
inventory = self.branch.repository.get_inventory(revision)  | 
| 
1185.65.1
by Aaron Bentley
 Refactored out ControlFiles and RevisionStore from _Branch  | 
616  | 
self.parent_invs.append(inventory)  | 
| 
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.  | 
617  | 
else:  | 
618  | 
mutter('commit parent ghost revision {%s}', revision)  | 
|
| 
1284
by Martin Pool
 - in commit, avoid reading basis inventory twice  | 
619  | 
|
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
620  | 
def _update_builder_with_changes(self):  | 
| 
2541.1.1
by Ian Clatworthy
 Refactor commit.commit() to walk the working inventory once/less  | 
621  | 
"""Update the commit builder with the data about what has changed.  | 
622  | 
        """
 | 
|
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
623  | 
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.  | 
624  | 
specific_files = self.specific_files  | 
| 
2541.1.1
by Ian Clatworthy
 Refactor commit.commit() to walk the working inventory once/less  | 
625  | 
mutter("Selecting files for commit with filter %s", specific_files)  | 
626  | 
||
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
627  | 
self._check_strict()  | 
628  | 
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.  | 
629  | 
iter_changes = self.work_tree.iter_changes(self.basis_tree,  | 
630  | 
specific_files=specific_files)  | 
|
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
631  | 
iter_changes = self._filter_iter_changes(iter_changes)  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
632  | 
for file_id, path, fs_hash in self.builder.record_iter_changes(  | 
633  | 
self.work_tree, self.basis_revid, iter_changes):  | 
|
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
634  | 
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.  | 
635  | 
else:  | 
636  | 
            # Build the new inventory
 | 
|
637  | 
self._populate_from_inventory()  | 
|
638  | 
self._record_unselected()  | 
|
639  | 
self._report_and_accumulate_deletes()  | 
|
640  | 
||
| 
4354.4.4
by Aaron Bentley
 Simplify by using CommitBuilder directly  | 
641  | 
def _filter_iter_changes(self, iter_changes):  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
642  | 
"""Process iter_changes.  | 
643  | 
||
644  | 
        This method reports on the changes in iter_changes to the user, and 
 | 
|
645  | 
        converts 'missing' entries in the iter_changes iterator to 'deleted'
 | 
|
646  | 
        entries. 'missing' entries have their
 | 
|
647  | 
||
648  | 
        :param iter_changes: An iter_changes to process.
 | 
|
649  | 
        :return: A generator of changes.
 | 
|
650  | 
        """
 | 
|
651  | 
reporter = self.reporter  | 
|
652  | 
report_changes = reporter.is_verbose()  | 
|
653  | 
deleted_ids = []  | 
|
654  | 
for change in iter_changes:  | 
|
655  | 
if report_changes:  | 
|
656  | 
old_path = change[1][0]  | 
|
657  | 
new_path = change[1][1]  | 
|
658  | 
versioned = change[3][1]  | 
|
659  | 
kind = change[6][1]  | 
|
660  | 
versioned = change[3][1]  | 
|
661  | 
if kind is None and versioned:  | 
|
662  | 
                # 'missing' path
 | 
|
663  | 
if report_changes:  | 
|
664  | 
reporter.missing(new_path)  | 
|
665  | 
deleted_ids.append(change[0])  | 
|
666  | 
                # Reset the new path (None) and new versioned flag (False)
 | 
|
667  | 
change = (change[0], (change[1][0], None), change[2],  | 
|
668  | 
(change[3][0], False)) + change[4:]  | 
|
669  | 
elif kind == 'tree-reference':  | 
|
670  | 
if self.recursive == 'down':  | 
|
671  | 
self._commit_nested_tree(change[0], change[1][1])  | 
|
672  | 
if change[3][0] or change[3][1]:  | 
|
673  | 
yield change  | 
|
674  | 
if report_changes:  | 
|
675  | 
if new_path is None:  | 
|
676  | 
reporter.deleted(old_path)  | 
|
677  | 
elif old_path is None:  | 
|
678  | 
reporter.snapshot_change('added', new_path)  | 
|
679  | 
elif old_path != new_path:  | 
|
680  | 
reporter.renamed('renamed', old_path, new_path)  | 
|
681  | 
else:  | 
|
682  | 
if (new_path or  | 
|
683  | 
self.work_tree.branch.repository._format.rich_root_data):  | 
|
684  | 
                            # Don't report on changes to '' in non rich root
 | 
|
685  | 
                            # repositories.
 | 
|
686  | 
reporter.snapshot_change('modified', new_path)  | 
|
687  | 
self._next_progress_entry()  | 
|
688  | 
        # 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)  | 
689  | 
self.deleted_ids = deleted_ids  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
690  | 
|
691  | 
def _record_unselected(self):  | 
|
| 
2564.2.7
by Ian Clatworthy
 Clean-up comments and make use of self.builder.record_root_entry more explicit  | 
692  | 
        # If specific files are selected, then all un-selected files must be
 | 
693  | 
        # recorded in their previous state. For more details, see
 | 
|
694  | 
        # 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.  | 
695  | 
if self.specific_files or self.exclude:  | 
696  | 
specific_files = self.specific_files or []  | 
|
| 
2825.7.1
by Robert Collins
 * Partial commits are now approximately 40% faster by walking over the  | 
697  | 
for path, old_ie in self.basis_inv.iter_entries():  | 
698  | 
if old_ie.file_id in self.builder.new_inventory:  | 
|
| 
2776.4.6
by Robert Collins
 Fixup various commit test failures falling out from the other commit changes.  | 
699  | 
                    # already added - skip.
 | 
| 
2541.1.1
by Ian Clatworthy
 Refactor commit.commit() to walk the working inventory once/less  | 
700  | 
                    continue
 | 
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
701  | 
if (is_inside_any(specific_files, path)  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
702  | 
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)  | 
703  | 
                    # was inside the selected path, and not excluded - if not
 | 
704  | 
                    # present it has been deleted so skip.
 | 
|
| 
2541.1.1
by Ian Clatworthy
 Refactor commit.commit() to walk the working inventory once/less  | 
705  | 
                    continue
 | 
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
706  | 
                # From here down it was either not selected, or was excluded:
 | 
707  | 
                # We preserve the entry unaltered.
 | 
|
| 
2825.7.1
by Robert Collins
 * Partial commits are now approximately 40% faster by walking over the  | 
708  | 
ie = old_ie.copy()  | 
| 
2843.1.1
by Ian Clatworthy
 Faster partial commits by walking less data (Robert Collins)  | 
709  | 
                # Note: specific file commits after a merge are currently
 | 
710  | 
                # prohibited. This test is for sanity/safety in case it's
 | 
|
711  | 
                # required after that changes.
 | 
|
712  | 
if len(self.parents) > 1:  | 
|
713  | 
ie.revision = None  | 
|
| 
3775.2.8
by Robert Collins
 Move --unchanged detection in commit into the CommitBuilder.  | 
714  | 
self.builder.record_entry_contents(ie, self.parent_invs, path,  | 
715  | 
self.basis_tree, None)  | 
|
| 
2541.1.1
by Ian Clatworthy
 Refactor commit.commit() to walk the working inventory once/less  | 
716  | 
|
| 
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  | 
717  | 
def _report_and_accumulate_deletes(self):  | 
| 
3735.5.2
by Martin Pool
 Restore optimization in commit _report_and_accumulate_deletes  | 
718  | 
if (isinstance(self.basis_inv, Inventory)  | 
719  | 
and isinstance(self.builder.new_inventory, Inventory)):  | 
|
| 
3825.1.1
by Martin Pool
 commit should not assume Inventories have a _byid dictionary  | 
720  | 
            # the older Inventory classes provide a _byid dict, and building a
 | 
721  | 
            # set from the keys of this dict is substantially faster than even
 | 
|
722  | 
            # getting a set of ids from the inventory
 | 
|
723  | 
            #
 | 
|
724  | 
            # <lifeless> set(dict) is roughly the same speed as
 | 
|
725  | 
            # set(iter(dict)) and both are significantly slower than
 | 
|
726  | 
            # set(dict.keys())
 | 
|
| 
3735.5.2
by Martin Pool
 Restore optimization in commit _report_and_accumulate_deletes  | 
727  | 
deleted_ids = set(self.basis_inv._byid.keys()) - \  | 
728  | 
set(self.builder.new_inventory._byid.keys())  | 
|
729  | 
else:  | 
|
730  | 
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  | 
731  | 
if deleted_ids:  | 
| 
2840.1.1
by Ian Clatworthy
 faster pointless commit detection (Robert Collins)  | 
732  | 
self.any_entries_deleted = True  | 
| 
2921.4.3
by Robert Collins
 Remove more basis inventory usage.  | 
733  | 
deleted = [(self.basis_tree.id2path(file_id), file_id)  | 
| 
2903.2.8
by Martin Pool
 More efficient reporting of deletions from a large tree during commit  | 
734  | 
for file_id in deleted_ids]  | 
735  | 
deleted.sort()  | 
|
736  | 
            # XXX: this is not quite directory-order sorting
 | 
|
737  | 
for path, file_id in deleted:  | 
|
| 
3775.2.3
by Robert Collins
 Delegate basis inventory calculation during commit to the CommitBuilder object.  | 
738  | 
self.builder.record_delete(path, file_id)  | 
| 
2903.2.8
by Martin Pool
 More efficient reporting of deletions from a large tree during commit  | 
739  | 
self.reporter.deleted(path)  | 
| 
1551.7.24
by Aaron Bentley
 Ensure commit respects file spec when committing removals  | 
740  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
741  | 
def _check_strict(self):  | 
742  | 
        # XXX: when we use iter_changes this would likely be faster if
 | 
|
743  | 
        # iter_changes would check for us (even in the presence of
 | 
|
744  | 
        # selected_files).
 | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
745  | 
if self.strict:  | 
746  | 
            # raise an exception as soon as we find a single unknown.
 | 
|
747  | 
for unknown in self.work_tree.unknowns():  | 
|
748  | 
raise StrictCommitFailed()  | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
749  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
750  | 
def _populate_from_inventory(self):  | 
751  | 
"""Populate the CommitBuilder by walking the working tree inventory."""  | 
|
752  | 
        # Build the revision inventory.
 | 
|
753  | 
        #
 | 
|
754  | 
        # This starts by creating a new empty inventory. Depending on
 | 
|
755  | 
        # which files are selected for commit, and what is present in the
 | 
|
756  | 
        # current tree, the new inventory is populated. inventory entries
 | 
|
757  | 
        # which are candidates for modification have their revision set to
 | 
|
758  | 
        # None; inventory entries that are carried over untouched have their
 | 
|
759  | 
        # revision set to their prior value.
 | 
|
760  | 
        #
 | 
|
761  | 
        # ESEPARATIONOFCONCERNS: this function is diffing and using the diff
 | 
|
762  | 
        # results to create a new inventory at the same time, which results
 | 
|
763  | 
        # in bugs like #46635.  Any reason not to use/enhance Tree.changes_from?
 | 
|
764  | 
        # ADHB 11-07-2006
 | 
|
765  | 
||
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
766  | 
specific_files = self.specific_files  | 
767  | 
exclude = self.exclude  | 
|
| 
2789.2.11
by Ian Clatworthy
 remove more reporting stuff  | 
768  | 
report_changes = self.reporter.is_verbose()  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
769  | 
deleted_ids = []  | 
| 
2938.3.2
by Robert Collins
 Review feedback.  | 
770  | 
        # A tree of paths that have been deleted. E.g. if foo/bar has been
 | 
771  | 
        # deleted, then we have {'foo':{'bar':{}}}
 | 
|
| 
2938.3.1
by Robert Collins
 * Commit with many automatically found deleted paths no longer performs  | 
772  | 
deleted_paths = {}  | 
| 
2921.4.5
by Robert Collins
 Remove an unnecessary assertion.  | 
773  | 
        # XXX: Note that entries may have the wrong kind because the entry does
 | 
774  | 
        # not reflect the status on disk.
 | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
775  | 
work_inv = self.work_tree.inventory  | 
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
776  | 
        # NB: entries will include entries within the excluded ids/paths
 | 
777  | 
        # because iter_entries_by_dir has no 'exclude' facility today.
 | 
|
| 
2825.7.1
by Robert Collins
 * Partial commits are now approximately 40% faster by walking over the  | 
778  | 
entries = work_inv.iter_entries_by_dir(  | 
779  | 
specific_file_ids=self.specific_file_ids, yield_parents=True)  | 
|
| 
2564.2.6
by Ian Clatworthy
 Incorporate feedback from abentley  | 
780  | 
for path, existing_ie in entries:  | 
781  | 
file_id = existing_ie.file_id  | 
|
782  | 
name = existing_ie.name  | 
|
783  | 
parent_id = existing_ie.parent_id  | 
|
784  | 
kind = existing_ie.kind  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
785  | 
            # 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  | 
786  | 
            # The deleted path ids are also recorded so they can be explicitly
 | 
787  | 
            # unversioned later.
 | 
|
788  | 
if deleted_paths:  | 
|
789  | 
path_segments = splitpath(path)  | 
|
790  | 
deleted_dict = deleted_paths  | 
|
791  | 
for segment in path_segments:  | 
|
792  | 
deleted_dict = deleted_dict.get(segment, None)  | 
|
793  | 
if not deleted_dict:  | 
|
| 
2938.3.2
by Robert Collins
 Review feedback.  | 
794  | 
                        # We either took a path not present in the dict
 | 
795  | 
                        # (deleted_dict was None), or we've reached an empty
 | 
|
796  | 
                        # 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  | 
797  | 
                        break
 | 
798  | 
else:  | 
|
799  | 
deleted_dict = None  | 
|
800  | 
if deleted_dict is not None:  | 
|
801  | 
                    # the path has a deleted parent, do not add it.
 | 
|
802  | 
                    continue
 | 
|
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
803  | 
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.  | 
804  | 
                # Skip excluded paths. Excluded paths are processed by
 | 
805  | 
                # _update_builder_with_changes.
 | 
|
| 
3602.1.1
by Robert Collins
 Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)  | 
806  | 
                continue
 | 
| 
4595.11.13
by Martin Pool
 Remove get_kind_and_executable_by_path; go back to using plain path_content_summary  | 
807  | 
content_summary = self.work_tree.path_content_summary(path)  | 
808  | 
kind = content_summary[0]  | 
|
| 
2938.3.1
by Robert Collins
 * Commit with many automatically found deleted paths no longer performs  | 
809  | 
            # Note that when a filter of specific files is given, we must only
 | 
810  | 
            # skip/record deleted files matching that filter.
 | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
811  | 
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  | 
812  | 
if kind == 'missing':  | 
| 
2938.3.1
by Robert Collins
 * Commit with many automatically found deleted paths no longer performs  | 
813  | 
if not deleted_paths:  | 
814  | 
                        # path won't have been split yet.
 | 
|
815  | 
path_segments = splitpath(path)  | 
|
816  | 
deleted_dict = deleted_paths  | 
|
817  | 
for segment in path_segments:  | 
|
818  | 
deleted_dict = deleted_dict.setdefault(segment, {})  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
819  | 
self.reporter.missing(path)  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
820  | 
self._next_progress_entry()  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
821  | 
deleted_ids.append(file_id)  | 
822  | 
                    continue
 | 
|
| 
4595.11.14
by Martin Pool
 Small code cleanups  | 
823  | 
            # TODO: have the builder do the nested commit just-in-time IF and
 | 
824  | 
            # only if needed.
 | 
|
| 
4595.11.12
by Martin Pool
 Change commit back to using path_content_summary rather than synthesizing it  | 
825  | 
if kind == 'tree-reference':  | 
| 
2776.4.4
by Robert Collins
 Move content summary generation outside of record_entry_contents.  | 
826  | 
                # enforce repository nested tree policy.
 | 
827  | 
if (not self.work_tree.supports_tree_reference() or  | 
|
828  | 
                    # repository does not support it either.
 | 
|
| 
2776.4.6
by Robert Collins
 Fixup various commit test failures falling out from the other commit changes.  | 
829  | 
not self.branch.repository._format.supports_tree_reference):  | 
| 
4595.11.8
by Martin Pool
 Commit synthesizes a content_summary without using path_content_summary  | 
830  | 
kind = 'directory'  | 
| 
4595.11.14
by Martin Pool
 Small code cleanups  | 
831  | 
content_summary = (kind, None, None, None)  | 
| 
4595.11.8
by Martin Pool
 Commit synthesizes a content_summary without using path_content_summary  | 
832  | 
elif self.recursive == 'down':  | 
| 
2776.4.6
by Robert Collins
 Fixup various commit test failures falling out from the other commit changes.  | 
833  | 
nested_revision_id = self._commit_nested_tree(  | 
834  | 
file_id, path)  | 
|
| 
4595.11.8
by Martin Pool
 Commit synthesizes a content_summary without using path_content_summary  | 
835  | 
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.  | 
836  | 
else:  | 
| 
4595.11.8
by Martin Pool
 Commit synthesizes a content_summary without using path_content_summary  | 
837  | 
nested_revision_id = self.work_tree.get_reference_revision(file_id)  | 
838  | 
content_summary = (kind, None, None, nested_revision_id)  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
839  | 
|
840  | 
            # Record an entry for this item
 | 
|
841  | 
            # Note: I don't particularly want to have the existing_ie
 | 
|
842  | 
            # parameter but the test suite currently (28-Jun-07) breaks
 | 
|
843  | 
            # 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.  | 
844  | 
definitely_changed = kind != existing_ie.kind  | 
| 
2789.2.12
by Ian Clatworthy
 reduce conditionals  | 
845  | 
self._record_entry(path, file_id, specific_files, kind, name,  | 
| 
2592.3.140
by Robert Collins
 Merge bzr.dev.  | 
846  | 
parent_id, definitely_changed, existing_ie, report_changes,  | 
847  | 
content_summary)  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
848  | 
|
849  | 
        # 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)  | 
850  | 
self.deleted_ids = deleted_ids  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
851  | 
|
| 
2564.2.3
by Ian Clatworthy
 more abentley feedback: use get_nested_tree and include file_id  | 
852  | 
def _commit_nested_tree(self, file_id, path):  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
853  | 
        "Commit a nested tree."
 | 
| 
2564.2.3
by Ian Clatworthy
 more abentley feedback: use get_nested_tree and include file_id  | 
854  | 
sub_tree = self.work_tree.get_nested_tree(file_id, path)  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
855  | 
        # FIXME: be more comprehensive here:
 | 
856  | 
        # this works when both trees are in --trees repository,
 | 
|
857  | 
        # but when both are bound to a different repository,
 | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
858  | 
        # it fails; a better way of approaching this is to
 | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
859  | 
        # finally implement the explicit-caches approach design
 | 
860  | 
        # a while back - RBC 20070306.
 | 
|
| 
2665.5.2
by Aaron Bentley
 Switch commit and merge to Repository.has_same_location  | 
861  | 
if sub_tree.branch.repository.has_same_location(  | 
862  | 
self.work_tree.branch.repository):  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
863  | 
sub_tree.branch.repository = \  | 
864  | 
self.work_tree.branch.repository  | 
|
865  | 
try:  | 
|
| 
2776.4.6
by Robert Collins
 Fixup various commit test failures falling out from the other commit changes.  | 
866  | 
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.  | 
867  | 
recursive=self.recursive,  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
868  | 
message_callback=self.message_callback,  | 
869  | 
timestamp=self.timestamp, timezone=self.timezone,  | 
|
870  | 
committer=self.committer,  | 
|
871  | 
allow_pointless=self.allow_pointless,  | 
|
872  | 
strict=self.strict, verbose=self.verbose,  | 
|
873  | 
local=self.local, reporter=self.reporter)  | 
|
874  | 
except errors.PointlessCommit:  | 
|
| 
2776.4.6
by Robert Collins
 Fixup various commit test failures falling out from the other commit changes.  | 
875  | 
return self.work_tree.get_reference_revision(file_id)  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
876  | 
|
877  | 
def _record_entry(self, path, file_id, specific_files, kind, name,  | 
|
| 
2592.3.140
by Robert Collins
 Merge bzr.dev.  | 
878  | 
parent_id, definitely_changed, existing_ie, report_changes,  | 
879  | 
content_summary):  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
880  | 
        "Record the new inventory entry for a path if any."
 | 
881  | 
        # mutter('check %s {%s}', path, file_id)
 | 
|
| 
2825.7.1
by Robert Collins
 * Partial commits are now approximately 40% faster by walking over the  | 
882  | 
        # mutter('%s selected for commit', path)
 | 
883  | 
if definitely_changed or existing_ie is None:  | 
|
| 
2921.4.4
by Robert Collins
 Minor import cleanup in commit.py.  | 
884  | 
ie = make_entry(kind, name, parent_id, file_id)  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
885  | 
else:  | 
| 
2825.7.1
by Robert Collins
 * Partial commits are now approximately 40% faster by walking over the  | 
886  | 
ie = existing_ie.copy()  | 
887  | 
ie.revision = None  | 
|
| 
3709.3.1
by Robert Collins
 First cut - make it work - at updating the tree stat cache during commit.  | 
888  | 
        # For carried over entries we don't care about the fs hash - the repo
 | 
889  | 
        # 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.  | 
890  | 
_, _, fs_hash = self.builder.record_entry_contents(  | 
| 
3709.3.1
by Robert Collins
 First cut - make it work - at updating the tree stat cache during commit.  | 
891  | 
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  | 
892  | 
if report_changes:  | 
893  | 
self._report_change(ie, path)  | 
|
| 
3709.3.1
by Robert Collins
 First cut - make it work - at updating the tree stat cache during commit.  | 
894  | 
if fs_hash:  | 
895  | 
self.work_tree._observed_sha1(ie.file_id, path, fs_hash)  | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
896  | 
return ie  | 
897  | 
||
898  | 
def _report_change(self, ie, path):  | 
|
899  | 
"""Report a change to the user.  | 
|
900  | 
||
901  | 
        The change that has occurred is described relative to the basis
 | 
|
902  | 
        inventory.
 | 
|
903  | 
        """
 | 
|
904  | 
if (self.basis_inv.has_id(ie.file_id)):  | 
|
905  | 
basis_ie = self.basis_inv[ie.file_id]  | 
|
906  | 
else:  | 
|
907  | 
basis_ie = None  | 
|
908  | 
change = ie.describe_change(basis_ie, ie)  | 
|
| 
3943.8.1
by Marius Kruger
 remove all trailing whitespace from bzr source  | 
909  | 
if change in (InventoryEntry.RENAMED,  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
910  | 
InventoryEntry.MODIFIED_AND_RENAMED):  | 
911  | 
old_path = self.basis_inv.id2path(ie.file_id)  | 
|
912  | 
self.reporter.renamed(change, old_path, path)  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
913  | 
self._next_progress_entry()  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
914  | 
else:  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
915  | 
if change == 'unchanged':  | 
916  | 
                return
 | 
|
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
917  | 
self.reporter.snapshot_change(change, path)  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
918  | 
self._next_progress_entry()  | 
| 
2564.2.1
by Ian Clatworthy
 refactor commit to support alternative population meothds  | 
919  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
920  | 
def _set_progress_stage(self, name, counter=False):  | 
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
921  | 
"""Set the progress stage and emit an update to the progress bar."""  | 
922  | 
self.pb_stage_name = name  | 
|
923  | 
self.pb_stage_count += 1  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
924  | 
if counter:  | 
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
925  | 
self.pb_entries_count = 0  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
926  | 
else:  | 
927  | 
self.pb_entries_count = None  | 
|
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
928  | 
self._emit_progress()  | 
929  | 
||
| 
2564.2.2
by Ian Clatworthy
 incorporate feedback from abentley  | 
930  | 
def _next_progress_entry(self):  | 
931  | 
"""Emit an update to the progress bar and increment the entry count."""  | 
|
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
932  | 
self.pb_entries_count += 1  | 
933  | 
self._emit_progress()  | 
|
934  | 
||
935  | 
def _emit_progress(self):  | 
|
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
936  | 
if self.pb_entries_count is not None:  | 
937  | 
text = "%s [%d] - Stage" % (self.pb_stage_name,  | 
|
938  | 
self.pb_entries_count)  | 
|
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
939  | 
else:  | 
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
940  | 
text = "%s - Stage" % (self.pb_stage_name, )  | 
| 
2531.1.2
by Ian Clatworthy
 Improved progress reporting for commit  | 
941  | 
self.pb.update(text, self.pb_stage_count, self.pb_stage_total)  | 
942  | 
||
| 
4183.5.5
by Robert Collins
 Enable record_iter_changes for cases where it can work.  | 
943  | 
def _set_specific_file_ids(self):  | 
944  | 
"""populate self.specific_file_ids if we will use it."""  | 
|
945  | 
if not self.use_record_iter_changes:  | 
|
946  | 
            # If provided, ensure the specified files are versioned
 | 
|
947  | 
if self.specific_files is not None:  | 
|
948  | 
                # Note: This routine is being called because it raises
 | 
|
949  | 
                # PathNotVersionedError as a side effect of finding the IDs. We
 | 
|
950  | 
                # later use the ids we found as input to the working tree
 | 
|
951  | 
                # inventory iterator, so we only consider those ids rather than
 | 
|
952  | 
                # examining the whole tree again.
 | 
|
953  | 
                # XXX: Dont we have filter_unversioned to do this more
 | 
|
954  | 
                # cheaply?
 | 
|
955  | 
self.specific_file_ids = tree.find_ids_across_trees(  | 
|
956  | 
self.specific_files, [self.basis_tree, self.work_tree])  | 
|
957  | 
else:  | 
|
958  | 
self.specific_file_ids = None  |