~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commit.py

  • Committer: Jelmer Vernooij
  • Date: 2006-06-07 16:49:20 UTC
  • mto: This revision was merged to the branch mainline in revision 1753.
  • Revision ID: jelmer@samba.org-20060607164920-caf81a5d3dfc3427
Move committer, log, revprops, timestamp and timezone to CommitBuilder.

Show diffs side-by-side

added added

removed removed

Lines of Context:
69
69
import time
70
70
import pdb
71
71
 
72
 
from binascii import hexlify
73
72
from cStringIO import StringIO
74
73
 
75
74
from bzrlib.atomicfile import AtomicFile
76
 
from bzrlib.osutils import (local_time_offset,
77
 
                            rand_bytes, compact_date,
78
 
                            kind_marker, is_inside_any, quotefn,
79
 
                            is_inside_or_parent_of_any,
80
 
                            sha_file, isdir, isfile,
81
 
                            split_lines)
 
75
from bzrlib.osutils import (kind_marker, is_inside_any, 
 
76
                            quotefn, is_inside_or_parent_of_any,
 
77
                            sha_file, isdir, isfile, split_lines)
82
78
import bzrlib.config
83
79
import bzrlib.errors as errors
84
80
from bzrlib.errors import (BzrError, PointlessCommit,
244
240
        self.local = local
245
241
        self.master_branch = None
246
242
        self.master_locked = False
247
 
        self.rev_id = rev_id
248
243
        self.specific_files = specific_files
249
244
        self.allow_pointless = allow_pointless
250
 
        self.revprops = {}
251
 
        if revprops is not None:
252
 
            self.revprops.update(revprops)
253
245
 
254
246
        if reporter is None and self.reporter is None:
255
247
            self.reporter = NullCommitReporter()
276
268
                # raise an exception as soon as we find a single unknown.
277
269
                for unknown in self.work_tree.unknowns():
278
270
                    raise StrictCommitFailed()
279
 
    
280
 
            if timestamp is None:
281
 
                self.timestamp = time.time()
282
 
            else:
283
 
                self.timestamp = long(timestamp)
284
 
                
 
271
                   
285
272
            if self.config is None:
286
273
                self.config = bzrlib.config.BranchConfig(self.branch)
287
 
    
288
 
            if rev_id is None:
289
 
                self.rev_id = _gen_revision_id(self.config, self.timestamp)
290
 
            else:
291
 
                self.rev_id = rev_id
292
 
    
293
 
            if committer is None:
294
 
                self.committer = self.config.username()
295
 
            else:
296
 
                assert isinstance(committer, basestring), type(committer)
297
 
                self.committer = committer
298
 
    
299
 
            if timezone is None:
300
 
                self.timezone = local_time_offset()
301
 
            else:
302
 
                self.timezone = int(timezone)
303
 
    
 
274
      
304
275
            if isinstance(message, str):
305
276
                message = message.decode(bzrlib.user_encoding)
306
277
            assert isinstance(message, unicode), type(message)
323
294
                raise NotImplementedError('selected-file commit of merges is not supported yet: files %r',
324
295
                        self.specific_files)
325
296
            self._check_parents_present()
326
 
            self.builder = self.branch.get_commit_builder(self.parents)
327
 
            self.builder.set_revision_id(self.rev_id)
 
297
            self.builder = self.branch.get_commit_builder(self.parents, 
 
298
                self.config, timestamp, timezone, committer, revprops, rev_id)
328
299
            
329
300
            self._remove_deleted()
330
301
            self._populate_new_inv()
338
309
            self._emit_progress_update()
339
310
            self.inv_sha1 = self.builder.finish_inventory()
340
311
            self._emit_progress_update()
 
312
            self.builder.set_message(self.message)
341
313
            self._make_revision()
 
314
            self.rev_id = self.builder._new_revision_id
342
315
            # revision data is in the local branch now.
343
316
            
344
317
            # upload revision data to the master.
502
475
            
503
476
    def _make_revision(self):
504
477
        """Record a new revision object for this commit."""
505
 
        rev = Revision(timestamp=self.timestamp,
506
 
                       timezone=self.timezone,
507
 
                       committer=self.committer,
508
 
                       message=self.message,
 
478
        rev = Revision(timestamp=self.builder._timestamp,
 
479
                       timezone=self.builder._timezone,
 
480
                       committer=self.builder._committer,
 
481
                       message=self.builder.message,
509
482
                       inventory_sha1=self.inv_sha1,
510
 
                       revision_id=self.rev_id,
511
 
                       properties=self.revprops)
512
 
        rev.parent_ids = self.parents
513
 
        self.branch.repository.add_revision(self.rev_id, rev, 
514
 
            self.builder.new_inventory, self.config)
 
483
                       revision_id=self.builder._new_revision_id,
 
484
                       properties=self.builder._revprops)
 
485
        rev.parent_ids = self.builder.parents
 
486
        self.branch.repository.add_revision(self.builder._new_revision_id, rev, 
 
487
            self.builder.new_inventory, self.builder._config)
515
488
 
516
489
    def _remove_deleted(self):
517
490
        """Remove deleted files from the working inventories.
549
522
        revision set to their prior value.
550
523
        """
551
524
        mutter("Selecting files for commit with filter %s", self.specific_files)
552
 
        self.new_inv = Inventory(revision_id=self.rev_id)
553
525
        # iter_entries does not visit the ROOT_ID node so we need to call
554
526
        # self._emit_progress_update once by hand.
555
527
        self._emit_progress_update()
573
545
                    continue
574
546
 
575
547
            self.builder.record_entry_contents(ie, self.parent_invs, 
576
 
                self.rev_id, path, self.work_tree)
 
548
                path, self.work_tree)
577
549
            # describe the nature of the change that has occured relative to
578
550
            # the basis inventory.
579
551
            if (self.basis_inv.has_id(ie.file_id)):
598
570
            if ie.file_id not in self.builder.new_inventory:
599
571
                self.reporter.deleted(path)
600
572
 
601
 
def _gen_revision_id(config, when):
602
 
    """Return new revision-id."""
603
 
    s = '%s-%s-' % (config.user_email(), compact_date(when))
604
 
    s += hexlify(rand_bytes(8))
605
 
    return s
 
573