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