bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 2374.2.2
by John Arbash Meinel Fix the small bug that ie.snapshot() didn't think about kind changes. | 1 | # Copyright (C) 2005, 2006, 2007 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
 | |
| 15 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | |
| 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, | 
| 1551.8.30
by Aaron Bentley Tweak from review comments | 63 | tree, | 
| 64 |     )
 | |
| 2246.1.3
by Robert Collins New branch hooks: post_push, post_pull, post_commit, post_uncommit. These | 65 | 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. | 66 | import bzrlib.config | 
| 1264
by Martin Pool - Raise a better error from commit when a parent is absent | 67 | from bzrlib.errors import (BzrError, PointlessCommit, | 
| 1185.16.65
by mbp at sourcefrog - new commit --strict option | 68 | ConflictsInTree, | 
| 2564.2.2
by Ian Clatworthy incorporate feedback from abentley | 69 |                            StrictCommitFailed
 | 
| 1264
by Martin Pool - Raise a better error from commit when a parent is absent | 70 |                            )
 | 
| 2825.7.1
by Robert Collins * Partial commits are now approximately 40% faster by walking over the | 71 | from bzrlib.osutils import (kind_marker, isdir,isfile, is_inside_any, | 
| 1740.3.10
by Jelmer Vernooij Fix some minor issues pointed out by j-a-m. | 72 | is_inside_or_parent_of_any, | 
| 2825.7.1
by Robert Collins * Partial commits are now approximately 40% faster by walking over the | 73 | minimum_path_selection, | 
| 2938.3.1
by Robert Collins * Commit with many automatically found deleted paths no longer performs | 74 | quotefn, sha_file, split_lines, | 
| 75 | splitpath, | |
| 76 |                             )
 | |
| 1442.1.62
by Robert Collins Allow creation of testaments from uncommitted data, and use that to get signatures before committing revisions. | 77 | from bzrlib.testament import Testament | 
| 2789.2.1
by Ian Clatworthy Make commit less verbose by default | 78 | from bzrlib.trace import mutter, note, warning, is_quiet | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 79 | from bzrlib.xml5 import serializer_v5 | 
| 2921.4.4
by Robert Collins Minor import cleanup in commit.py. | 80 | from bzrlib.inventory import InventoryEntry, make_entry | 
| 1910.2.9
by Aaron Bentley Inroduce assertDeprecated, and use it to test old commitbuilder API | 81 | from bzrlib import symbol_versioning | 
| 1773.4.1
by Martin Pool Add pyflakes makefile target; fix many warnings | 82 | from bzrlib.symbol_versioning import (deprecated_passed, | 
| 1773.4.3
by Martin Pool [merge] bzr.dev | 83 | deprecated_function, | 
| 1773.4.1
by Martin Pool Add pyflakes makefile target; fix many warnings | 84 | DEPRECATED_PARAMETER) | 
| 1508.1.6
by Robert Collins Move Branch.unknowns() to WorkingTree. | 85 | from bzrlib.workingtree import WorkingTree | 
| 2747.6.11
by Daniel Watkins Modified ReportCommitToLog.started to use urlutils.unescape_for_display for 'location'. | 86 | 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 | 87 | import bzrlib.ui | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 88 | |
| 89 | ||
| 90 | class NullCommitReporter(object): | |
| 91 | """I report on progress of a commit.""" | |
| 1185.12.8
by Aaron Bentley Fixed commit so all output comes though CommitReporter | 92 | |
| 2789.2.10
by Ian Clatworthy focus on performance gains, not better reporting | 93 | def started(self, revno, revid, location=None): | 
| 3052.4.2
by Matt Nordhoff Deprecate not passing a location to commit reporters' started() methods. | 94 | if location is None: | 
| 3052.4.6
by Matt Nordhoff Update the warning message to use 1.0 instead of 0.93. | 95 | 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. | 96 | "to started.", DeprecationWarning, | 
| 97 | stacklevel=2) | |
| 2789.2.10
by Ian Clatworthy focus on performance gains, not better reporting | 98 |         pass
 | 
| 99 | ||
| 100 | def snapshot_change(self, change, path): | |
| 101 |         pass
 | |
| 102 | ||
| 103 | def completed(self, revno, rev_id): | |
| 104 |         pass
 | |
| 105 | ||
| 106 | def deleted(self, file_id): | |
| 107 |         pass
 | |
| 108 | ||
| 109 | def escaped(self, escape_count, message): | |
| 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): | 
| 2789.2.10
by Ian Clatworthy focus on performance gains, not better reporting | 132 | if change == 'unchanged': | 
| 133 |             return
 | |
| 134 | if change == 'added' and path == '': | |
| 135 |             return
 | |
| 2789.2.11
by Ian Clatworthy remove more reporting stuff | 136 | self._note("%s %s", change, path) | 
| 2789.2.4
by Ian Clatworthy make change reporting smarter for initial commit | 137 | |
| 2747.6.5
by Daniel Watkins Added 'started' hook to CommitReporters and moved location functionality from completed hook into it. | 138 | def started(self, revno, rev_id, location=None): | 
| 2747.6.1
by Daniel Watkins Added message at the end of commit for bound branches. | 139 | if location is not None: | 
| 3052.4.1
by Matt Nordhoff bzr commit: don't print the revision number twice. (Bug #172612) | 140 | location = ' to: ' + unescape_for_display(location, 'utf-8') | 
| 2747.6.1
by Daniel Watkins Added message at the end of commit for bound branches. | 141 | else: | 
| 3052.4.2
by Matt Nordhoff Deprecate not passing a location to commit reporters' started() methods. | 142 |             # When started was added, location was only made optional by
 | 
| 143 |             # accident.  Matt Nordhoff 20071129
 | |
| 3052.4.6
by Matt Nordhoff Update the warning message to use 1.0 instead of 0.93. | 144 | 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. | 145 | "to started.", DeprecationWarning, | 
| 146 | stacklevel=2) | |
| 2747.6.1
by Daniel Watkins Added message at the end of commit for bound branches. | 147 | location = '' | 
| 3052.4.1
by Matt Nordhoff bzr commit: don't print the revision number twice. (Bug #172612) | 148 | 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. | 149 | |
| 150 | def completed(self, revno, rev_id): | |
| 2789.2.11
by Ian Clatworthy remove more reporting stuff | 151 | self._note('Committed revision %d.', revno) | 
| 2789.2.4
by Ian Clatworthy make change reporting smarter for initial commit | 152 | |
| 1185.12.8
by Aaron Bentley Fixed commit so all output comes though CommitReporter | 153 | def deleted(self, file_id): | 
| 2789.2.11
by Ian Clatworthy remove more reporting stuff | 154 | self._note('deleted %s', file_id) | 
| 1185.12.8
by Aaron Bentley Fixed commit so all output comes though CommitReporter | 155 | |
| 156 | def escaped(self, escape_count, message): | |
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 157 | self._note("replaced %d control characters in message", escape_count) | 
| 1185.12.8
by Aaron Bentley Fixed commit so all output comes though CommitReporter | 158 | |
| 159 | def missing(self, path): | |
| 2789.2.11
by Ian Clatworthy remove more reporting stuff | 160 | self._note('missing %s', path) | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 161 | |
| 1668.1.5
by Martin Pool [broken] fix up display of files changed by a commit | 162 | def renamed(self, change, old_path, new_path): | 
| 2789.2.11
by Ian Clatworthy remove more reporting stuff | 163 | 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 | 164 | |
| 2789.2.1
by Ian Clatworthy Make commit less verbose by default | 165 | def is_verbose(self): | 
| 166 | return True | |
| 167 | ||
| 1508.1.6
by Robert Collins Move Branch.unknowns() to WorkingTree. | 168 | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 169 | class Commit(object): | 
| 170 | """Task of committing a new revision. | |
| 171 | ||
| 172 |     This is a MethodObject: it accumulates state as the commit is
 | |
| 173 |     prepared, and then it is discarded.  It doesn't represent
 | |
| 174 |     historical revisions, just the act of recording a new one.
 | |
| 175 | ||
| 176 |             missing_ids
 | |
| 177 |             Modified to hold a list of files that have been deleted from
 | |
| 178 |             the working directory; these should be removed from the
 | |
| 179 |             working inventory.
 | |
| 485
by Martin Pool - move commit code into its own module | 180 |     """
 | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 181 | def __init__(self, | 
| 1442.1.60
by Robert Collins gpg sign commits if the policy says we need to | 182 | reporter=None, | 
| 183 | config=None): | |
| 2789.2.1
by Ian Clatworthy Make commit less verbose by default | 184 | """Create a Commit object. | 
| 185 | ||
| 186 |         :param reporter: the default reporter to use or None to decide later
 | |
| 187 |         """
 | |
| 188 | self.reporter = reporter | |
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 189 | self.config = config | 
| 2789.2.10
by Ian Clatworthy focus on performance gains, not better reporting | 190 | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 191 | 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) | 192 | message=None, | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 193 | timestamp=None, | 
| 194 | timezone=None, | |
| 195 | committer=None, | |
| 196 | specific_files=None, | |
| 197 | rev_id=None, | |
| 1276
by Martin Pool - make Branch.commit accept (and ignore) verbose argument | 198 | allow_pointless=True, | 
| 1185.16.65
by mbp at sourcefrog - new commit --strict option | 199 | strict=False, | 
| 2789.2.10
by Ian Clatworthy focus on performance gains, not better reporting | 200 | 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. | 201 | revprops=None, | 
| 1587.1.8
by Robert Collins Local commits on unbound branches fail. | 202 | working_tree=None, | 
| 1607.1.5
by Robert Collins Make commit verbose mode work!. | 203 | local=False, | 
| 204 | reporter=None, | |
| 2149.1.1
by Aaron Bentley Provide a message_callback parameter to tree.commit | 205 | config=None, | 
| 2255.2.218
by Robert Collins Make the nested tree commit smoke test be more rigourous. | 206 | message_callback=None, | 
| 207 | recursive='down'): | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 208 | """Commit working copy as a new revision. | 
| 209 | ||
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 210 |         :param message: the commit message (it or message_callback is required)
 | 
| 211 | ||
| 212 |         :param timestamp: if not None, seconds-since-epoch for a
 | |
| 213 |             postdated/predated commit.
 | |
| 214 | ||
| 215 |         :param specific_files: If true, commit only those files.
 | |
| 216 | ||
| 217 |         :param rev_id: If set, use this as the new revision id.
 | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 218 |             Useful for test or import commands that need to tightly
 | 
| 219 |             control what revisions are assigned.  If you duplicate
 | |
| 220 |             a revision id that exists elsewhere it is your own fault.
 | |
| 221 |             If null (default), a time/random revision id is generated.
 | |
| 1253
by Martin Pool - test that pointless commits are trapped | 222 | |
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 223 |         :param allow_pointless: If true (default), commit even if nothing
 | 
| 1253
by Martin Pool - test that pointless commits are trapped | 224 |             has changed and no merges are recorded.
 | 
| 1185.16.35
by Martin Pool - stub for revision properties | 225 | |
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 226 |         :param strict: If true, don't allow a commit if the working tree
 | 
| 1185.16.65
by mbp at sourcefrog - new commit --strict option | 227 |             contains unknown files.
 | 
| 228 | ||
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 229 |         :param revprops: Properties for new revision
 | 
| 1587.1.8
by Robert Collins Local commits on unbound branches fail. | 230 |         :param local: Perform a local only commit.
 | 
| 2789.2.1
by Ian Clatworthy Make commit less verbose by default | 231 |         :param reporter: the reporter to use or None for the default
 | 
| 232 |         :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. | 233 |         :param recursive: If set to 'down', commit in any subtrees that have
 | 
| 234 |             pending changes of any sort during this commit.
 | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 235 |         """
 | 
| 1285
by Martin Pool - fix bug in committing files that are renamed but not modified | 236 | mutter('preparing to commit') | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 237 | |
| 2367.2.1
by Robert Collins Remove bzrlib 0.8 compatability where it was making the code unclear or messy. (Robert Collins) | 238 | if working_tree is None: | 
| 239 | 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. | 240 | else: | 
| 241 | self.work_tree = working_tree | |
| 242 | self.branch = self.work_tree.branch | |
| 2100.3.14
by Aaron Bentley Test workingtree4 format, prevent use with old repos | 243 | if getattr(self.work_tree, 'requires_rich_root', lambda: False)(): | 
| 244 | if not self.branch.repository.supports_rich_root(): | |
| 245 | raise errors.RootNotRich() | |
| 2149.1.1
by Aaron Bentley Provide a message_callback parameter to tree.commit | 246 | if message_callback is None: | 
| 2149.1.3
by Aaron Bentley Updates from review comments | 247 | if message is not None: | 
| 248 | if isinstance(message, str): | |
| 249 | message = message.decode(bzrlib.user_encoding) | |
| 250 | message_callback = lambda x: message | |
| 2149.1.1
by Aaron Bentley Provide a message_callback parameter to tree.commit | 251 | else: | 
| 2149.1.3
by Aaron Bentley Updates from review comments | 252 | raise BzrError("The message or message_callback keyword" | 
| 253 | " 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. | 254 | |
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 255 | self.bound_branch = None | 
| 2840.1.1
by Ian Clatworthy faster pointless commit detection (Robert Collins) | 256 | self.any_entries_changed = False | 
| 257 | self.any_entries_deleted = False | |
| 1587.1.9
by Robert Collins Local commits do no alter or access the master branch. | 258 | self.local = local | 
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 259 | self.master_branch = None | 
| 1614.1.1
by Aaron Bentley Fixed master locking in commit | 260 | self.master_locked = False | 
| 2776.4.15
by Robert Collins Put checking for recursive commits back to the commit driver, not commit builder. | 261 | self.recursive = recursive | 
| 1740.3.10
by Jelmer Vernooij Fix some minor issues pointed out by j-a-m. | 262 | self.rev_id = None | 
| 2843.1.1
by Ian Clatworthy Faster partial commits by walking less data (Robert Collins) | 263 | if specific_files is not None: | 
| 264 | self.specific_files = sorted( | |
| 265 | minimum_path_selection(specific_files)) | |
| 266 | else: | |
| 267 | self.specific_files = None | |
| 2825.7.1
by Robert Collins * Partial commits are now approximately 40% faster by walking over the | 268 | self.specific_file_ids = None | 
| 1194
by Martin Pool - [BROKEN] more progress of commit into weaves | 269 | self.allow_pointless = allow_pointless | 
| 2255.2.218
by Robert Collins Make the nested tree commit smoke test be more rigourous. | 270 | self.revprops = revprops | 
| 271 | self.message_callback = message_callback | |
| 272 | self.timestamp = timestamp | |
| 273 | self.timezone = timezone | |
| 274 | self.committer = committer | |
| 275 | self.strict = strict | |
| 276 | self.verbose = verbose | |
| 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 | 277 |         # accumulates an inventory delta to the basis entry, so we can make
 | 
| 278 |         # just the necessary updates to the workingtree's cached basis.
 | |
| 2903.2.10
by Martin Pool make Commit.basis_delta private | 279 | self._basis_delta = [] | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 280 | |
| 2789.2.5
by Ian Clatworthy Upgrade commit tests to reflect new reporting formats | 281 | self.work_tree.lock_write() | 
| 2789.2.10
by Ian Clatworthy focus on performance gains, not better reporting | 282 | 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. | 283 | self.basis_revid = self.work_tree.last_revision() | 
| 2789.2.4
by Ian Clatworthy make change reporting smarter for initial commit | 284 | 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 | 285 | self.basis_tree.lock_read() | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 286 | try: | 
| 1666.1.18
by Robert Collins Add a progress bar during commit operations. | 287 |             # Cannot commit with conflicts present.
 | 
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 288 | if len(self.work_tree.conflicts()) > 0: | 
| 1666.1.18
by Robert Collins Add a progress bar during commit operations. | 289 | raise ConflictsInTree | 
| 290 | ||
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 291 |             # Setup the bound branch variables as needed.
 | 
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 292 | self._check_bound_branch() | 
| 293 | ||
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 294 |             # Check that the working tree is up to date
 | 
| 2659.3.1
by NamNguyen ``Branch.hooks`` now supports ``pre_commit`` hook. | 295 | 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 | 296 | |
| 2789.2.5
by Ian Clatworthy Upgrade commit tests to reflect new reporting formats | 297 |             # Complete configuration setup
 | 
| 298 | if reporter is not None: | |
| 299 | self.reporter = reporter | |
| 300 | elif self.reporter is None: | |
| 301 | self.reporter = self._select_reporter() | |
| 1587.1.6
by Robert Collins Update bound branch implementation to 0.8. | 302 | if self.config is None: | 
| 1770.2.9
by Aaron Bentley Add Branch.get_config, update BranchConfig() callers | 303 | self.config = self.branch.get_config() | 
| 1587.1.6
by Robert Collins Update bound branch implementation to 0.8. | 304 | |
| 2541.1.1
by Ian Clatworthy Refactor commit.commit() to walk the working inventory once/less | 305 |             # If provided, ensure the specified files are versioned
 | 
| 2843.1.1
by Ian Clatworthy Faster partial commits by walking less data (Robert Collins) | 306 | if self.specific_files is not None: | 
| 2776.4.13
by Robert Collins Merge bzr.dev. | 307 |                 # Note: This routine is being called because it raises
 | 
| 2776.4.14
by Robert Collins Merge bzr.dev. | 308 |                 # PathNotVersionedError as a side effect of finding the IDs. We
 | 
| 2776.4.13
by Robert Collins Merge bzr.dev. | 309 |                 # later use the ids we found as input to the working tree
 | 
| 310 |                 # inventory iterator, so we only consider those ids rather than
 | |
| 311 |                 # examining the whole tree again.
 | |
| 2255.2.218
by Robert Collins Make the nested tree commit smoke test be more rigourous. | 312 |                 # XXX: Dont we have filter_unversioned to do this more
 | 
| 313 |                 # cheaply?
 | |
| 2825.7.1
by Robert Collins * Partial commits are now approximately 40% faster by walking over the | 314 | self.specific_file_ids = tree.find_ids_across_trees( | 
| 315 | specific_files, [self.basis_tree, self.work_tree]) | |
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 316 | |
| 2531.1.2
by Ian Clatworthy Improved progress reporting for commit | 317 |             # Setup the progress bar. As the number of files that need to be
 | 
| 318 |             # committed in unknown, progress is reported as stages.
 | |
| 319 |             # We keep track of entries separately though and include that
 | |
| 320 |             # information in the progress bar during the relevant stages.
 | |
| 321 | self.pb_stage_name = "" | |
| 322 | self.pb_stage_count = 0 | |
| 2659.3.1
by NamNguyen ``Branch.hooks`` now supports ``pre_commit`` hook. | 323 | self.pb_stage_total = 5 | 
| 2531.1.2
by Ian Clatworthy Improved progress reporting for commit | 324 | if self.bound_branch: | 
| 325 | self.pb_stage_total += 1 | |
| 326 | self.pb.show_pct = False | |
| 327 | self.pb.show_spinner = False | |
| 328 | self.pb.show_eta = False | |
| 329 | self.pb.show_count = True | |
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 330 | self.pb.show_bar = True | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 331 | |
| 2541.1.1
by Ian Clatworthy Refactor commit.commit() to walk the working inventory once/less | 332 |             # After a merge, a selected file commit is not supported.
 | 
| 333 |             # See 'bzr help merge' for an explanation as to why.
 | |
| 334 | self.basis_inv = self.basis_tree.inventory | |
| 1223
by Martin Pool - store inventories in weave | 335 | self._gather_parents() | 
| 1344
by Martin Pool - disallow selected-file commit of merges | 336 | if len(self.parents) > 1 and self.specific_files: | 
| 1551.15.9
by Aaron Bentley Better error for selected-file commit of merges | 337 | raise errors.CannotCommitSelectedFileMerge(self.specific_files) | 
| 2747.6.6
by Daniel Watkins Added call to CommitReport.started hook. | 338 | |
| 2541.1.1
by Ian Clatworthy Refactor commit.commit() to walk the working inventory once/less | 339 |             # Collect the changes
 | 
| 2564.2.2
by Ian Clatworthy incorporate feedback from abentley | 340 | self._set_progress_stage("Collecting changes", | 
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 341 | entries_title="Directory") | 
| 2255.2.218
by Robert Collins Make the nested tree commit smoke test be more rigourous. | 342 | self.builder = self.branch.get_commit_builder(self.parents, | 
| 1740.3.7
by Jelmer Vernooij Move committer, log, revprops, timestamp and timezone to CommitBuilder. | 343 | self.config, timestamp, timezone, committer, revprops, rev_id) | 
| 2659.3.5
by NamNguyen merge with bzr.dev | 344 | |
| 2617.6.2
by Robert Collins Add abort_write_group and wire write_groups into fetch and commit. | 345 | try: | 
| 2747.6.6
by Daniel Watkins Added call to CommitReport.started hook. | 346 |                 # find the location being committed to
 | 
| 347 | if self.bound_branch: | |
| 348 | master_location = self.master_branch.base | |
| 349 | else: | |
| 350 | master_location = self.branch.base | |
| 351 | ||
| 352 |                 # report the start of the commit
 | |
| 353 | self.reporter.started(new_revno, self.rev_id, master_location) | |
| 354 | ||
| 2617.6.2
by Robert Collins Add abort_write_group and wire write_groups into fetch and commit. | 355 | self._update_builder_with_changes() | 
| 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 | 356 | self._report_and_accumulate_deletes() | 
| 2617.6.2
by Robert Collins Add abort_write_group and wire write_groups into fetch and commit. | 357 | self._check_pointless() | 
| 358 | ||
| 359 |                 # TODO: Now the new inventory is known, check for conflicts.
 | |
| 360 |                 # ADHB 2006-08-08: If this is done, populate_new_inv should not add
 | |
| 361 |                 # weave lines, because nothing should be recorded until it is known
 | |
| 362 |                 # that commit will succeed.
 | |
| 2592.3.49
by Robert Collins Merge bzr.dev. | 363 | 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. | 364 | self.builder.finish_inventory() | 
| 365 | ||
| 366 |                 # Prompt the user for a commit message if none provided
 | |
| 367 | message = message_callback(self) | |
| 368 | self.message = message | |
| 369 | self._escape_commit_message() | |
| 370 | ||
| 371 |                 # Add revision data to the local branch
 | |
| 372 | self.rev_id = self.builder.commit(self.message) | |
| 2659.3.5
by NamNguyen merge with bzr.dev | 373 | |
| 2617.6.2
by Robert Collins Add abort_write_group and wire write_groups into fetch and commit. | 374 | except: | 
| 2749.3.1
by Jelmer Vernooij Add CommitBuilder.abort(). | 375 | self.builder.abort() | 
| 2617.6.2
by Robert Collins Add abort_write_group and wire write_groups into fetch and commit. | 376 |                 raise
 | 
| 377 | ||
| 2659.3.6
by NamNguyen branch_implementations/test_commit.py: | 378 | self._process_pre_hooks(old_revno, new_revno) | 
| 379 | ||
| 2531.1.2
by Ian Clatworthy Improved progress reporting for commit | 380 |             # Upload revision data to the master.
 | 
| 1759.2.1
by Jelmer Vernooij Fix some types (found using aspell). | 381 |             # this will propagate merged revisions too if needed.
 | 
| 1587.1.7
by Robert Collins Commit revision data locally first for bound branch commits. | 382 | if self.bound_branch: | 
| 3113.6.7
by Aaron Bentley Fix commit for a checkout sharing a repo with its branch (abentley, #177592) | 383 | if not self.master_branch.repository.has_same_location( | 
| 384 | self.branch.repository): | |
| 385 | self._set_progress_stage("Uploading data to master branch") | |
| 386 | self.master_branch.repository.fetch(self.branch.repository, | |
| 387 | revision_id=self.rev_id) | |
| 1587.1.7
by Robert Collins Commit revision data locally first for bound branch commits. | 388 |                 # now the master has the revision data
 | 
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 389 |                 # 'commit' to the master first so a timeout here causes the
 | 
| 390 |                 # local branch to be out of date
 | |
| 2230.3.51
by Aaron Bentley Store revno for Branch6, set_last_revision -> set_last_revision_info | 391 | self.master_branch.set_last_revision_info(new_revno, | 
| 392 | self.rev_id) | |
| 1587.1.7
by Robert Collins Commit revision data locally first for bound branch commits. | 393 | |
| 394 |             # and now do the commit locally.
 | |
| 2230.3.51
by Aaron Bentley Store revno for Branch6, set_last_revision -> set_last_revision_info | 395 | self.branch.set_last_revision_info(new_revno, self.rev_id) | 
| 1587.1.6
by Robert Collins Update bound branch implementation to 0.8. | 396 | |
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 397 |             # Make the working tree up to date with the branch
 | 
| 2564.2.2
by Ian Clatworthy incorporate feedback from abentley | 398 | self._set_progress_stage("Updating the working tree") | 
| 2929.2.1
by Robert Collins * Commit updates the state of the working tree via a delta rather than | 399 | self.work_tree.update_basis_by_delta(self.rev_id, | 
| 400 | self._basis_delta) | |
| 2747.6.5
by Daniel Watkins Added 'started' hook to CommitReporters and moved location functionality from completed hook into it. | 401 | self.reporter.completed(new_revno, self.rev_id) | 
| 2659.3.1
by NamNguyen ``Branch.hooks`` now supports ``pre_commit`` hook. | 402 | self._process_post_hooks(old_revno, new_revno) | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 403 | finally: | 
| 1666.1.18
by Robert Collins Add a progress bar during commit operations. | 404 | self._cleanup() | 
| 1773.1.1
by Robert Collins Teach WorkingTree.commit to return the committed revision id. | 405 | return self.rev_id | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 406 | |
| 2789.2.4
by Ian Clatworthy make change reporting smarter for initial commit | 407 | def _select_reporter(self): | 
| 408 | """Select the CommitReporter to use.""" | |
| 409 | if is_quiet(): | |
| 410 | return NullCommitReporter() | |
| 2789.2.10
by Ian Clatworthy focus on performance gains, not better reporting | 411 | return ReportCommitToLog() | 
| 2789.2.4
by Ian Clatworthy make change reporting smarter for initial commit | 412 | |
| 1910.2.37
by Aaron Bentley Handle empty commits, fix test | 413 | def _check_pointless(self): | 
| 414 | if self.allow_pointless: | |
| 415 |             return
 | |
| 416 |         # A merge with no effect on files
 | |
| 417 | if len(self.parents) > 1: | |
| 418 |             return
 | |
| 2903.2.10
by Martin Pool make Commit.basis_delta private | 419 |         # TODO: we could simplify this by using self._basis_delta.
 | 
| 2903.2.8
by Martin Pool More efficient reporting of deletions from a large tree during commit | 420 | |
| 2921.4.6
by Robert Collins Typos found by Rob Weir. | 421 |         # 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. | 422 |         # a worthwhile commit.
 | 
| 423 | if (self.basis_revid == revision.NULL_REVISION and | |
| 424 | len(self.builder.new_inventory) == 1): | |
| 1731.1.49
by Aaron Bentley Merge bzr.dev | 425 | raise PointlessCommit() | 
| 2044.1.1
by Robert Collins (Robert Collins) Forward merge from 0.11rc2 NEWS and performance-regression fix. | 426 |         # If length == 1, then we only have the root entry. Which means
 | 
| 427 |         # that there is no real difference (only the root could be different)
 | |
| 2921.4.7
by Robert Collins Correct the check_pointless change to pass all tests. | 428 |         # unless deletes occured, in which case the length is irrelevant.
 | 
| 429 | if (self.any_entries_deleted or | |
| 430 | (len(self.builder.new_inventory) != 1 and | |
| 431 | self.any_entries_changed)): | |
| 1910.2.37
by Aaron Bentley Handle empty commits, fix test | 432 |             return
 | 
| 433 | raise PointlessCommit() | |
| 434 | ||
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 435 | def _check_bound_branch(self): | 
| 436 | """Check to see if the local branch is bound. | |
| 437 | ||
| 438 |         If it is bound, then most of the commit will actually be
 | |
| 439 |         done using the remote branch as the target branch.
 | |
| 440 |         Only at the end will the local branch be updated.
 | |
| 441 |         """
 | |
| 1587.1.9
by Robert Collins Local commits do no alter or access the master branch. | 442 | if self.local and not self.branch.get_bound_location(): | 
| 443 | raise errors.LocalRequiresBoundBranch() | |
| 444 | ||
| 445 | if not self.local: | |
| 446 | self.master_branch = self.branch.get_master_branch() | |
| 447 | ||
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 448 | if not self.master_branch: | 
| 1587.1.8
by Robert Collins Local commits on unbound branches fail. | 449 |             # make this branch the reference branch for out of date checks.
 | 
| 450 | 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 | 451 |             return
 | 
| 452 | ||
| 453 |         # If the master branch is bound, we must fail
 | |
| 454 | master_bound_location = self.master_branch.get_bound_location() | |
| 455 | if master_bound_location: | |
| 1505.1.27
by John Arbash Meinel Adding tests against an sftp branch. | 456 | 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 | 457 | self.master_branch, master_bound_location) | 
| 458 | ||
| 459 |         # TODO: jam 20051230 We could automatically push local
 | |
| 460 |         #       commits to the remote branch if they would fit.
 | |
| 461 |         #       But for now, just require remote to be identical
 | |
| 462 |         #       to local.
 | |
| 463 | ||
| 464 |         # 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. | 465 | master_info = self.master_branch.last_revision_info() | 
| 466 | local_info = self.branch.last_revision_info() | |
| 467 | 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 | 468 | raise errors.BoundBranchOutOfDate(self.branch, | 
| 469 | self.master_branch) | |
| 470 | ||
| 471 |         # Now things are ready to change the master branch
 | |
| 472 |         # so grab the lock
 | |
| 473 | self.bound_branch = self.branch | |
| 474 | self.master_branch.lock_write() | |
| 1614.1.1
by Aaron Bentley Fixed master locking in commit | 475 | self.master_locked = True | 
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 476 | |
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 477 | def _check_out_of_date_tree(self): | 
| 478 | """Check that the working tree is up to date. | |
| 479 | ||
| 480 |         :return: old_revision_number,new_revision_number tuple
 | |
| 481 |         """
 | |
| 482 | try: | |
| 483 | first_tree_parent = self.work_tree.get_parent_ids()[0] | |
| 484 | except IndexError: | |
| 485 |             # if there are no parents, treat our parent as 'None'
 | |
| 486 |             # this is so that we still consider the master branch
 | |
| 487 |             # - in a checkout scenario the tree may have no
 | |
| 488 |             # parents but the branch may do.
 | |
| 489 | first_tree_parent = bzrlib.revision.NULL_REVISION | |
| 490 | old_revno, master_last = self.master_branch.last_revision_info() | |
| 491 | if master_last != first_tree_parent: | |
| 492 | if master_last != bzrlib.revision.NULL_REVISION: | |
| 493 | raise errors.OutOfDateTree(self.work_tree) | |
| 494 | if self.branch.repository.has_revision(first_tree_parent): | |
| 495 | new_revno = old_revno + 1 | |
| 496 | else: | |
| 497 |             # ghost parents never appear in revision history.
 | |
| 498 | new_revno = 1 | |
| 499 | return old_revno,new_revno | |
| 500 | ||
| 2659.3.1
by NamNguyen ``Branch.hooks`` now supports ``pre_commit`` hook. | 501 | def _process_pre_hooks(self, old_revno, new_revno): | 
| 502 | """Process any registered pre commit hooks.""" | |
| 2659.3.9
by NamNguyen branch.py: | 503 | self._set_progress_stage("Running pre_commit hooks") | 
| 2659.3.1
by NamNguyen ``Branch.hooks`` now supports ``pre_commit`` hook. | 504 | self._process_hooks("pre_commit", old_revno, new_revno) | 
| 505 | ||
| 506 | def _process_post_hooks(self, old_revno, new_revno): | |
| 507 | """Process any registered post commit hooks.""" | |
| 2553.1.2
by Robert Collins Show hook names during commit. | 508 |         # Process the post commit hooks, if any
 | 
| 2659.3.9
by NamNguyen branch.py: | 509 | 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 | 510 |         # old style commit hooks - should be deprecated ? (obsoleted in
 | 
| 511 |         # 0.15)
 | |
| 512 | if self.config.post_commit() is not None: | |
| 513 | hooks = self.config.post_commit().split(' ') | |
| 514 |             # this would be nicer with twisted.python.reflect.namedAny
 | |
| 515 | for hook in hooks: | |
| 516 | result = eval(hook + '(branch, rev_id)', | |
| 517 | {'branch':self.branch, | |
| 518 | 'bzrlib':bzrlib, | |
| 519 | 'rev_id':self.rev_id}) | |
| 2659.3.1
by NamNguyen ``Branch.hooks`` now supports ``pre_commit`` hook. | 520 |         # process new style post commit hooks
 | 
| 521 | self._process_hooks("post_commit", old_revno, new_revno) | |
| 522 | ||
| 523 | def _process_hooks(self, hook_name, old_revno, new_revno): | |
| 2659.3.3
by NamNguyen Changed ``pre_commit`` hook signature. | 524 | if not Branch.hooks[hook_name]: | 
| 525 |             return
 | |
| 526 | ||
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 527 |         # new style commit hooks:
 | 
| 528 | if not self.bound_branch: | |
| 529 | hook_master = self.branch | |
| 530 | hook_local = None | |
| 531 | else: | |
| 532 | hook_master = self.master_branch | |
| 533 | hook_local = self.branch | |
| 534 |         # With bound branches, when the master is behind the local branch,
 | |
| 535 |         # the 'old_revno' and old_revid values here are incorrect.
 | |
| 536 |         # XXX: FIXME ^. RBC 20060206
 | |
| 537 | if self.parents: | |
| 538 | old_revid = self.parents[0] | |
| 539 | else: | |
| 540 | old_revid = bzrlib.revision.NULL_REVISION | |
| 2659.3.9
by NamNguyen branch.py: | 541 | |
| 542 | if hook_name == "pre_commit": | |
| 543 | future_tree = self.builder.revision_tree() | |
| 544 | tree_delta = future_tree.changes_from(self.basis_tree, | |
| 545 | include_root=True) | |
| 546 | ||
| 2659.3.1
by NamNguyen ``Branch.hooks`` now supports ``pre_commit`` hook. | 547 | for hook in Branch.hooks[hook_name]: | 
| 2553.1.3
by Robert Collins Increase docs in response to review feedback. | 548 |             # show the running hook in the progress bar. As hooks may
 | 
| 549 |             # end up doing nothing (e.g. because they are not configured by
 | |
| 550 |             # the user) this is still showing progress, not showing overall
 | |
| 551 |             # actions - its up to each plugin to show a UI if it want's to
 | |
| 552 |             # (such as 'Emailing diff to foo@example.com').
 | |
| 2659.3.1
by NamNguyen ``Branch.hooks`` now supports ``pre_commit`` hook. | 553 | self.pb_stage_name = "Running %s hooks [%s]" % \ | 
| 2659.3.9
by NamNguyen branch.py: | 554 | (hook_name, Branch.hooks.get_hook_name(hook)) | 
| 2553.1.2
by Robert Collins Show hook names during commit. | 555 | self._emit_progress() | 
| 2560.1.4
by Robert Collins Allow -Dhooks to get the hooks invoked during commit logged. | 556 | if 'hooks' in debug.debug_flags: | 
| 557 | mutter("Invoking commit hook: %r", hook) | |
| 2659.3.1
by NamNguyen ``Branch.hooks`` now supports ``pre_commit`` hook. | 558 | if hook_name == "post_commit": | 
| 559 | hook(hook_local, hook_master, old_revno, old_revid, new_revno, | |
| 560 | self.rev_id) | |
| 561 | elif hook_name == "pre_commit": | |
| 562 | hook(hook_local, hook_master, | |
| 563 | old_revno, old_revid, new_revno, self.rev_id, | |
| 2659.3.9
by NamNguyen branch.py: | 564 | tree_delta, future_tree) | 
| 2511.1.1
by Ian Clatworthy commit.py clean-up including logging just to stderr, not bzr.log | 565 | |
| 1666.1.18
by Robert Collins Add a progress bar during commit operations. | 566 | def _cleanup(self): | 
| 567 | """Cleanup any open locks, progress bars etc.""" | |
| 568 | cleanups = [self._cleanup_bound_branch, | |
| 2255.2.25
by John Arbash Meinel DirstateRevisionTrees need to be read_locked before they will work as BasisTree | 569 | self.basis_tree.unlock, | 
| 1666.1.18
by Robert Collins Add a progress bar during commit operations. | 570 | self.work_tree.unlock, | 
| 571 | self.pb.finished] | |
| 572 | found_exception = None | |
| 573 | for cleanup in cleanups: | |
| 574 | try: | |
| 575 | cleanup() | |
| 576 |             # we want every cleanup to run no matter what.
 | |
| 577 |             # so we have a catchall here, but we will raise the
 | |
| 578 |             # last encountered exception up the stack: and
 | |
| 579 |             # typically this will be useful enough.
 | |
| 580 | except Exception, e: | |
| 581 | found_exception = e | |
| 582 | 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. | 583 |             # 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. | 584 |             # trashed, e is our sure-to-work exception even though it loses the
 | 
| 585 |             # full traceback. XXX: RBC 20060421 perhaps we could check the
 | |
| 586 |             # exc_info and if its the same one do a plain raise otherwise 
 | |
| 587 |             # 'raise e' as we do now.
 | |
| 588 | raise e | |
| 589 | ||
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 590 | def _cleanup_bound_branch(self): | 
| 591 | """Executed at the end of a try/finally to cleanup a bound branch. | |
| 592 | ||
| 593 |         If the branch wasn't bound, this is a no-op.
 | |
| 594 |         If it was, it resents self.branch to the local branch, instead
 | |
| 595 |         of being the master.
 | |
| 596 |         """
 | |
| 597 | if not self.bound_branch: | |
| 598 |             return
 | |
| 1614.1.1
by Aaron Bentley Fixed master locking in commit | 599 | if self.master_locked: | 
| 600 | self.master_branch.unlock() | |
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 601 | |
| 1390
by Robert Collins pair programming worx... merge integration and weave | 602 | def _escape_commit_message(self): | 
| 603 | """Replace xml-incompatible control characters.""" | |
| 1666.1.6
by Robert Collins Make knit the default format. | 604 |         # FIXME: RBC 20060419 this should be done by the revision
 | 
| 605 |         # serialiser not by commit. Then we can also add an unescaper
 | |
| 606 |         # in the deserializer and start roundtripping revision messages
 | |
| 607 |         # precisely. See repository_implementations/test_repository.py
 | |
| 608 | ||
| 1185.11.5
by John Arbash Meinel Merged up-to-date against mainline, still broken. | 609 |         # Python strings can include characters that can't be
 | 
| 610 |         # represented in well-formed XML; escape characters that
 | |
| 611 |         # aren't listed in the XML specification
 | |
| 612 |         # (http://www.w3.org/TR/REC-xml/#NT-Char).
 | |
| 1390
by Robert Collins pair programming worx... merge integration and weave | 613 | self.message, escape_count = re.subn( | 
| 1393.4.2
by Harald Meland Cleanup + better test of commit-msg control character escape code. | 614 | u'[^\x09\x0A\x0D\u0020-\uD7FF\uE000-\uFFFD]+', | 
| 1185.11.5
by John Arbash Meinel Merged up-to-date against mainline, still broken. | 615 | lambda match: match.group(0).encode('unicode_escape'), | 
| 1390
by Robert Collins pair programming worx... merge integration and weave | 616 | self.message) | 
| 1185.11.5
by John Arbash Meinel Merged up-to-date against mainline, still broken. | 617 | if escape_count: | 
| 1185.12.8
by Aaron Bentley Fixed commit so all output comes though CommitReporter | 618 | self.reporter.escaped(escape_count, self.message) | 
| 1223
by Martin Pool - store inventories in weave | 619 | |
| 620 | def _gather_parents(self): | |
| 1092.2.25
by Robert Collins support ghosts in commits | 621 | """Record the parents of a merge for merge detection.""" | 
| 1740.3.6
by Jelmer Vernooij Move inventory writing to the commit builder. | 622 |         # TODO: Make sure that this list doesn't contain duplicate 
 | 
| 623 |         # entries and the order is preserved when doing this.
 | |
| 1773.2.1
by Robert Collins Teach all trees about unknowns, conflicts and get_parent_ids. | 624 | self.parents = self.work_tree.get_parent_ids() | 
| 2283.2.1
by John Arbash Meinel Avoid deserializing an inventory we have already parsed. | 625 | self.parent_invs = [self.basis_inv] | 
| 626 | for revision in self.parents[1:]: | |
| 1185.67.2
by Aaron Bentley Renamed Branch.storage to Branch.repository | 627 | 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. | 628 | mutter('commit parent revision {%s}', revision) | 
| 1185.67.2
by Aaron Bentley Renamed Branch.storage to Branch.repository | 629 | inventory = self.branch.repository.get_inventory(revision) | 
| 1185.65.1
by Aaron Bentley Refactored out ControlFiles and RevisionStore from _Branch | 630 | 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. | 631 | else: | 
| 632 | mutter('commit parent ghost revision {%s}', revision) | |
| 1284
by Martin Pool - in commit, avoid reading basis inventory twice | 633 | |
| 2541.1.1
by Ian Clatworthy Refactor commit.commit() to walk the working inventory once/less | 634 | def _update_builder_with_changes(self): | 
| 635 | """Update the commit builder with the data about what has changed. | |
| 636 |         """
 | |
| 637 |         # Build the revision inventory.
 | |
| 638 |         #
 | |
| 639 |         # This starts by creating a new empty inventory. Depending on
 | |
| 640 |         # which files are selected for commit, and what is present in the
 | |
| 641 |         # current tree, the new inventory is populated. inventory entries 
 | |
| 642 |         # which are candidates for modification have their revision set to
 | |
| 643 |         # None; inventory entries that are carried over untouched have their
 | |
| 644 |         # revision set to their prior value.
 | |
| 645 |         #
 | |
| 1551.7.24
by Aaron Bentley Ensure commit respects file spec when committing removals | 646 |         # ESEPARATIONOFCONCERNS: this function is diffing and using the diff
 | 
| 647 |         # results to create a new inventory at the same time, which results
 | |
| 1852.10.3
by Robert Collins Remove all uses of compare_trees and replace with Tree.changes_from throughout bzrlib. | 648 |         # in bugs like #46635.  Any reason not to use/enhance Tree.changes_from?
 | 
| 1551.7.24
by Aaron Bentley Ensure commit respects file spec when committing removals | 649 |         # ADHB 11-07-2006
 | 
| 2541.1.1
by Ian Clatworthy Refactor commit.commit() to walk the working inventory once/less | 650 | |
| 651 | specific_files = self.specific_files | |
| 652 | mutter("Selecting files for commit with filter %s", specific_files) | |
| 653 | ||
| 2564.2.2
by Ian Clatworthy incorporate feedback from abentley | 654 |         # Build the new inventory
 | 
| 2564.2.7
by Ian Clatworthy Clean-up comments and make use of self.builder.record_root_entry more explicit | 655 | self._populate_from_inventory(specific_files) | 
| 2541.1.1
by Ian Clatworthy Refactor commit.commit() to walk the working inventory once/less | 656 | |
| 2564.2.7
by Ian Clatworthy Clean-up comments and make use of self.builder.record_root_entry more explicit | 657 |         # If specific files are selected, then all un-selected files must be
 | 
| 658 |         # recorded in their previous state. For more details, see
 | |
| 659 |         # https://lists.ubuntu.com/archives/bazaar/2007q3/028476.html.
 | |
| 2541.1.1
by Ian Clatworthy Refactor commit.commit() to walk the working inventory once/less | 660 | if specific_files: | 
| 2825.7.1
by Robert Collins * Partial commits are now approximately 40% faster by walking over the | 661 | for path, old_ie in self.basis_inv.iter_entries(): | 
| 662 | 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. | 663 |                     # already added - skip.
 | 
| 2541.1.1
by Ian Clatworthy Refactor commit.commit() to walk the working inventory once/less | 664 |                     continue
 | 
| 665 | if is_inside_any(specific_files, path): | |
| 2776.4.6
by Robert Collins Fixup various commit test failures falling out from the other commit changes. | 666 |                     # was inside the selected path, if not present it has been
 | 
| 667 |                     # deleted so skip.
 | |
| 2541.1.1
by Ian Clatworthy Refactor commit.commit() to walk the working inventory once/less | 668 |                     continue
 | 
| 2825.7.1
by Robert Collins * Partial commits are now approximately 40% faster by walking over the | 669 | if old_ie.kind == 'directory': | 
| 670 | self._next_progress_entry() | |
| 2776.4.6
by Robert Collins Fixup various commit test failures falling out from the other commit changes. | 671 |                 # not in final inv yet, was not in the selected files, so is an
 | 
| 672 |                 # entry to be preserved unaltered.
 | |
| 2825.7.1
by Robert Collins * Partial commits are now approximately 40% faster by walking over the | 673 | ie = old_ie.copy() | 
| 2843.1.1
by Ian Clatworthy Faster partial commits by walking less data (Robert Collins) | 674 |                 # Note: specific file commits after a merge are currently
 | 
| 675 |                 # prohibited. This test is for sanity/safety in case it's
 | |
| 676 |                 # required after that changes.
 | |
| 677 | if len(self.parents) > 1: | |
| 678 | ie.revision = None | |
| 2871.1.3
by Robert Collins * The CommitBuilder method ``record_entry_contents`` now returns summary | 679 | delta, version_recorded = self.builder.record_entry_contents( | 
| 2871.1.4
by Robert Collins Merge bzr.dev. | 680 | ie, self.parent_invs, path, self.basis_tree, None) | 
| 2871.1.3
by Robert Collins * The CommitBuilder method ``record_entry_contents`` now returns summary | 681 | if version_recorded: | 
| 2840.1.1
by Ian Clatworthy faster pointless commit detection (Robert Collins) | 682 | self.any_entries_changed = True | 
| 2903.2.10
by Martin Pool make Commit.basis_delta private | 683 | if delta: self._basis_delta.append(delta) | 
| 2541.1.1
by Ian Clatworthy Refactor commit.commit() to walk the working inventory once/less | 684 | |
| 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 | 685 | def _report_and_accumulate_deletes(self): | 
| 2903.2.6
by Martin Pool Remove unnecessary double handling of deletions | 686 |         # XXX: Could the list of deleted paths and ids be instead taken from
 | 
| 687 |         # _populate_from_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 | 688 | deleted_ids = set(self.basis_inv._byid.keys()) - \ | 
| 689 | set(self.builder.new_inventory._byid.keys()) | |
| 690 | if deleted_ids: | |
| 2840.1.1
by Ian Clatworthy faster pointless commit detection (Robert Collins) | 691 | self.any_entries_deleted = True | 
| 2921.4.3
by Robert Collins Remove more basis inventory usage. | 692 | 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 | 693 | for file_id in deleted_ids] | 
| 694 | deleted.sort() | |
| 695 |             # XXX: this is not quite directory-order sorting
 | |
| 696 | for path, file_id in deleted: | |
| 2903.2.10
by Martin Pool make Commit.basis_delta private | 697 | self._basis_delta.append((path, None, file_id, None)) | 
| 2903.2.8
by Martin Pool More efficient reporting of deletions from a large tree during commit | 698 | self.reporter.deleted(path) | 
| 1551.7.24
by Aaron Bentley Ensure commit respects file spec when committing removals | 699 | |
| 2564.2.7
by Ian Clatworthy Clean-up comments and make use of self.builder.record_root_entry more explicit | 700 | def _populate_from_inventory(self, specific_files): | 
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 701 | """Populate the CommitBuilder by walking the working tree inventory.""" | 
| 702 | if self.strict: | |
| 703 |             # raise an exception as soon as we find a single unknown.
 | |
| 704 | for unknown in self.work_tree.unknowns(): | |
| 705 | raise StrictCommitFailed() | |
| 706 | ||
| 2789.2.11
by Ian Clatworthy remove more reporting stuff | 707 | report_changes = self.reporter.is_verbose() | 
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 708 | deleted_ids = [] | 
| 2938.3.2
by Robert Collins Review feedback. | 709 |         # A tree of paths that have been deleted. E.g. if foo/bar has been
 | 
| 710 |         # deleted, then we have {'foo':{'bar':{}}}
 | |
| 2938.3.1
by Robert Collins * Commit with many automatically found deleted paths no longer performs | 711 | deleted_paths = {} | 
| 2921.4.5
by Robert Collins Remove an unnecessary assertion. | 712 |         # XXX: Note that entries may have the wrong kind because the entry does
 | 
| 713 |         # not reflect the status on disk.
 | |
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 714 | work_inv = self.work_tree.inventory | 
| 2825.7.1
by Robert Collins * Partial commits are now approximately 40% faster by walking over the | 715 | entries = work_inv.iter_entries_by_dir( | 
| 716 | specific_file_ids=self.specific_file_ids, yield_parents=True) | |
| 2564.2.6
by Ian Clatworthy Incorporate feedback from abentley | 717 | for path, existing_ie in entries: | 
| 718 | file_id = existing_ie.file_id | |
| 719 | name = existing_ie.name | |
| 720 | parent_id = existing_ie.parent_id | |
| 721 | kind = existing_ie.kind | |
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 722 | if kind == 'directory': | 
| 2564.2.2
by Ian Clatworthy incorporate feedback from abentley | 723 | self._next_progress_entry() | 
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 724 |             # 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 | 725 |             # The deleted path ids are also recorded so they can be explicitly
 | 
| 726 |             # unversioned later.
 | |
| 727 | if deleted_paths: | |
| 728 | path_segments = splitpath(path) | |
| 729 | deleted_dict = deleted_paths | |
| 730 | for segment in path_segments: | |
| 731 | deleted_dict = deleted_dict.get(segment, None) | |
| 732 | if not deleted_dict: | |
| 2938.3.2
by Robert Collins Review feedback. | 733 |                         # We either took a path not present in the dict
 | 
| 734 |                         # (deleted_dict was None), or we've reached an empty
 | |
| 735 |                         # 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 | 736 |                         break
 | 
| 737 | else: | |
| 738 | deleted_dict = None | |
| 739 | if deleted_dict is not None: | |
| 740 |                     # the path has a deleted parent, do not add it.
 | |
| 741 |                     continue
 | |
| 2776.4.7
by Robert Collins Remove another stat by using path_content_summary to avoid a has_filename call. | 742 | content_summary = self.work_tree.path_content_summary(path) | 
| 2938.3.1
by Robert Collins * Commit with many automatically found deleted paths no longer performs | 743 |             # Note that when a filter of specific files is given, we must only
 | 
| 744 |             # skip/record deleted files matching that filter.
 | |
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 745 | if not specific_files or is_inside_any(specific_files, path): | 
| 2776.4.7
by Robert Collins Remove another stat by using path_content_summary to avoid a has_filename call. | 746 | if content_summary[0] == 'missing': | 
| 2938.3.1
by Robert Collins * Commit with many automatically found deleted paths no longer performs | 747 | if not deleted_paths: | 
| 748 |                         # path won't have been split yet.
 | |
| 749 | path_segments = splitpath(path) | |
| 750 | deleted_dict = deleted_paths | |
| 751 | for segment in path_segments: | |
| 752 | deleted_dict = deleted_dict.setdefault(segment, {}) | |
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 753 | self.reporter.missing(path) | 
| 754 | deleted_ids.append(file_id) | |
| 755 |                     continue
 | |
| 2776.4.2
by Robert Collins nuke _read_tree_state and snapshot from inventory, moving responsibility into the commit builder. | 756 |             # TODO: have the builder do the nested commit just-in-time IF and
 | 
| 757 |             # only if needed.
 | |
| 2776.4.4
by Robert Collins Move content summary generation outside of record_entry_contents. | 758 | if content_summary[0] == 'tree-reference': | 
| 759 |                 # enforce repository nested tree policy.
 | |
| 760 | if (not self.work_tree.supports_tree_reference() or | |
| 761 |                     # repository does not support it either.
 | |
| 2776.4.6
by Robert Collins Fixup various commit test failures falling out from the other commit changes. | 762 | not self.branch.repository._format.supports_tree_reference): | 
| 2776.4.4
by Robert Collins Move content summary generation outside of record_entry_contents. | 763 | content_summary = ('directory',) + content_summary[1:] | 
| 764 | kind = content_summary[0] | |
| 765 |             # TODO: specific_files filtering before nested tree processing
 | |
| 2776.4.6
by Robert Collins Fixup various commit test failures falling out from the other commit changes. | 766 | if kind == 'tree-reference': | 
| 2776.4.15
by Robert Collins Put checking for recursive commits back to the commit driver, not commit builder. | 767 | if self.recursive == 'down': | 
| 2776.4.6
by Robert Collins Fixup various commit test failures falling out from the other commit changes. | 768 | nested_revision_id = self._commit_nested_tree( | 
| 769 | file_id, path) | |
| 770 | content_summary = content_summary[:3] + ( | |
| 771 | nested_revision_id,) | |
| 772 | else: | |
| 773 | content_summary = content_summary[:3] + ( | |
| 774 | self.work_tree.get_reference_revision(file_id),) | |
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 775 | |
| 776 |             # Record an entry for this item
 | |
| 777 |             # Note: I don't particularly want to have the existing_ie
 | |
| 778 |             # parameter but the test suite currently (28-Jun-07) breaks
 | |
| 779 |             # 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. | 780 | definitely_changed = kind != existing_ie.kind | 
| 2789.2.12
by Ian Clatworthy reduce conditionals | 781 | self._record_entry(path, file_id, specific_files, kind, name, | 
| 2592.3.140
by Robert Collins Merge bzr.dev. | 782 | parent_id, definitely_changed, existing_ie, report_changes, | 
| 783 | content_summary) | |
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 784 | |
| 785 |         # Unversion IDs that were found to be deleted
 | |
| 786 | self.work_tree.unversion(deleted_ids) | |
| 787 | ||
| 2564.2.3
by Ian Clatworthy more abentley feedback: use get_nested_tree and include file_id | 788 | def _commit_nested_tree(self, file_id, path): | 
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 789 |         "Commit a nested tree."
 | 
| 2564.2.3
by Ian Clatworthy more abentley feedback: use get_nested_tree and include file_id | 790 | sub_tree = self.work_tree.get_nested_tree(file_id, path) | 
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 791 |         # FIXME: be more comprehensive here:
 | 
| 792 |         # this works when both trees are in --trees repository,
 | |
| 793 |         # but when both are bound to a different repository,
 | |
| 794 |         # it fails; a better way of approaching this is to 
 | |
| 795 |         # finally implement the explicit-caches approach design
 | |
| 796 |         # a while back - RBC 20070306.
 | |
| 2665.5.2
by Aaron Bentley Switch commit and merge to Repository.has_same_location | 797 | if sub_tree.branch.repository.has_same_location( | 
| 798 | self.work_tree.branch.repository): | |
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 799 | sub_tree.branch.repository = \ | 
| 800 | self.work_tree.branch.repository | |
| 801 | try: | |
| 2776.4.6
by Robert Collins Fixup various commit test failures falling out from the other commit changes. | 802 | 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. | 803 | recursive=self.recursive, | 
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 804 | message_callback=self.message_callback, | 
| 805 | timestamp=self.timestamp, timezone=self.timezone, | |
| 806 | committer=self.committer, | |
| 807 | allow_pointless=self.allow_pointless, | |
| 808 | strict=self.strict, verbose=self.verbose, | |
| 809 | local=self.local, reporter=self.reporter) | |
| 810 | except errors.PointlessCommit: | |
| 2776.4.6
by Robert Collins Fixup various commit test failures falling out from the other commit changes. | 811 | return self.work_tree.get_reference_revision(file_id) | 
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 812 | |
| 813 | def _record_entry(self, path, file_id, specific_files, kind, name, | |
| 2592.3.140
by Robert Collins Merge bzr.dev. | 814 | parent_id, definitely_changed, existing_ie, report_changes, | 
| 815 | content_summary): | |
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 816 |         "Record the new inventory entry for a path if any."
 | 
| 817 |         # mutter('check %s {%s}', path, file_id)
 | |
| 2825.7.1
by Robert Collins * Partial commits are now approximately 40% faster by walking over the | 818 |         # mutter('%s selected for commit', path)
 | 
| 819 | if definitely_changed or existing_ie is None: | |
| 2921.4.4
by Robert Collins Minor import cleanup in commit.py. | 820 | ie = make_entry(kind, name, parent_id, file_id) | 
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 821 | else: | 
| 2825.7.1
by Robert Collins * Partial commits are now approximately 40% faster by walking over the | 822 | ie = existing_ie.copy() | 
| 823 | ie.revision = None | |
| 2871.1.3
by Robert Collins * The CommitBuilder method ``record_entry_contents`` now returns summary | 824 | delta, version_recorded = self.builder.record_entry_contents(ie, | 
| 2871.1.4
by Robert Collins Merge bzr.dev. | 825 | self.parent_invs, path, self.work_tree, content_summary) | 
| 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 | 826 | if delta: | 
| 2903.2.10
by Martin Pool make Commit.basis_delta private | 827 | self._basis_delta.append(delta) | 
| 2871.1.3
by Robert Collins * The CommitBuilder method ``record_entry_contents`` now returns summary | 828 | if version_recorded: | 
| 2843.1.1
by Ian Clatworthy Faster partial commits by walking less data (Robert Collins) | 829 | self.any_entries_changed = True | 
| 2825.7.1
by Robert Collins * Partial commits are now approximately 40% faster by walking over the | 830 | if report_changes: | 
| 831 | self._report_change(ie, path) | |
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 832 | return ie | 
| 833 | ||
| 834 | def _report_change(self, ie, path): | |
| 835 | """Report a change to the user. | |
| 836 | ||
| 837 |         The change that has occurred is described relative to the basis
 | |
| 838 |         inventory.
 | |
| 839 |         """
 | |
| 840 | if (self.basis_inv.has_id(ie.file_id)): | |
| 841 | basis_ie = self.basis_inv[ie.file_id] | |
| 842 | else: | |
| 843 | basis_ie = None | |
| 844 | change = ie.describe_change(basis_ie, ie) | |
| 845 | if change in (InventoryEntry.RENAMED, | |
| 846 | InventoryEntry.MODIFIED_AND_RENAMED): | |
| 847 | old_path = self.basis_inv.id2path(ie.file_id) | |
| 848 | self.reporter.renamed(change, old_path, path) | |
| 849 | else: | |
| 850 | self.reporter.snapshot_change(change, path) | |
| 851 | ||
| 2564.2.2
by Ian Clatworthy incorporate feedback from abentley | 852 | def _set_progress_stage(self, name, entries_title=None): | 
| 2531.1.2
by Ian Clatworthy Improved progress reporting for commit | 853 | """Set the progress stage and emit an update to the progress bar.""" | 
| 854 | self.pb_stage_name = name | |
| 855 | self.pb_stage_count += 1 | |
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 856 | self.pb_entries_title = entries_title | 
| 857 | if entries_title is not None: | |
| 2531.1.2
by Ian Clatworthy Improved progress reporting for commit | 858 | self.pb_entries_count = 0 | 
| 859 | self.pb_entries_total = '?' | |
| 860 | self._emit_progress() | |
| 861 | ||
| 2564.2.2
by Ian Clatworthy incorporate feedback from abentley | 862 | def _next_progress_entry(self): | 
| 863 | """Emit an update to the progress bar and increment the entry count.""" | |
| 2531.1.2
by Ian Clatworthy Improved progress reporting for commit | 864 | self.pb_entries_count += 1 | 
| 865 | self._emit_progress() | |
| 866 | ||
| 867 | def _emit_progress(self): | |
| 2564.2.1
by Ian Clatworthy refactor commit to support alternative population meothds | 868 | if self.pb_entries_title: | 
| 869 | if self.pb_entries_total == '?': | |
| 870 | text = "%s [%s %d] - Stage" % (self.pb_stage_name, | |
| 871 | self.pb_entries_title, self.pb_entries_count) | |
| 872 | else: | |
| 873 | text = "%s [%s %d/%s] - Stage" % (self.pb_stage_name, | |
| 874 | self.pb_entries_title, self.pb_entries_count, | |
| 875 | str(self.pb_entries_total)) | |
| 2531.1.2
by Ian Clatworthy Improved progress reporting for commit | 876 | else: | 
| 877 | text = "%s - Stage" % (self.pb_stage_name) | |
| 878 | self.pb.update(text, self.pb_stage_count, self.pb_stage_total) | |
| 879 |