author |
Steve Losh <steve@stevelosh.com> |
date |
Tue, 02 Mar 2010 19:04:41 -0500 |
parents |
404dfd62a3ec |
children |
1133505b5b04 |
"""Utilities for writing unit tests for hg-review."""
from __future__ import with_statement
import os, shutil
import sample_data
from mercurial import cmdutil, commands, hg, ui
from .. import api, extension_ui
_ui = ui.ui()
def review(init=False, comment=False, signoff=False, yes=False, no=False,
force=False, message='', rev='.', local_path='', remote_path='', lines='',
files=None, unified='5', web=False):
if not files:
files = []
_ui.pushbuffer()
extension_ui.review(_ui, get_sandbox_repo(), *files,
**dict(init=init, comment=comment, signoff=signoff, yes=yes, no=no,
force=force, message=message, rev=rev, local_path=local_path,
remote_path=remote_path, lines=lines, unified=unified, web=web))
output = _ui.popbuffer()
print output
return output
sandbox_path = os.path.join(os.path.realpath('.'), 'sandbox')
sandbox_repo_path = os.path.join(sandbox_path, 'original')
sandbox_clone_path = os.path.join(sandbox_path, 'clone')
def setup_sandbox():
os.mkdir(sandbox_path)
os.chdir(sandbox_path)
os.mkdir(sandbox_repo_path)
os.chdir(sandbox_repo_path)
commands.init(_ui)
sandbox = get_sandbox_repo()
opts = { 'addremove': True, 'date': None, 'user': 'Review Tester',
'logfile': None, 'message': "Sandbox commit.", }
for state in sample_data.log:
for filename in state:
dirname, key = None, filename
# Support one-level-deep directories in the sample data.
if '/' in filename:
dirname, _, filename = filename.partition('/')
if not os.path.exists(dirname):
os.mkdir(dirname)
os.chdir(dirname)
with open(filename, 'w') as f:
f.write(state[key])
if dirname:
os.chdir('..')
commands.commit(_ui, sandbox, **opts)
def setup_reviewed_sandbox():
setup_sandbox()
sandbox = get_sandbox_repo()
rpath = os.path.join(sandbox.root, api.DEFAULT_DATASTORE_DIRNAME)
review(init=True, remote_path=rpath)
opts = { 'addremove': True, 'date': None, 'user': 'Review Tester',
'logfile': None, 'message': "Add the code review.", }
commands.commit(_ui, sandbox, **opts)
def teardown_sandbox():
os.chdir(os.path.realpath(os.path.join(sandbox_path, os.pardir)))
shutil.rmtree(sandbox_path)
def get_sandbox_repo():
return hg.repository(_ui, sandbox_repo_path)
def get_sandbox_clone():
return hg.repository(_ui, sandbox_clone_path)
def clone_sandbox_repo():
hg.clone(cmdutil.remoteui(_ui, {}), sandbox_repo_path, sandbox_clone_path)
def get_datastore_repo(path):
return hg.repository(_ui, path)