author |
Steve Losh <steve@stevelosh.com> |
date |
Sun, 04 Oct 2009 20:25:24 -0400 |
parents |
adce24d24176 |
children |
1280679a055d |
'''The review extension's UI.'''
import messages
from api import *
from mercurial import util
from mercurial.node import short
def _init_command(ui, repo, **opts):
ui.note(messages.INIT_START)
try:
ReviewDatastore(ui, repo, lpath=opts.pop('local_path'),
rpath=opts.pop('remote_path'), create=True)
ui.status(messages.INIT_SUCCESS)
return
except PreexistingDatastore, e:
if e.committed:
ui.note(messages.INIT_EXISTS_COMMITTED)
else:
raise util.Abort(messages.INIT_EXISTS_UNCOMMITTED)
return
def _comment_command(ui, repo, **opts):
rd = ReviewDatastore(ui, repo)
rcset = rd[opts.pop('rev')]
message = opts.pop('message')
if not message:
raise util.Abort(messages.COMMENT_REQUIRES_MESSAGE)
rcset.add_comment(message=message)
return
def _review_command(ui, repo, **opts):
rev = opts.pop('rev')
rd = ReviewDatastore(ui, repo)
cset = repo[rev]
rcset = rd[rev]
comment_count = len(rcset.comments)
author_count = len(set(comment.author for comment in rcset.comments))
ui.write(messages.REVIEW_LOG_CSET % (cset.rev(), short(cset.node())))
ui.write(messages.REVIEW_LOG_AUTHOR % cset.user())
ui.write(messages.REVIEW_LOG_SUMMARY % cset.description().split('\n')[0])
ui.write(messages.REVIEW_LOG_SIGNOFFS % len(rcset.signoffs))
ui.write(messages.REVIEW_LOG_COMMENTS % (comment_count, author_count))
def review(ui, repo, *fnames, **opts):
'''code review a changeset in the current repository
'''
if opts.pop('init'):
return _init_command(ui, repo, **opts)
elif opts.pop('comment'):
return _comment_command(ui, repo, **opts)
else:
return _review_command(ui, repo, **opts)
cmdtable = {
'review': (review, [
('i', 'init', False, 'start code reviewing this repository'),
('', 'local-path', '', 'the local path to the code review data'),
('', 'remote-path', '', 'the remote path to code review data'),
('c', 'comment', False, 'add a comment'),
('m', 'message', '', 'use <text> as the comment or signoff message'),
('r', 'rev', '.', 'the revision to review'),
],
'hg review')
}