~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commit.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-11-28 23:19:25 UTC
  • mfrom: (2149.1.6 commit-callback)
  • Revision ID: pqm@pqm.ubuntu.com-20061128231925-6a90ea4334844dc4
Defer the commit message until commit is virtually certain to succeed

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
 
18
 
# XXX: Can we do any better about making interrupted commits change
19
 
# nothing?  
20
 
 
21
 
# TODO: Separate 'prepare' phase where we find a list of potentially
22
 
# committed files.  We then can then pause the commit to prompt for a
23
 
# commit message, knowing the summary will be the same as what's
24
 
# actually used for the commit.  (But perhaps simpler to simply get
25
 
# the tree status, then use that for a selective commit?)
26
 
 
27
18
# The newly committed revision is going to have a shape corresponding
28
19
# to that of the working inventory.  Files that are not in the
29
20
# working tree and that were in the predecessor are reported as
55
46
# merges from, then it should still be reported as newly added
56
47
# relative to the basis revision.
57
48
 
58
 
# TODO: Do checks that the tree can be committed *before* running the 
59
 
# editor; this should include checks for a pointless commit and for 
60
 
# unknown or missing files.
61
 
 
62
 
# TODO: If commit fails, leave the message in a file somewhere.
63
 
 
64
49
# TODO: Change the parameter 'rev_id' to 'revision_id' to be consistent with
65
50
# the rest of the code; add a deprecation of the old name.
66
51
 
184
169
               working_tree=None,
185
170
               local=False,
186
171
               reporter=None,
187
 
               config=None):
 
172
               config=None,
 
173
               message_callback=None):
188
174
        """Commit working copy as a new revision.
189
175
 
190
176
        branch -- the deprecated branch to commit to. New callers should pass in 
191
177
                  working_tree instead
192
178
 
193
 
        message -- the commit message, a mandatory parameter
 
179
        message -- the commit message (it or message_callback is required)
194
180
 
195
181
        timestamp -- if not None, seconds-since-epoch for a
196
182
             postdated/predated commit.
225
211
        else:
226
212
            self.work_tree = working_tree
227
213
            self.branch = self.work_tree.branch
228
 
        if message is None:
229
 
            raise BzrError("The message keyword parameter is required for commit().")
 
214
        if message_callback is None:
 
215
            if message is not None:
 
216
                if isinstance(message, str):
 
217
                    message = message.decode(bzrlib.user_encoding)
 
218
                message_callback = lambda x: message
 
219
            else:
 
220
                raise BzrError("The message or message_callback keyword"
 
221
                               " parameter is required for commit().")
230
222
 
231
223
        self.bound_branch = None
232
224
        self.local = local
272
264
                   
273
265
            if self.config is None:
274
266
                self.config = self.branch.get_config()
275
 
      
276
 
            if isinstance(message, str):
277
 
                message = message.decode(bzrlib.user_encoding)
278
 
            assert isinstance(message, unicode), type(message)
279
 
            self.message = message
280
 
            self._escape_commit_message()
281
267
 
282
268
            self.work_inv = self.work_tree.inventory
283
269
            self.basis_tree = self.work_tree.basis_tree()
317
303
            # that commit will succeed.
318
304
            self.builder.finish_inventory()
319
305
            self._emit_progress_update()
 
306
            message = message_callback(self)
 
307
            assert isinstance(message, unicode), type(message)
 
308
            self.message = message
 
309
            self._escape_commit_message()
 
310
 
320
311
            self.rev_id = self.builder.commit(self.message)
321
312
            self._emit_progress_update()
322
313
            # revision data is in the local branch now.