342
342
def show(self, revno, rev, delta):
343
343
raise NotImplementedError('not implemented in abstract base')
345
def short_committer(self, rev):
346
return re.sub('<.*@.*>', '', rev.committer).strip(' ')
346
349
class LongLogFormatter(LogFormatter):
347
350
def show(self, revno, rev, delta):
348
from osutils import format_date
350
to_file = self.to_file
352
print >>to_file, '-' * 60
353
print >>to_file, 'revno:', revno
355
print >>to_file, 'revision-id:', rev.revision_id
357
for parent_id in rev.parent_ids:
358
print >>to_file, 'parent:', parent_id
360
print >>to_file, 'committer:', rev.committer
362
date_str = format_date(rev.timestamp,
365
print >>to_file, 'timestamp: %s' % date_str
367
print >>to_file, 'message:'
369
print >>to_file, ' (no message)'
371
for l in rev.message.split('\n'):
372
print >>to_file, ' ' + l
375
delta.show(to_file, self.show_ids)
351
return self._show_helper(revno=revno, rev=rev)
377
353
def show_merge(self, rev):
354
return self._show_helper(rev=rev, indent=' ', merged=True)
356
def _show_helper(self, rev=None, revno=None, indent='', merged=False):
378
357
from osutils import format_date
380
359
to_file = self.to_file
384
362
print >>to_file, indent+'-' * 60
385
print >>to_file, indent+'merged:', rev.revision_id
363
if revno is not None:
364
print >>to_file, 'revno:', revno
366
print >>to_file, indent+'merged:', rev.revision_id
368
print >>to_file, indent+'revision-id:', rev.revision_id
386
369
if self.show_ids:
387
370
for parent_id in rev.parent_ids:
388
371
print >>to_file, indent+'parent:', parent_id
390
373
print >>to_file, indent+'committer:', rev.committer
375
print >>to_file, indent+'branch nick: %s' % \
376
rev.properties['branch-nick']
392
380
date_str = format_date(rev.timestamp,
393
381
rev.timezone or 0,
409
397
to_file = self.to_file
410
398
date_str = format_date(rev.timestamp, rev.timezone or 0,
411
399
self.show_timezone)
412
print >>to_file, "%5d %s\t%s" % (revno, rev.committer,
400
print >>to_file, "%5d %s\t%s" % (revno, self.short_committer(rev),
413
401
format_date(rev.timestamp, rev.timezone or 0,
402
self.show_timezone, date_fmt="%Y-%m-%d",
415
404
if self.show_ids:
416
405
print >>to_file, ' revision-id:', rev.revision_id
417
406
if not rev.message:
482
468
# deprecated; for compatability
483
469
lf = LongLogFormatter(to_file=to_file, show_timezone=show_timezone)
484
470
lf.show(revno, rev, delta)
472
def show_changed_revisions(branch, old_rh, new_rh, to_file=None, log_format='long'):
473
"""Show the change in revision history comparing the old revision history to the new one.
475
:param branch: The branch where the revisions exist
476
:param old_rh: The old revision history
477
:param new_rh: The new revision history
478
:param to_file: A file to write the results to. If None, stdout will be used
484
to_file = codecs.getwriter(bzrlib.user_encoding)(sys.stdout, errors='replace')
485
lf = log_formatter(log_format,
488
show_timezone='original')
490
# This is the first index which is different between
493
for i in xrange(max(len(new_rh),
497
or new_rh[i] != old_rh[i]):
502
to_file.write('Nothing seems to have changed\n')
504
## TODO: It might be nice to do something like show_log
505
## and show the merged entries. But since this is the
506
## removed revisions, it shouldn't be as important
507
if base_idx < len(old_rh):
508
to_file.write('*'*60)
509
to_file.write('\nRemoved Revisions:\n')
510
for i in range(base_idx, len(old_rh)):
511
rev = branch.get_revision(old_rh[i])
512
lf.show(i+1, rev, None)
513
to_file.write('*'*60)
514
to_file.write('\n\n')
515
if base_idx < len(new_rh):
516
to_file.write('Added Revisions:\n')
522
start_revision=base_idx+1,
523
end_revision=len(new_rh),