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 | ||
| 1248
by Martin Pool - new weave based cleanup [broken] | 18 | # The newly committed revision is going to have a shape corresponding
 | 
| 19 | # to that of the working inventory.  Files that are not in the
 | |
| 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
 | |
| 28 | # recorded.  For each parent revision inventory, we check to see what
 | |
| 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 ( | 
| 60 | errors, | |
| 1959.4.2
by Aaron Bentley Merge bzr.dev | 61 | inventory, | 
| 1551.8.30
by Aaron Bentley Tweak from review comments | 62 | tree, | 
| 63 |     )
 | |
| 2246.1.3
by Robert Collins New branch hooks: post_push, post_pull, post_commit, post_uncommit. These | 64 | 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. | 65 | import bzrlib.config | 
| 1264
by Martin Pool - Raise a better error from commit when a parent is absent | 66 | from bzrlib.errors import (BzrError, PointlessCommit, | 
| 1185.16.65
by mbp at sourcefrog - new commit --strict option | 67 | ConflictsInTree, | 
| 68 |                            StrictCommitFailed
 | |
| 1264
by Martin Pool - Raise a better error from commit when a parent is absent | 69 |                            )
 | 
| 1740.3.10
by Jelmer Vernooij Fix some minor issues pointed out by j-a-m. | 70 | from bzrlib.osutils import (kind_marker, isdir,isfile, is_inside_any, | 
| 71 | is_inside_or_parent_of_any, | |
| 72 | quotefn, sha_file, split_lines) | |
| 1442.1.62
by Robert Collins Allow creation of testaments from uncommitted data, and use that to get signatures before committing revisions. | 73 | from bzrlib.testament import Testament | 
| 1264
by Martin Pool - Raise a better error from commit when a parent is absent | 74 | from bzrlib.trace import mutter, note, warning | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 75 | from bzrlib.xml5 import serializer_v5 | 
| 1731.1.33
by Aaron Bentley Revert no-special-root changes | 76 | from bzrlib.inventory import Inventory, InventoryEntry | 
| 1910.2.9
by Aaron Bentley Inroduce assertDeprecated, and use it to test old commitbuilder API | 77 | from bzrlib import symbol_versioning | 
| 1773.4.1
by Martin Pool Add pyflakes makefile target; fix many warnings | 78 | from bzrlib.symbol_versioning import (deprecated_passed, | 
| 1773.4.3
by Martin Pool [merge] bzr.dev | 79 | deprecated_function, | 
| 1773.4.1
by Martin Pool Add pyflakes makefile target; fix many warnings | 80 | DEPRECATED_PARAMETER) | 
| 1508.1.6
by Robert Collins Move Branch.unknowns() to WorkingTree. | 81 | from bzrlib.workingtree import WorkingTree | 
| 2094.3.5
by John Arbash Meinel Fix imports to ensure modules are loaded before they are used | 82 | import bzrlib.ui | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 83 | |
| 84 | ||
| 85 | class NullCommitReporter(object): | |
| 86 | """I report on progress of a commit.""" | |
| 1185.12.8
by Aaron Bentley Fixed commit so all output comes though CommitReporter | 87 | |
| 88 | def snapshot_change(self, change, path): | |
| 89 |         pass
 | |
| 90 | ||
| 91 | def completed(self, revno, rev_id): | |
| 92 |         pass
 | |
| 93 | ||
| 94 | def deleted(self, file_id): | |
| 95 |         pass
 | |
| 96 | ||
| 97 | def escaped(self, escape_count, message): | |
| 98 |         pass
 | |
| 99 | ||
| 100 | def missing(self, path): | |
| 101 |         pass
 | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 102 | |
| 1668.1.5
by Martin Pool [broken] fix up display of files changed by a commit | 103 | def renamed(self, change, old_path, new_path): | 
| 104 |         pass
 | |
| 105 | ||
| 1508.1.6
by Robert Collins Move Branch.unknowns() to WorkingTree. | 106 | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 107 | class ReportCommitToLog(NullCommitReporter): | 
| 1185.12.8
by Aaron Bentley Fixed commit so all output comes though CommitReporter | 108 | |
| 1668.1.5
by Martin Pool [broken] fix up display of files changed by a commit | 109 |     # this may be more useful if 'note' was replaced by an overridable
 | 
| 110 |     # method on self, which would allow more trivial subclassing.
 | |
| 111 |     # alternative, a callable could be passed in, allowing really trivial
 | |
| 112 |     # reuse for some uis. RBC 20060511
 | |
| 113 | ||
| 1185.12.8
by Aaron Bentley Fixed commit so all output comes though CommitReporter | 114 | def snapshot_change(self, change, path): | 
| 1616.1.4
by Martin Pool Verbose commit shouldn't talk about every unchanged file. | 115 | if change == 'unchanged': | 
| 116 |             return
 | |
| 1731.1.45
by Aaron Bentley Merge bzr.dev | 117 | if change == 'added' and path == '': | 
| 118 |             return
 | |
| 1185.12.8
by Aaron Bentley Fixed commit so all output comes though CommitReporter | 119 | note("%s %s", change, path) | 
| 120 | ||
| 121 | def completed(self, revno, rev_id): | |
| 1607.1.5
by Robert Collins Make commit verbose mode work!. | 122 | note('Committed revision %d.', revno) | 
| 1185.12.8
by Aaron Bentley Fixed commit so all output comes though CommitReporter | 123 | |
| 124 | def deleted(self, file_id): | |
| 125 | note('deleted %s', file_id) | |
| 126 | ||
| 127 | def escaped(self, escape_count, message): | |
| 128 | note("replaced %d control characters in message", escape_count) | |
| 129 | ||
| 130 | def missing(self, path): | |
| 131 | note('missing %s', path) | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 132 | |
| 1668.1.5
by Martin Pool [broken] fix up display of files changed by a commit | 133 | def renamed(self, change, old_path, new_path): | 
| 134 | note('%s %s => %s', change, old_path, new_path) | |
| 135 | ||
| 1508.1.6
by Robert Collins Move Branch.unknowns() to WorkingTree. | 136 | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 137 | class Commit(object): | 
| 138 | """Task of committing a new revision. | |
| 139 | ||
| 140 |     This is a MethodObject: it accumulates state as the commit is
 | |
| 141 |     prepared, and then it is discarded.  It doesn't represent
 | |
| 142 |     historical revisions, just the act of recording a new one.
 | |
| 143 | ||
| 144 |             missing_ids
 | |
| 145 |             Modified to hold a list of files that have been deleted from
 | |
| 146 |             the working directory; these should be removed from the
 | |
| 147 |             working inventory.
 | |
| 485
by Martin Pool - move commit code into its own module | 148 |     """
 | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 149 | def __init__(self, | 
| 1442.1.60
by Robert Collins gpg sign commits if the policy says we need to | 150 | reporter=None, | 
| 151 | config=None): | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 152 | if reporter is not None: | 
| 153 | self.reporter = reporter | |
| 154 | else: | |
| 155 | self.reporter = NullCommitReporter() | |
| 1442.1.60
by Robert Collins gpg sign commits if the policy says we need to | 156 | if config is not None: | 
| 157 | self.config = config | |
| 158 | else: | |
| 159 | self.config = None | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 160 | |
| 161 | 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) | 162 | message=None, | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 163 | timestamp=None, | 
| 164 | timezone=None, | |
| 165 | committer=None, | |
| 166 | specific_files=None, | |
| 167 | rev_id=None, | |
| 1276
by Martin Pool - make Branch.commit accept (and ignore) verbose argument | 168 | allow_pointless=True, | 
| 1185.16.65
by mbp at sourcefrog - new commit --strict option | 169 | strict=False, | 
| 1185.16.35
by Martin Pool - stub for revision properties | 170 | 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. | 171 | revprops=None, | 
| 1587.1.8
by Robert Collins Local commits on unbound branches fail. | 172 | working_tree=None, | 
| 1607.1.5
by Robert Collins Make commit verbose mode work!. | 173 | local=False, | 
| 174 | reporter=None, | |
| 2149.1.1
by Aaron Bentley Provide a message_callback parameter to tree.commit | 175 | config=None, | 
| 2255.2.218
by Robert Collins Make the nested tree commit smoke test be more rigourous. | 176 | message_callback=None, | 
| 177 | recursive='down'): | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 178 | """Commit working copy as a new revision. | 
| 179 | ||
| 2149.1.1
by Aaron Bentley Provide a message_callback parameter to tree.commit | 180 |         message -- the commit message (it or message_callback is required)
 | 
| 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. | 181 | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 182 |         timestamp -- if not None, seconds-since-epoch for a
 | 
| 183 |              postdated/predated commit.
 | |
| 184 | ||
| 1253
by Martin Pool - test that pointless commits are trapped | 185 |         specific_files -- If true, commit only those files.
 | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 186 | |
| 1253
by Martin Pool - test that pointless commits are trapped | 187 |         rev_id -- If set, use this as the new revision id.
 | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 188 |             Useful for test or import commands that need to tightly
 | 
| 189 |             control what revisions are assigned.  If you duplicate
 | |
| 190 |             a revision id that exists elsewhere it is your own fault.
 | |
| 191 |             If null (default), a time/random revision id is generated.
 | |
| 1253
by Martin Pool - test that pointless commits are trapped | 192 | |
| 193 |         allow_pointless -- If true (default), commit even if nothing
 | |
| 194 |             has changed and no merges are recorded.
 | |
| 1185.16.35
by Martin Pool - stub for revision properties | 195 | |
| 1185.16.65
by mbp at sourcefrog - new commit --strict option | 196 |         strict -- If true, don't allow a commit if the working tree
 | 
| 197 |             contains unknown files.
 | |
| 198 | ||
| 1185.16.35
by Martin Pool - stub for revision properties | 199 |         revprops -- Properties for new revision
 | 
| 1587.1.8
by Robert Collins Local commits on unbound branches fail. | 200 |         :param local: Perform a local only commit.
 | 
| 2255.2.218
by Robert Collins Make the nested tree commit smoke test be more rigourous. | 201 |         :param recursive: If set to 'down', commit in any subtrees that have
 | 
| 202 |             pending changes of any sort during this commit.
 | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 203 |         """
 | 
| 1285
by Martin Pool - fix bug in committing files that are renamed but not modified | 204 | mutter('preparing to commit') | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 205 | |
| 2367.2.1
by Robert Collins Remove bzrlib 0.8 compatability where it was making the code unclear or messy. (Robert Collins) | 206 | if working_tree is None: | 
| 207 | 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. | 208 | else: | 
| 209 | self.work_tree = working_tree | |
| 210 | self.branch = self.work_tree.branch | |
| 2100.3.14
by Aaron Bentley Test workingtree4 format, prevent use with old repos | 211 | if getattr(self.work_tree, 'requires_rich_root', lambda: False)(): | 
| 212 | if not self.branch.repository.supports_rich_root(): | |
| 213 | raise errors.RootNotRich() | |
| 2149.1.1
by Aaron Bentley Provide a message_callback parameter to tree.commit | 214 | if message_callback is None: | 
| 2149.1.3
by Aaron Bentley Updates from review comments | 215 | if message is not None: | 
| 216 | if isinstance(message, str): | |
| 217 | message = message.decode(bzrlib.user_encoding) | |
| 218 | message_callback = lambda x: message | |
| 2149.1.1
by Aaron Bentley Provide a message_callback parameter to tree.commit | 219 | else: | 
| 2149.1.3
by Aaron Bentley Updates from review comments | 220 | raise BzrError("The message or message_callback keyword" | 
| 221 | " 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. | 222 | |
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 223 | self.bound_branch = None | 
| 1587.1.9
by Robert Collins Local commits do no alter or access the master branch. | 224 | self.local = local | 
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 225 | self.master_branch = None | 
| 1614.1.1
by Aaron Bentley Fixed master locking in commit | 226 | self.master_locked = False | 
| 1740.3.10
by Jelmer Vernooij Fix some minor issues pointed out by j-a-m. | 227 | self.rev_id = None | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 228 | self.specific_files = specific_files | 
| 1194
by Martin Pool - [BROKEN] more progress of commit into weaves | 229 | self.allow_pointless = allow_pointless | 
| 2255.2.218
by Robert Collins Make the nested tree commit smoke test be more rigourous. | 230 | self.recursive = recursive | 
| 231 | self.revprops = revprops | |
| 232 | self.message_callback = message_callback | |
| 233 | self.timestamp = timestamp | |
| 234 | self.timezone = timezone | |
| 235 | self.committer = committer | |
| 236 | self.specific_files = specific_files | |
| 237 | self.strict = strict | |
| 238 | self.verbose = verbose | |
| 239 | self.local = local | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 240 | |
| 1607.1.5
by Robert Collins Make commit verbose mode work!. | 241 | if reporter is None and self.reporter is None: | 
| 242 | self.reporter = NullCommitReporter() | |
| 1607.1.8
by Robert Collins Integrate latest bzr.dev. | 243 | elif reporter is not None: | 
| 1607.1.5
by Robert Collins Make commit verbose mode work!. | 244 | self.reporter = reporter | 
| 245 | ||
| 1587.1.6
by Robert Collins Update bound branch implementation to 0.8. | 246 | self.work_tree.lock_write() | 
| 1666.1.18
by Robert Collins Add a progress bar during commit operations. | 247 | self.pb = bzrlib.ui.ui_factory.nested_progress_bar() | 
| 2255.2.25
by John Arbash Meinel DirstateRevisionTrees need to be read_locked before they will work as BasisTree | 248 | self.basis_tree = self.work_tree.basis_tree() | 
| 249 | self.basis_tree.lock_read() | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 250 | try: | 
| 1666.1.18
by Robert Collins Add a progress bar during commit operations. | 251 |             # Cannot commit with conflicts present.
 | 
| 252 | if len(self.work_tree.conflicts())>0: | |
| 253 | raise ConflictsInTree | |
| 254 | ||
| 1587.1.6
by Robert Collins Update bound branch implementation to 0.8. | 255 |             # 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 | 256 | self._check_bound_branch() | 
| 257 | ||
| 1587.1.6
by Robert Collins Update bound branch implementation to 0.8. | 258 |             # check for out of date working trees
 | 
| 1908.7.6
by Robert Collins Deprecate WorkingTree.last_revision. | 259 | try: | 
| 260 | first_tree_parent = self.work_tree.get_parent_ids()[0] | |
| 261 | except IndexError: | |
| 262 |                 # if there are no parents, treat our parent as 'None'
 | |
| 263 |                 # this is so that we still consier the master branch
 | |
| 264 |                 # - in a checkout scenario the tree may have no
 | |
| 265 |                 # parents but the branch may do.
 | |
| 2230.3.51
by Aaron Bentley Store revno for Branch6, set_last_revision -> set_last_revision_info | 266 | first_tree_parent = bzrlib.revision.NULL_REVISION | 
| 267 | old_revno, master_last = self.master_branch.last_revision_info() | |
| 268 | if master_last != first_tree_parent: | |
| 269 | if master_last != bzrlib.revision.NULL_REVISION: | |
| 270 | raise errors.OutOfDateTree(self.work_tree) | |
| 271 | if self.branch.repository.has_revision(first_tree_parent): | |
| 272 | new_revno = old_revno + 1 | |
| 273 | else: | |
| 274 |                 # ghost parents never appear in revision history.
 | |
| 275 | new_revno = 1 | |
| 1587.1.6
by Robert Collins Update bound branch implementation to 0.8. | 276 | if strict: | 
| 277 |                 # raise an exception as soon as we find a single unknown.
 | |
| 278 | for unknown in self.work_tree.unknowns(): | |
| 279 | raise StrictCommitFailed() | |
| 1740.3.7
by Jelmer Vernooij Move committer, log, revprops, timestamp and timezone to CommitBuilder. | 280 | |
| 1587.1.6
by Robert Collins Update bound branch implementation to 0.8. | 281 | if self.config is None: | 
| 1770.2.9
by Aaron Bentley Add Branch.get_config, update BranchConfig() callers | 282 | self.config = self.branch.get_config() | 
| 1587.1.6
by Robert Collins Update bound branch implementation to 0.8. | 283 | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 284 | self.work_inv = self.work_tree.inventory | 
| 285 | self.basis_inv = self.basis_tree.inventory | |
| 1551.8.29
by Aaron Bentley Stop accepting non-existant files in commit (#50793) | 286 | if specific_files is not None: | 
| 287 |                 # Ensure specified files are versioned
 | |
| 288 |                 # (We don't actually need the ids here)
 | |
| 2255.2.218
by Robert Collins Make the nested tree commit smoke test be more rigourous. | 289 |                 # XXX: Dont we have filter_unversioned to do this more
 | 
| 290 |                 # cheaply?
 | |
| 291 | tree.find_ids_across_trees(specific_files, | |
| 1551.8.29
by Aaron Bentley Stop accepting non-existant files in commit (#50793) | 292 | [self.basis_tree, self.work_tree]) | 
| 1666.1.18
by Robert Collins Add a progress bar during commit operations. | 293 |             # one to finish, one for rev and inventory, and one for each
 | 
| 294 |             # inventory entry, and the same for the new inventory.
 | |
| 295 |             # note that this estimate is too long when we do a partial tree
 | |
| 296 |             # commit which excludes some new files from being considered.
 | |
| 297 |             # The estimate is corrected when we populate the new inv.
 | |
| 1740.3.10
by Jelmer Vernooij Fix some minor issues pointed out by j-a-m. | 298 | self.pb_total = len(self.work_inv) + 5 | 
| 1666.1.18
by Robert Collins Add a progress bar during commit operations. | 299 | self.pb_count = 0 | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 300 | |
| 1223
by Martin Pool - store inventories in weave | 301 | self._gather_parents() | 
| 1344
by Martin Pool - disallow selected-file commit of merges | 302 | if len(self.parents) > 1 and self.specific_files: | 
| 1704.2.11
by Martin Pool Handle 'bzr commit DIR' when dir contains pending merges. | 303 | raise NotImplementedError('selected-file commit of merges is not supported yet: files %r', | 
| 304 | self.specific_files) | |
| 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. | 305 | |
| 2255.2.218
by Robert Collins Make the nested tree commit smoke test be more rigourous. | 306 | self.builder = self.branch.get_commit_builder(self.parents, | 
| 1740.3.7
by Jelmer Vernooij Move committer, log, revprops, timestamp and timezone to CommitBuilder. | 307 | self.config, timestamp, timezone, committer, revprops, rev_id) | 
| 1284
by Martin Pool - in commit, avoid reading basis inventory twice | 308 | |
| 1251
by Martin Pool - fix up commit in directory with some deleted files | 309 | self._remove_deleted() | 
| 1092.2.22
by Robert Collins text_version and name_version unification looking reasonable | 310 | self._populate_new_inv() | 
| 1248
by Martin Pool - new weave based cleanup [broken] | 311 | self._report_deletes() | 
| 1245
by Martin Pool doc | 312 | |
| 1910.2.37
by Aaron Bentley Handle empty commits, fix test | 313 | self._check_pointless() | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 314 | |
| 1666.1.22
by Robert Collins Rename Commit._update to _emit_progress_update. | 315 | self._emit_progress_update() | 
| 1910.2.3
by Aaron Bentley All tests pass | 316 |             # TODO: Now the new inventory is known, check for conflicts and
 | 
| 317 |             # prompt the user for a commit message.
 | |
| 318 |             # ADHB 2006-08-08: If this is done, populate_new_inv should not add
 | |
| 319 |             # weave lines, because nothing should be recorded until it is known
 | |
| 320 |             # that commit will succeed.
 | |
| 1740.3.8
by Jelmer Vernooij Move make_revision() to commit builder. | 321 | self.builder.finish_inventory() | 
| 1666.1.22
by Robert Collins Rename Commit._update to _emit_progress_update. | 322 | self._emit_progress_update() | 
| 2149.1.3
by Aaron Bentley Updates from review comments | 323 | message = message_callback(self) | 
| 2149.1.1
by Aaron Bentley Provide a message_callback parameter to tree.commit | 324 | assert isinstance(message, unicode), type(message) | 
| 325 | self.message = message | |
| 326 | self._escape_commit_message() | |
| 327 | ||
| 1740.3.9
by Jelmer Vernooij Make the commit message the first argument of CommitBuilder.commit(). | 328 | self.rev_id = self.builder.commit(self.message) | 
| 1740.3.10
by Jelmer Vernooij Fix some minor issues pointed out by j-a-m. | 329 | self._emit_progress_update() | 
| 1587.1.7
by Robert Collins Commit revision data locally first for bound branch commits. | 330 |             # revision data is in the local branch now.
 | 
| 1587.1.6
by Robert Collins Update bound branch implementation to 0.8. | 331 | |
| 1587.1.7
by Robert Collins Commit revision data locally first for bound branch commits. | 332 |             # upload revision data to the master.
 | 
| 1759.2.1
by Jelmer Vernooij Fix some types (found using aspell). | 333 |             # this will propagate merged revisions too if needed.
 | 
| 1587.1.7
by Robert Collins Commit revision data locally first for bound branch commits. | 334 | if self.bound_branch: | 
| 335 | self.master_branch.repository.fetch(self.branch.repository, | |
| 336 | revision_id=self.rev_id) | |
| 337 |                 # now the master has the revision data
 | |
| 338 |                 # 'commit' to the master first so a timeout here causes the local
 | |
| 339 |                 # branch to be out of date
 | |
| 2230.3.51
by Aaron Bentley Store revno for Branch6, set_last_revision -> set_last_revision_info | 340 | self.master_branch.set_last_revision_info(new_revno, | 
| 341 | self.rev_id) | |
| 1587.1.7
by Robert Collins Commit revision data locally first for bound branch commits. | 342 | |
| 343 |             # and now do the commit locally.
 | |
| 2230.3.51
by Aaron Bentley Store revno for Branch6, set_last_revision -> set_last_revision_info | 344 | self.branch.set_last_revision_info(new_revno, self.rev_id) | 
| 1587.1.6
by Robert Collins Update bound branch implementation to 0.8. | 345 | |
| 2041.1.5
by John Arbash Meinel CommitBuilder.get_tree => CommitBuilder.revision_tree | 346 | rev_tree = self.builder.revision_tree() | 
| 2041.1.2
by John Arbash Meinel Update WorkingTree.set_parent_trees() to directly cache inv. | 347 | self.work_tree.set_parent_trees([(self.rev_id, rev_tree)]) | 
| 1587.1.6
by Robert Collins Update bound branch implementation to 0.8. | 348 |             # now the work tree is up to date with the branch
 | 
| 349 | ||
| 2230.3.51
by Aaron Bentley Store revno for Branch6, set_last_revision -> set_last_revision_info | 350 | self.reporter.completed(new_revno, self.rev_id) | 
| 2246.1.3
by Robert Collins New branch hooks: post_push, post_pull, post_commit, post_uncommit. These | 351 |             # old style commit hooks - should be deprecated ? (obsoleted in
 | 
| 352 |             # 0.15)
 | |
| 1472
by Robert Collins post commit hook, first pass implementation | 353 | if self.config.post_commit() is not None: | 
| 354 | hooks = self.config.post_commit().split(' ') | |
| 355 |                 # this would be nicer with twisted.python.reflect.namedAny
 | |
| 356 | for hook in hooks: | |
| 357 | result = eval(hook + '(branch, rev_id)', | |
| 358 | {'branch':self.branch, | |
| 359 | 'bzrlib':bzrlib, | |
| 360 | 'rev_id':self.rev_id}) | |
| 2246.1.3
by Robert Collins New branch hooks: post_push, post_pull, post_commit, post_uncommit. These | 361 |             # new style commit hooks:
 | 
| 362 | if not self.bound_branch: | |
| 363 | hook_master = self.branch | |
| 364 | hook_local = None | |
| 365 | else: | |
| 366 | hook_master = self.master_branch | |
| 367 | hook_local = self.branch | |
| 368 |             # With bound branches, when the master is behind the local branch,
 | |
| 369 |             # the 'old_revno' and old_revid values here are incorrect.
 | |
| 370 |             # XXX: FIXME ^. RBC 20060206
 | |
| 371 | if self.parents: | |
| 372 | old_revid = self.parents[0] | |
| 373 | else: | |
| 374 | old_revid = bzrlib.revision.NULL_REVISION | |
| 375 | for hook in Branch.hooks['post_commit']: | |
| 376 | hook(hook_local, hook_master, old_revno, old_revid, new_revno, | |
| 377 | self.rev_id) | |
| 1666.1.22
by Robert Collins Rename Commit._update to _emit_progress_update. | 378 | self._emit_progress_update() | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 379 | finally: | 
| 1666.1.18
by Robert Collins Add a progress bar during commit operations. | 380 | self._cleanup() | 
| 1773.1.1
by Robert Collins Teach WorkingTree.commit to return the committed revision id. | 381 | return self.rev_id | 
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 382 | |
| 2044.1.1
by Robert Collins (Robert Collins) Forward merge from 0.11rc2 NEWS and performance-regression fix. | 383 | def _any_real_changes(self): | 
| 384 | """Are there real changes between new_inventory and basis? | |
| 385 | ||
| 386 |         For trees without rich roots, inv.root.revision changes every commit.
 | |
| 387 |         But if that is the only change, we want to treat it as though there
 | |
| 388 |         are *no* changes.
 | |
| 389 |         """
 | |
| 390 | new_entries = self.builder.new_inventory.iter_entries() | |
| 391 | basis_entries = self.basis_inv.iter_entries() | |
| 392 | new_path, new_root_ie = new_entries.next() | |
| 393 | basis_path, basis_root_ie = basis_entries.next() | |
| 394 | ||
| 395 |         # This is a copy of InventoryEntry.__eq__ only leaving out .revision
 | |
| 396 | def ie_equal_no_revision(this, other): | |
| 397 | return ((this.file_id == other.file_id) | |
| 398 | and (this.name == other.name) | |
| 399 | and (this.symlink_target == other.symlink_target) | |
| 400 | and (this.text_sha1 == other.text_sha1) | |
| 401 | and (this.text_size == other.text_size) | |
| 402 | and (this.text_id == other.text_id) | |
| 403 | and (this.parent_id == other.parent_id) | |
| 404 | and (this.kind == other.kind) | |
| 405 | and (this.executable == other.executable) | |
| 2255.2.220
by Robert Collins Fix failing detection of changes restricted to subtrees causing spurious pointless commit errors. | 406 | and (this.reference_revision == other.reference_revision) | 
| 2044.1.1
by Robert Collins (Robert Collins) Forward merge from 0.11rc2 NEWS and performance-regression fix. | 407 |                     )
 | 
| 408 | if not ie_equal_no_revision(new_root_ie, basis_root_ie): | |
| 409 | return True | |
| 410 | ||
| 411 | for new_ie, basis_ie in zip(new_entries, basis_entries): | |
| 412 | if new_ie != basis_ie: | |
| 413 | return True | |
| 414 | ||
| 415 |         # No actual changes present
 | |
| 416 | return False | |
| 417 | ||
| 1910.2.37
by Aaron Bentley Handle empty commits, fix test | 418 | def _check_pointless(self): | 
| 419 | if self.allow_pointless: | |
| 420 |             return
 | |
| 421 |         # A merge with no effect on files
 | |
| 422 | if len(self.parents) > 1: | |
| 423 |             return
 | |
| 424 |         # work around the fact that a newly-initted tree does differ from its
 | |
| 425 |         # basis
 | |
| 1731.1.49
by Aaron Bentley Merge bzr.dev | 426 | if len(self.basis_inv) == 0 and len(self.builder.new_inventory) == 1: | 
| 427 | raise PointlessCommit() | |
| 2044.1.1
by Robert Collins (Robert Collins) Forward merge from 0.11rc2 NEWS and performance-regression fix. | 428 |         # Shortcut, if the number of entries changes, then we obviously have
 | 
| 429 |         # a change
 | |
| 1910.2.37
by Aaron Bentley Handle empty commits, fix test | 430 | if len(self.builder.new_inventory) != len(self.basis_inv): | 
| 431 |             return
 | |
| 2044.1.1
by Robert Collins (Robert Collins) Forward merge from 0.11rc2 NEWS and performance-regression fix. | 432 |         # If length == 1, then we only have the root entry. Which means
 | 
| 433 |         # that there is no real difference (only the root could be different)
 | |
| 434 | if (len(self.builder.new_inventory) != 1 and self._any_real_changes()): | |
| 1910.2.37
by Aaron Bentley Handle empty commits, fix test | 435 |             return
 | 
| 436 | raise PointlessCommit() | |
| 437 | ||
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 438 | def _check_bound_branch(self): | 
| 439 | """Check to see if the local branch is bound. | |
| 440 | ||
| 441 |         If it is bound, then most of the commit will actually be
 | |
| 442 |         done using the remote branch as the target branch.
 | |
| 443 |         Only at the end will the local branch be updated.
 | |
| 444 |         """
 | |
| 1587.1.9
by Robert Collins Local commits do no alter or access the master branch. | 445 | if self.local and not self.branch.get_bound_location(): | 
| 446 | raise errors.LocalRequiresBoundBranch() | |
| 447 | ||
| 448 | if not self.local: | |
| 449 | self.master_branch = self.branch.get_master_branch() | |
| 450 | ||
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 451 | if not self.master_branch: | 
| 1587.1.8
by Robert Collins Local commits on unbound branches fail. | 452 |             # make this branch the reference branch for out of date checks.
 | 
| 453 | 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 | 454 |             return
 | 
| 455 | ||
| 456 |         # If the master branch is bound, we must fail
 | |
| 457 | master_bound_location = self.master_branch.get_bound_location() | |
| 458 | if master_bound_location: | |
| 1505.1.27
by John Arbash Meinel Adding tests against an sftp branch. | 459 | 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 | 460 | self.master_branch, master_bound_location) | 
| 461 | ||
| 462 |         # TODO: jam 20051230 We could automatically push local
 | |
| 463 |         #       commits to the remote branch if they would fit.
 | |
| 464 |         #       But for now, just require remote to be identical
 | |
| 465 |         #       to local.
 | |
| 466 | ||
| 467 |         # 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. | 468 | master_info = self.master_branch.last_revision_info() | 
| 469 | local_info = self.branch.last_revision_info() | |
| 470 | 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 | 471 | raise errors.BoundBranchOutOfDate(self.branch, | 
| 472 | self.master_branch) | |
| 473 | ||
| 474 |         # Now things are ready to change the master branch
 | |
| 475 |         # so grab the lock
 | |
| 476 | self.bound_branch = self.branch | |
| 477 | self.master_branch.lock_write() | |
| 1614.1.1
by Aaron Bentley Fixed master locking in commit | 478 | self.master_locked = True | 
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 479 | |
| 1666.1.18
by Robert Collins Add a progress bar during commit operations. | 480 | def _cleanup(self): | 
| 481 | """Cleanup any open locks, progress bars etc.""" | |
| 482 | cleanups = [self._cleanup_bound_branch, | |
| 2255.2.25
by John Arbash Meinel DirstateRevisionTrees need to be read_locked before they will work as BasisTree | 483 | self.basis_tree.unlock, | 
| 1666.1.18
by Robert Collins Add a progress bar during commit operations. | 484 | self.work_tree.unlock, | 
| 485 | self.pb.finished] | |
| 486 | found_exception = None | |
| 487 | for cleanup in cleanups: | |
| 488 | try: | |
| 489 | cleanup() | |
| 490 |             # we want every cleanup to run no matter what.
 | |
| 491 |             # so we have a catchall here, but we will raise the
 | |
| 492 |             # last encountered exception up the stack: and
 | |
| 493 |             # typically this will be useful enough.
 | |
| 494 | except Exception, e: | |
| 495 | found_exception = e | |
| 496 | 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. | 497 |             # 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. | 498 |             # trashed, e is our sure-to-work exception even though it loses the
 | 
| 499 |             # full traceback. XXX: RBC 20060421 perhaps we could check the
 | |
| 500 |             # exc_info and if its the same one do a plain raise otherwise 
 | |
| 501 |             # 'raise e' as we do now.
 | |
| 502 | raise e | |
| 503 | ||
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 504 | def _cleanup_bound_branch(self): | 
| 505 | """Executed at the end of a try/finally to cleanup a bound branch. | |
| 506 | ||
| 507 |         If the branch wasn't bound, this is a no-op.
 | |
| 508 |         If it was, it resents self.branch to the local branch, instead
 | |
| 509 |         of being the master.
 | |
| 510 |         """
 | |
| 511 | if not self.bound_branch: | |
| 512 |             return
 | |
| 1614.1.1
by Aaron Bentley Fixed master locking in commit | 513 | if self.master_locked: | 
| 514 | self.master_branch.unlock() | |
| 1505.1.24
by John Arbash Meinel Updated commit to handle bound branches. Included test to handle commit after merge | 515 | |
| 1390
by Robert Collins pair programming worx... merge integration and weave | 516 | def _escape_commit_message(self): | 
| 517 | """Replace xml-incompatible control characters.""" | |
| 1666.1.6
by Robert Collins Make knit the default format. | 518 |         # FIXME: RBC 20060419 this should be done by the revision
 | 
| 519 |         # serialiser not by commit. Then we can also add an unescaper
 | |
| 520 |         # in the deserializer and start roundtripping revision messages
 | |
| 521 |         # precisely. See repository_implementations/test_repository.py
 | |
| 522 | ||
| 1185.11.5
by John Arbash Meinel Merged up-to-date against mainline, still broken. | 523 |         # Python strings can include characters that can't be
 | 
| 524 |         # represented in well-formed XML; escape characters that
 | |
| 525 |         # aren't listed in the XML specification
 | |
| 526 |         # (http://www.w3.org/TR/REC-xml/#NT-Char).
 | |
| 1390
by Robert Collins pair programming worx... merge integration and weave | 527 | self.message, escape_count = re.subn( | 
| 1393.4.2
by Harald Meland Cleanup + better test of commit-msg control character escape code. | 528 | u'[^\x09\x0A\x0D\u0020-\uD7FF\uE000-\uFFFD]+', | 
| 1185.11.5
by John Arbash Meinel Merged up-to-date against mainline, still broken. | 529 | lambda match: match.group(0).encode('unicode_escape'), | 
| 1390
by Robert Collins pair programming worx... merge integration and weave | 530 | self.message) | 
| 1185.11.5
by John Arbash Meinel Merged up-to-date against mainline, still broken. | 531 | if escape_count: | 
| 1185.12.8
by Aaron Bentley Fixed commit so all output comes though CommitReporter | 532 | self.reporter.escaped(escape_count, self.message) | 
| 1223
by Martin Pool - store inventories in weave | 533 | |
| 534 | def _gather_parents(self): | |
| 1092.2.25
by Robert Collins support ghosts in commits | 535 | """Record the parents of a merge for merge detection.""" | 
| 1740.3.6
by Jelmer Vernooij Move inventory writing to the commit builder. | 536 |         # TODO: Make sure that this list doesn't contain duplicate 
 | 
| 537 |         # 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. | 538 | self.parents = self.work_tree.get_parent_ids() | 
| 2283.2.1
by John Arbash Meinel Avoid deserializing an inventory we have already parsed. | 539 | self.parent_invs = [self.basis_inv] | 
| 540 | for revision in self.parents[1:]: | |
| 1185.67.2
by Aaron Bentley Renamed Branch.storage to Branch.repository | 541 | 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. | 542 | mutter('commit parent revision {%s}', revision) | 
| 1185.67.2
by Aaron Bentley Renamed Branch.storage to Branch.repository | 543 | inventory = self.branch.repository.get_inventory(revision) | 
| 1185.65.1
by Aaron Bentley Refactored out ControlFiles and RevisionStore from _Branch | 544 | 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. | 545 | else: | 
| 546 | mutter('commit parent ghost revision {%s}', revision) | |
| 1284
by Martin Pool - in commit, avoid reading basis inventory twice | 547 | |
| 1189
by Martin Pool - BROKEN: partial support for commit into weave | 548 | def _remove_deleted(self): | 
| 1248
by Martin Pool - new weave based cleanup [broken] | 549 | """Remove deleted files from the working inventories. | 
| 550 | ||
| 551 |         This is done prior to taking the working inventory as the
 | |
| 552 |         basis for the new committed inventory.
 | |
| 553 | ||
| 554 |         This returns true if any files
 | |
| 555 |         *that existed in the basis inventory* were deleted.
 | |
| 556 |         Files that were added and deleted
 | |
| 557 |         in the working copy don't matter.
 | |
| 558 |         """
 | |
| 1254
by Martin Pool - fix handling of selective commit with deleted files | 559 | specific = self.specific_files | 
| 560 | deleted_ids = [] | |
| 1988.2.5
by Robert Collins When an entire subtree has been deleted, commit will now report that | 561 | deleted_paths = set() | 
| 1254
by Martin Pool - fix handling of selective commit with deleted files | 562 | for path, ie in self.work_inv.iter_entries(): | 
| 1988.2.5
by Robert Collins When an entire subtree has been deleted, commit will now report that | 563 | if is_inside_any(deleted_paths, path): | 
| 564 |                 # The tree will delete the required ids recursively.
 | |
| 565 |                 continue
 | |
| 1254
by Martin Pool - fix handling of selective commit with deleted files | 566 | if specific and not is_inside_any(specific, path): | 
| 567 |                 continue
 | |
| 568 | if not self.work_tree.has_filename(path): | |
| 1988.2.5
by Robert Collins When an entire subtree has been deleted, commit will now report that | 569 | deleted_paths.add(path) | 
| 1185.12.8
by Aaron Bentley Fixed commit so all output comes though CommitReporter | 570 | self.reporter.missing(path) | 
| 1988.2.5
by Robert Collins When an entire subtree has been deleted, commit will now report that | 571 | deleted_ids.append(ie.file_id) | 
| 572 | self.work_tree.unversion(deleted_ids) | |
| 1248
by Martin Pool - new weave based cleanup [broken] | 573 | |
| 1092.2.22
by Robert Collins text_version and name_version unification looking reasonable | 574 | def _populate_new_inv(self): | 
| 575 | """Build revision inventory. | |
| 576 | ||
| 577 |         This creates a new empty inventory. Depending on
 | |
| 578 |         which files are selected for commit, and what is present in the
 | |
| 579 |         current tree, the new inventory is populated. inventory entries 
 | |
| 580 |         which are candidates for modification have their revision set to
 | |
| 581 |         None; inventory entries that are carried over untouched have their
 | |
| 582 |         revision set to their prior value.
 | |
| 1301
by Martin Pool - more docs in commit code | 583 |         """
 | 
| 1551.7.24
by Aaron Bentley Ensure commit respects file spec when committing removals | 584 |         # ESEPARATIONOFCONCERNS: this function is diffing and using the diff
 | 
| 585 |         # 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. | 586 |         # 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 | 587 |         # ADHB 11-07-2006
 | 
| 1092.2.22
by Robert Collins text_version and name_version unification looking reasonable | 588 | mutter("Selecting files for commit with filter %s", self.specific_files) | 
| 1731.1.64
by Aaron Bentley Fix up more memorytree tests | 589 | assert self.work_inv.root is not None | 
| 1910.2.4
by Aaron Bentley Support old CommitBuilders | 590 | entries = self.work_inv.iter_entries() | 
| 591 | if not self.builder.record_root_entry: | |
| 1910.2.9
by Aaron Bentley Inroduce assertDeprecated, and use it to test old commitbuilder API | 592 | symbol_versioning.warn('CommitBuilders should support recording' | 
| 593 | ' the root entry as of bzr 0.10.', DeprecationWarning, | |
| 594 | stacklevel=1) | |
| 1910.2.4
by Aaron Bentley Support old CommitBuilders | 595 | self.builder.new_inventory.add(self.basis_inv.root.copy()) | 
| 596 | entries.next() | |
| 597 | self._emit_progress_update() | |
| 598 | for path, new_ie in entries: | |
| 1666.1.22
by Robert Collins Rename Commit._update to _emit_progress_update. | 599 | self._emit_progress_update() | 
| 1249
by Martin Pool - improvements to weave commit [broken] | 600 | file_id = new_ie.file_id | 
| 1959.4.2
by Aaron Bentley Merge bzr.dev | 601 | try: | 
| 602 | kind = self.work_tree.kind(file_id) | |
| 2255.2.218
by Robert Collins Make the nested tree commit smoke test be more rigourous. | 603 | if kind == 'tree-reference' and self.recursive == 'down': | 
| 604 |                     # nested tree: commit in it
 | |
| 605 | sub_tree = WorkingTree.open(self.work_tree.abspath(path)) | |
| 606 |                     # FIXME: be more comprehensive here:
 | |
| 607 |                     # this works when both trees are in --trees repository,
 | |
| 608 |                     # but when both are bound to a different repository,
 | |
| 609 |                     # it fails; a better way of approaching this is to 
 | |
| 610 |                     # finally implement the explicit-caches approach design
 | |
| 611 |                     # a while back - RBC 20070306.
 | |
| 612 | if (sub_tree.branch.repository.bzrdir.root_transport.base | |
| 613 |                         ==
 | |
| 614 | self.work_tree.branch.repository.bzrdir.root_transport.base): | |
| 615 | sub_tree.branch.repository = \ | |
| 616 | self.work_tree.branch.repository | |
| 617 | try: | |
| 618 | sub_tree.commit(message=None, revprops=self.revprops, | |
| 619 | recursive=self.recursive, | |
| 620 | message_callback=self.message_callback, | |
| 621 | timestamp=self.timestamp, timezone=self.timezone, | |
| 622 | committer=self.committer, | |
| 623 | allow_pointless=self.allow_pointless, | |
| 624 | strict=self.strict, verbose=self.verbose, | |
| 625 | local=self.local, reporter=self.reporter) | |
| 626 | except errors.PointlessCommit: | |
| 627 |                         pass
 | |
| 1959.4.2
by Aaron Bentley Merge bzr.dev | 628 | if kind != new_ie.kind: | 
| 1959.4.4
by Aaron Bentley Trim trailing whitespace | 629 | new_ie = inventory.make_entry(kind, new_ie.name, | 
| 1959.4.2
by Aaron Bentley Merge bzr.dev | 630 | new_ie.parent_id, file_id) | 
| 631 | except errors.NoSuchFile: | |
| 632 |                 pass
 | |
| 1711.2.101
by John Arbash Meinel Clean up some unnecessary mutter() calls | 633 |             # mutter('check %s {%s}', path, file_id)
 | 
| 1740.3.5
by Jelmer Vernooij Simplify inventory population code by using is_inside_or_parent_of_any() | 634 | if (not self.specific_files or | 
| 635 | is_inside_or_parent_of_any(self.specific_files, path)): | |
| 1711.2.101
by John Arbash Meinel Clean up some unnecessary mutter() calls | 636 |                     # mutter('%s selected for commit', path)
 | 
| 1740.3.6
by Jelmer Vernooij Move inventory writing to the commit builder. | 637 | ie = new_ie.copy() | 
| 638 | ie.revision = None | |
| 1740.3.5
by Jelmer Vernooij Simplify inventory population code by using is_inside_or_parent_of_any() | 639 | else: | 
| 1711.2.101
by John Arbash Meinel Clean up some unnecessary mutter() calls | 640 |                 # mutter('%s not selected for commit', path)
 | 
| 1740.3.6
by Jelmer Vernooij Move inventory writing to the commit builder. | 641 | if self.basis_inv.has_id(file_id): | 
| 642 | ie = self.basis_inv[file_id].copy() | |
| 643 | else: | |
| 644 |                     # this entry is new and not being committed
 | |
| 645 |                     continue
 | |
| 1731.1.62
by Aaron Bentley Changes from review comments | 646 | self.builder.record_entry_contents(ie, self.parent_invs, | 
| 647 | path, self.work_tree) | |
| 1759.2.1
by Jelmer Vernooij Fix some types (found using aspell). | 648 |             # describe the nature of the change that has occurred relative to
 | 
| 1740.3.6
by Jelmer Vernooij Move inventory writing to the commit builder. | 649 |             # the basis inventory.
 | 
| 650 | if (self.basis_inv.has_id(ie.file_id)): | |
| 651 | basis_ie = self.basis_inv[ie.file_id] | |
| 652 | else: | |
| 653 | basis_ie = None | |
| 654 | change = ie.describe_change(basis_ie, ie) | |
| 655 | if change in (InventoryEntry.RENAMED, | |
| 656 | InventoryEntry.MODIFIED_AND_RENAMED): | |
| 657 | old_path = self.basis_inv.id2path(ie.file_id) | |
| 658 | self.reporter.renamed(change, old_path, path) | |
| 659 | else: | |
| 660 | self.reporter.snapshot_change(change, path) | |
| 1416
by Robert Collins when committing a specific file, include all its parents | 661 | |
| 1551.7.24
by Aaron Bentley Ensure commit respects file spec when committing removals | 662 | if not self.specific_files: | 
| 663 |             return
 | |
| 664 | ||
| 665 |         # ignore removals that don't match filespec
 | |
| 666 | for path, new_ie in self.basis_inv.iter_entries(): | |
| 667 | if new_ie.file_id in self.work_inv: | |
| 668 |                 continue
 | |
| 669 | if is_inside_any(self.specific_files, path): | |
| 670 |                 continue
 | |
| 671 | ie = new_ie.copy() | |
| 672 | ie.revision = None | |
| 673 | self.builder.record_entry_contents(ie, self.parent_invs, path, | |
| 674 | self.basis_tree) | |
| 675 | ||
| 1666.1.22
by Robert Collins Rename Commit._update to _emit_progress_update. | 676 | def _emit_progress_update(self): | 
| 1666.1.18
by Robert Collins Add a progress bar during commit operations. | 677 | """Emit an update to the progress bar.""" | 
| 678 | self.pb.update("Committing", self.pb_count, self.pb_total) | |
| 679 | self.pb_count += 1 | |
| 680 | ||
| 1248
by Martin Pool - new weave based cleanup [broken] | 681 | def _report_deletes(self): | 
| 1668.1.5
by Martin Pool [broken] fix up display of files changed by a commit | 682 | for path, ie in self.basis_inv.iter_entries(): | 
| 1740.3.4
by Jelmer Vernooij Move inventory to commit builder. | 683 | if ie.file_id not in self.builder.new_inventory: | 
| 1668.1.5
by Martin Pool [broken] fix up display of files changed by a commit | 684 | self.reporter.deleted(path) | 
| 1248
by Martin Pool - new weave based cleanup [broken] | 685 | |
| 1740.3.7
by Jelmer Vernooij Move committer, log, revprops, timestamp and timezone to CommitBuilder. | 686 |