##// END OF EJS Templates
Repo type can't be changed. Fixes issue 836
Repo type can't be changed. Fixes issue 836

File last commit:

r3840:dc464486 beta
r3858:d11ecf2f default
Show More
test_compare.py
411 lines | 19.6 KiB | text/x-python | PythonLexer
Basic compare-view controller with ref parsing
r2241 from rhodecode.tests import *
Bumped mercurial version to 2.3...
r2684 from rhodecode.model.repo import RepoModel
from rhodecode.model.meta import Session
from rhodecode.model.db import Repository
from rhodecode.model.scm import ScmModel
from rhodecode.lib.vcs.backends.base import EmptyChangeset
use fixtures for forking
r3645 from rhodecode.tests.fixture import Fixture
Basic implementation of cherry picking changesets...
r3023
use fixtures for forking
r3645 fixture = Fixture()
Basic implementation of cherry picking changesets...
r3023
def _commit_change(repo, filename, content, message, vcs_type, parent=None, newfile=False):
repo = Repository.get_by_repo_name(repo)
_cs = parent
if not parent:
_cs = EmptyChangeset(alias=vcs_type)
if newfile:
cs = ScmModel().create_node(
repo=repo.scm_instance, repo_name=repo.repo_name,
cs=_cs, user=TEST_USER_ADMIN_LOGIN,
author=TEST_USER_ADMIN_LOGIN,
message=message,
content=content,
f_path=filename
)
else:
cs = ScmModel().commit_change(
repo=repo.scm_instance, repo_name=repo.repo_name,
cs=parent, user=TEST_USER_ADMIN_LOGIN,
author=TEST_USER_ADMIN_LOGIN,
message=message,
content=content,
f_path=filename
)
return cs
Basic compare-view controller with ref parsing
r2241 class TestCompareController(TestController):
some tests fixes for compare view
r3379 def setUp(self):
self.r1_id = None
self.r2_id = None
def tearDown(self):
if self.r2_id:
RepoModel().delete(self.r2_id)
if self.r1_id:
RepoModel().delete(self.r1_id)
Session().commit()
Session.remove()
Basic implementation of cherry picking changesets...
r3023 def test_compare_forks_on_branch_extra_commits_hg(self):
Bumped mercurial version to 2.3...
r2684 self.log_user()
more usage of fixture tools...
r3647 repo1 = fixture.create_repo('one', repo_type='hg',
repo_description='diff-test',
cur_user=TEST_USER_ADMIN_LOGIN)
some tests fixes for compare view
r3379 self.r1_id = repo1.repo_id
Basic implementation of cherry picking changesets...
r3023 #commit something !
cs0 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
message='commit1', vcs_type='hg', parent=None, newfile=True)
#fork this repo
use fixtures for forking
r3645 repo2 = fixture.create_fork('one', 'one-fork')
some tests fixes for compare view
r3379 self.r2_id = repo2.repo_id
Bumped mercurial version to 2.3...
r2684
Basic implementation of cherry picking changesets...
r3023 #add two extra commit into fork
cs1 = _commit_change(repo2.repo_name, filename='file1', content='line1\nline2\n',
message='commit2', vcs_type='hg', parent=cs0)
Bumped mercurial version to 2.3...
r2684
Basic implementation of cherry picking changesets...
r3023 cs2 = _commit_change(repo2.repo_name, filename='file1', content='line1\nline2\nline3\n',
message='commit3', vcs_type='hg', parent=cs1)
Multiple changes for compare system...
r3015
Basic implementation of cherry picking changesets...
r3023 rev1 = 'default'
rev2 = 'default'
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331
some tests fixes for compare view
r3379 response = self.app.get(url(controller='compare', action='index',
repo_name=repo1.repo_name,
org_ref_type="branch",
org_ref=rev2,
other_repo=repo2.repo_name,
other_ref_type="branch",
other_ref=rev1,
Mads Kiilerich
compare/pullrequest: introduce merge parameter...
r3486 merge='1',
some tests fixes for compare view
r3379 ))
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331
some tests fixes for compare view
r3379 response.mustcontain('%s@%s -> %s@%s' % (repo1.repo_name, rev2, repo2.repo_name, rev1))
response.mustcontain("""Showing 2 commits""")
response.mustcontain("""1 file changed with 2 insertions and 0 deletions""")
Multiple changes for compare system...
r3015
some tests fixes for compare view
r3379 response.mustcontain("""<div class="message tooltip" title="commit2" style="white-space:normal">commit2</div>""")
response.mustcontain("""<div class="message tooltip" title="commit3" style="white-space:normal">commit3</div>""")
Multiple changes for compare system...
r3015
some tests fixes for compare view
r3379 response.mustcontain("""<a href="/%s/changeset/%s">r1:%s</a>""" % (repo2.repo_name, cs1.raw_id, cs1.short_id))
response.mustcontain("""<a href="/%s/changeset/%s">r2:%s</a>""" % (repo2.repo_name, cs2.raw_id, cs2.short_id))
## files
Mads Kiilerich
compare/pullrequest: introduce merge parameter...
r3486 response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=1#C--826e8142e6ba">file1</a>""" % (repo1.repo_name, rev2, rev1, repo2.repo_name))
some tests fixes for compare view
r3379 #swap
Mads Kiilerich
compare/pullrequest: introduce merge parameter...
r3486 response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=True">[swap]</a>""" % (repo2.repo_name, rev1, rev2, repo1.repo_name))
White space cleanup
r3029
Basic implementation of cherry picking changesets...
r3023 def test_compare_forks_on_branch_extra_commits_origin_has_incomming_hg(self):
Multiple changes for compare system...
r3015 self.log_user()
more usage of fixture tools...
r3647 repo1 = fixture.create_repo('one', repo_type='hg',
repo_description='diff-test',
cur_user=TEST_USER_ADMIN_LOGIN)
some tests fixes for compare view
r3379 self.r1_id = repo1.repo_id
Basic implementation of cherry picking changesets...
r3023 #commit something !
cs0 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
message='commit1', vcs_type='hg', parent=None, newfile=True)
Multiple changes for compare system...
r3015
Basic implementation of cherry picking changesets...
r3023 #fork this repo
use fixtures for forking
r3645 repo2 = fixture.create_fork('one', 'one-fork')
some tests fixes for compare view
r3379 self.r2_id = repo2.repo_id
Multiple changes for compare system...
r3015
Basic implementation of cherry picking changesets...
r3023 #now commit something to origin repo
cs1_prim = _commit_change(repo1.repo_name, filename='file2', content='line1file2\n',
message='commit2', vcs_type='hg', parent=cs0, newfile=True)
#add two extra commit into fork
cs1 = _commit_change(repo2.repo_name, filename='file1', content='line1\nline2\n',
message='commit2', vcs_type='hg', parent=cs0)
cs2 = _commit_change(repo2.repo_name, filename='file1', content='line1\nline2\nline3\n',
message='commit3', vcs_type='hg', parent=cs1)
rev1 = 'default'
rev2 = 'default'
Bumped mercurial version to 2.3...
r2684
some tests fixes for compare view
r3379 response = self.app.get(url(controller='compare', action='index',
repo_name=repo1.repo_name,
org_ref_type="branch",
org_ref=rev2,
other_repo=repo2.repo_name,
other_ref_type="branch",
other_ref=rev1,
Mads Kiilerich
compare/pullrequest: introduce merge parameter...
r3486 merge='x',
some tests fixes for compare view
r3379 ))
response.mustcontain('%s@%s -&gt; %s@%s' % (repo1.repo_name, rev2, repo2.repo_name, rev1))
response.mustcontain("""Showing 2 commits""")
response.mustcontain("""1 file changed with 2 insertions and 0 deletions""")
Bumped mercurial version to 2.3...
r2684
some tests fixes for compare view
r3379 response.mustcontain("""<div class="message tooltip" title="commit2" style="white-space:normal">commit2</div>""")
response.mustcontain("""<div class="message tooltip" title="commit3" style="white-space:normal">commit3</div>""")
Bumped mercurial version to 2.3...
r2684
some tests fixes for compare view
r3379 response.mustcontain("""<a href="/%s/changeset/%s">r1:%s</a>""" % (repo2.repo_name, cs1.raw_id, cs1.short_id))
response.mustcontain("""<a href="/%s/changeset/%s">r2:%s</a>""" % (repo2.repo_name, cs2.raw_id, cs2.short_id))
## files
Mads Kiilerich
compare/pullrequest: introduce merge parameter...
r3486 response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=x#C--826e8142e6ba">file1</a>""" % (repo1.repo_name, rev2, rev1, repo2.repo_name))
some tests fixes for compare view
r3379 #swap
Mads Kiilerich
compare/pullrequest: introduce merge parameter...
r3486 response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=True">[swap]</a>""" % (repo2.repo_name, rev1, rev2, repo1.repo_name))
Bumped mercurial version to 2.3...
r2684
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331 def test_compare_cherry_pick_changesets_from_bottom(self):
fixed pull-requests with cherry picking changesets...
r3380
# repo1:
# cs0:
# cs1:
# repo1-fork- in which we will cherry pick bottom changesets
# cs0:
# cs1:
# cs2: x
# cs3: x
# cs4: x
# cs5:
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331 #make repo1, and cs1+cs2
self.log_user()
Basic implementation of cherry picking changesets...
r3023
more usage of fixture tools...
r3647 repo1 = fixture.create_repo('repo1', repo_type='hg',
repo_description='diff-test',
cur_user=TEST_USER_ADMIN_LOGIN)
some tests fixes for compare view
r3379 self.r1_id = repo1.repo_id
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331 #commit something !
fixed pull-requests with cherry picking changesets...
r3380 cs0 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331 message='commit1', vcs_type='hg', parent=None,
newfile=True)
fixed pull-requests with cherry picking changesets...
r3380 cs1 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\n',
message='commit2', vcs_type='hg', parent=cs0)
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331 #fork this repo
use fixtures for forking
r3645 repo2 = fixture.create_fork('repo1', 'repo1-fork')
some tests fixes for compare view
r3379 self.r2_id = repo2.repo_id
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331 #now make cs3-6
fixed pull-requests with cherry picking changesets...
r3380 cs2 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\n',
message='commit3', vcs_type='hg', parent=cs1)
cs3 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\n',
message='commit4', vcs_type='hg', parent=cs2)
cs4 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\n',
message='commit5', vcs_type='hg', parent=cs3)
cs5 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\nline6\n',
message='commit6', vcs_type='hg', parent=cs4)
response = self.app.get(url(controller='compare', action='index',
repo_name=repo2.repo_name,
Mads Kiilerich
compare: drop unused rev_start and rev_end
r3484 org_ref_type="rev",
more usage of fixture tools...
r3647 org_ref=cs1.short_id, # parent of cs2, in repo2
fixed pull-requests with cherry picking changesets...
r3380 other_repo=repo1.repo_name,
Mads Kiilerich
compare: drop unused rev_start and rev_end
r3484 other_ref_type="rev",
other_ref=cs4.short_id,
Mads Kiilerich
compare/pullrequest: introduce merge parameter...
r3486 merge='True',
fixed pull-requests with cherry picking changesets...
r3380 ))
Mads Kiilerich
compare: drop unused rev_start and rev_end
r3484 response.mustcontain('%s@%s -&gt; %s@%s' % (repo2.repo_name, cs1.short_id, repo1.repo_name, cs4.short_id))
fixed pull-requests with cherry picking changesets...
r3380 response.mustcontain("""Showing 3 commits""")
response.mustcontain("""1 file changed with 3 insertions and 0 deletions""")
response.mustcontain("""<div class="message tooltip" title="commit3" style="white-space:normal">commit3</div>""")
response.mustcontain("""<div class="message tooltip" title="commit4" style="white-space:normal">commit4</div>""")
response.mustcontain("""<div class="message tooltip" title="commit5" style="white-space:normal">commit5</div>""")
response.mustcontain("""<a href="/%s/changeset/%s">r2:%s</a>""" % (repo1.repo_name, cs2.raw_id, cs2.short_id))
response.mustcontain("""<a href="/%s/changeset/%s">r3:%s</a>""" % (repo1.repo_name, cs3.raw_id, cs3.short_id))
response.mustcontain("""<a href="/%s/changeset/%s">r4:%s</a>""" % (repo1.repo_name, cs4.raw_id, cs4.short_id))
## files
response.mustcontain("""#C--826e8142e6ba">file1</a>""")
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331
fixed pull-requests with cherry picking changesets...
r3380 def test_compare_cherry_pick_changesets_from_top(self):
# repo1:
# cs0:
# cs1:
# repo1-fork- in which we will cherry pick bottom changesets
# cs0:
# cs1:
# cs2:
# cs3: x
# cs4: x
# cs5: x
#
#make repo1, and cs1+cs2
self.log_user()
more usage of fixture tools...
r3647 repo1 = fixture.create_repo('repo1', repo_type='hg',
repo_description='diff-test',
cur_user=TEST_USER_ADMIN_LOGIN)
fixed pull-requests with cherry picking changesets...
r3380 self.r1_id = repo1.repo_id
#commit something !
cs0 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
message='commit1', vcs_type='hg', parent=None,
newfile=True)
cs1 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\n',
message='commit2', vcs_type='hg', parent=cs0)
#fork this repo
use fixtures for forking
r3645 repo2 = fixture.create_fork('repo1', 'repo1-fork')
fixed pull-requests with cherry picking changesets...
r3380 self.r2_id = repo2.repo_id
#now make cs3-6
cs2 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\n',
message='commit3', vcs_type='hg', parent=cs1)
cs3 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\n',
message='commit4', vcs_type='hg', parent=cs2)
cs4 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\n',
message='commit5', vcs_type='hg', parent=cs3)
cs5 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\nline6\n',
message='commit6', vcs_type='hg', parent=cs4)
some tests fixes for compare view
r3379 response = self.app.get(url(controller='compare', action='index',
Mads Kiilerich
compare: drop unused rev_start and rev_end
r3484 repo_name=repo1.repo_name,
org_ref_type="rev",
org_ref=cs2.short_id, # parent of cs3, not in repo2
other_ref_type="rev",
other_ref=cs5.short_id,
Mads Kiilerich
compare/pullrequest: introduce merge parameter...
r3486 merge='1',
some tests fixes for compare view
r3379 ))
fixed pull-requests with cherry picking changesets...
r3380
Mads Kiilerich
compare: drop unused rev_start and rev_end
r3484 response.mustcontain('%s@%s -&gt; %s@%s' % (repo1.repo_name, cs2.short_id, repo1.repo_name, cs5.short_id))
some tests fixes for compare view
r3379 response.mustcontain("""Showing 3 commits""")
response.mustcontain("""1 file changed with 3 insertions and 0 deletions""")
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331
some tests fixes for compare view
r3379 response.mustcontain("""<div class="message tooltip" title="commit4" style="white-space:normal">commit4</div>""")
response.mustcontain("""<div class="message tooltip" title="commit5" style="white-space:normal">commit5</div>""")
fixed pull-requests with cherry picking changesets...
r3380 response.mustcontain("""<div class="message tooltip" title="commit6" style="white-space:normal">commit6</div>""")
some tests fixes for compare view
r3379
fixed pull-requests with cherry picking changesets...
r3380 response.mustcontain("""<a href="/%s/changeset/%s">r3:%s</a>""" % (repo1.repo_name, cs3.raw_id, cs3.short_id))
response.mustcontain("""<a href="/%s/changeset/%s">r4:%s</a>""" % (repo1.repo_name, cs4.raw_id, cs4.short_id))
response.mustcontain("""<a href="/%s/changeset/%s">r5:%s</a>""" % (repo1.repo_name, cs5.raw_id, cs5.short_id))
some tests fixes for compare view
r3379 ## files
fixed pull-requests with cherry picking changesets...
r3380 response.mustcontain("""#C--826e8142e6ba">file1</a>""")
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331
def test_compare_cherry_pick_changeset_mixed_branches(self):
pass
#TODO write this tastecase
def test_compare_remote_branches_hg(self):
self.log_user()
use fixtures for forking
r3645 repo2 = fixture.create_fork(HG_REPO, HG_FORK)
fixed pull-requests with cherry picking changesets...
r3380 self.r2_id = repo2.repo_id
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331 rev1 = '56349e29c2af'
rev2 = '7d4bc8ec6be5'
some tests fixes for compare view
r3379 response = self.app.get(url(controller='compare', action='index',
repo_name=HG_REPO,
org_ref_type="rev",
org_ref=rev1,
other_ref_type="rev",
other_ref=rev2,
other_repo=HG_FORK,
Mads Kiilerich
compare/pullrequest: introduce merge parameter...
r3486 merge='1',
some tests fixes for compare view
r3379 ))
response.mustcontain('%s@%s -&gt; %s@%s' % (HG_REPO, rev1, HG_FORK, rev2))
## outgoing changesets between those revisions
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331
some tests fixes for compare view
r3379 response.mustcontain("""<a href="/%s/changeset/2dda4e345facb0ccff1a191052dd1606dba6781d">r4:2dda4e345fac</a>""" % (HG_FORK))
response.mustcontain("""<a href="/%s/changeset/6fff84722075f1607a30f436523403845f84cd9e">r5:6fff84722075</a>""" % (HG_FORK))
response.mustcontain("""<a href="/%s/changeset/7d4bc8ec6be56c0f10425afb40b6fc315a4c25e7">r6:%s</a>""" % (HG_FORK, rev2))
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331
some tests fixes for compare view
r3379 ## files
Mads Kiilerich
compare/pullrequest: introduce merge parameter...
r3486 response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s?other_repo=%s&amp;merge=1#C--9c390eb52cd6">vcs/backends/hg.py</a>""" % (HG_REPO, rev1, rev2, HG_FORK))
response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s?other_repo=%s&amp;merge=1#C--41b41c1f2796">vcs/backends/__init__.py</a>""" % (HG_REPO, rev1, rev2, HG_FORK))
response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s?other_repo=%s&amp;merge=1#C--2f574d260608">vcs/backends/base.py</a>""" % (HG_REPO, rev1, rev2, HG_FORK))
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331
def test_org_repo_new_commits_after_forking_simple_diff(self):
self.log_user()
more usage of fixture tools...
r3647 repo1 = fixture.create_repo('one', repo_type='hg',
repo_description='diff-test',
cur_user=TEST_USER_ADMIN_LOGIN)
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331
some tests fixes for compare view
r3379 self.r1_id = repo1.repo_id
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331 r1_name = repo1.repo_name
#commit something initially !
cs0 = ScmModel().create_node(
repo=repo1.scm_instance, repo_name=r1_name,
cs=EmptyChangeset(alias='hg'), user=TEST_USER_ADMIN_LOGIN,
author=TEST_USER_ADMIN_LOGIN,
message='commit1',
content='line1',
f_path='file1'
)
Session().commit()
self.assertEqual(repo1.scm_instance.revisions, [cs0.raw_id])
#fork the repo1
more usage of fixture tools...
r3647 repo2 = fixture.create_repo('one-fork', repo_type='hg',
repo_description='diff-test',
cur_user=TEST_USER_ADMIN_LOGIN,
clone_uri=repo1.repo_full_path,
fork_of='one')
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331 Session().commit()
self.assertEqual(repo2.scm_instance.revisions, [cs0.raw_id])
some tests fixes for compare view
r3379 self.r2_id = repo2.repo_id
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331 r2_name = repo2.repo_name
#make 3 new commits in fork
cs1 = ScmModel().create_node(
repo=repo2.scm_instance, repo_name=r2_name,
cs=repo2.scm_instance[-1], user=TEST_USER_ADMIN_LOGIN,
author=TEST_USER_ADMIN_LOGIN,
message='commit1-fork',
content='file1-line1-from-fork',
f_path='file1-fork'
)
cs2 = ScmModel().create_node(
repo=repo2.scm_instance, repo_name=r2_name,
cs=cs1, user=TEST_USER_ADMIN_LOGIN,
author=TEST_USER_ADMIN_LOGIN,
message='commit2-fork',
content='file2-line1-from-fork',
f_path='file2-fork'
)
cs3 = ScmModel().create_node(
repo=repo2.scm_instance, repo_name=r2_name,
cs=cs2, user=TEST_USER_ADMIN_LOGIN,
author=TEST_USER_ADMIN_LOGIN,
message='commit3-fork',
content='file3-line1-from-fork',
f_path='file3-fork'
)
#compare !
rev1 = 'default'
rev2 = 'default'
some tests fixes for compare view
r3379 response = self.app.get(url(controller='compare', action='index',
repo_name=r2_name,
org_ref_type="branch",
org_ref=rev1,
other_ref_type="branch",
other_ref=rev2,
other_repo=r1_name,
Mads Kiilerich
compare/pullrequest: introduce merge parameter...
r3486 merge='1',
some tests fixes for compare view
r3379 ))
response.mustcontain('%s@%s -&gt; %s@%s' % (r2_name, rev1, r1_name, rev2))
response.mustcontain('No files')
response.mustcontain('No changesets')
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331
some tests fixes for compare view
r3379 #add new commit into parent !
cs0 = ScmModel().create_node(
repo=repo1.scm_instance, repo_name=r1_name,
cs=EmptyChangeset(alias='hg'), user=TEST_USER_ADMIN_LOGIN,
author=TEST_USER_ADMIN_LOGIN,
message='commit2-parent',
content='line1-added-after-fork',
f_path='file2'
)
#compare !
rev1 = 'default'
rev2 = 'default'
response = self.app.get(url(controller='compare', action='index',
repo_name=r2_name,
org_ref_type="branch",
org_ref=rev1,
other_ref_type="branch",
other_ref=rev2,
other_repo=r1_name,
Mads Kiilerich
compare/pullrequest: introduce merge parameter...
r3486 merge='1',
some tests fixes for compare view
r3379 ))
added some failing tests for compare using cherry pick changesets, to be fixed later
r3331
some tests fixes for compare view
r3379 response.mustcontain('%s@%s -&gt; %s@%s' % (r2_name, rev1, r1_name, rev2))
response.mustcontain("""commit2-parent""")
response.mustcontain("""1 file changed with 1 insertions and 0 deletions""")
response.mustcontain("""line1-added-after-fork""")