changeset 3331:0379e15f0b85 beta

added some failing tests for compare using cherry pick changesets, to be fixed later
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 05 Feb 2013 01:02:36 +0100
parents dcd1c159a132
children 92dfc033ee6f
files rhodecode/tests/functional/test_compare.py
diffstat 1 files changed, 306 insertions(+), 185 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/tests/functional/test_compare.py	Mon Feb 04 22:34:47 2013 +0100
+++ b/rhodecode/tests/functional/test_compare.py	Tue Feb 05 01:02:36 2013 +0100
@@ -88,16 +88,18 @@
 
         rev1 = 'default'
         rev2 = 'default'
-        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,
-                                    ))
+
 
         try:
+            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,
+                                        ))
+
             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""")
@@ -146,16 +148,16 @@
 
         rev1 = 'default'
         rev2 = 'default'
-        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,
-                                    ))
 
         try:
+            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,
+                                        ))            
             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""")
@@ -173,176 +175,295 @@
             RepoModel().delete(r2_id)
             RepoModel().delete(r1_id)
 
+    def test_compare_cherry_pick_changesets_from_bottom(self):
+        """
+        repo1:
+            cs1:
+            cs2:
+        repo1-fork- in which we will cherry pick bottom changesets 
+            cs1:
+            cs2:
+            cs3: x
+            cs4: x
+            cs5: x
+            cs6:
+        """
+        #make repo1, and cs1+cs2
+        self.log_user()
 
-#    def test_compare_remote_repos_remote_flag_off(self):
-#        self.log_user()
-#        _fork_repo(HG_FORK, 'hg')
-#
-#        rev1 = '56349e29c2af'
-#        rev2 = '7d4bc8ec6be5'
-#
-#        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,
-#                                    repo=HG_FORK,
-#                                    bundle=False,
-#                                    ))
-#
-#        try:
-#            response.mustcontain('%s@%s -&gt; %s@%s' % (HG_REPO, rev1, HG_FORK, rev2))
-#            ## outgoing changesets between those revisions
-#
-#            response.mustcontain("""<a href="/%s/changeset/2dda4e345facb0ccff1a191052dd1606dba6781d">r4:2dda4e345fac</a>""" % (HG_REPO))
-#            response.mustcontain("""<a href="/%s/changeset/6fff84722075f1607a30f436523403845f84cd9e">r5:6fff84722075</a>""" % (HG_REPO))
-#            response.mustcontain("""<a href="/%s/changeset/7d4bc8ec6be56c0f10425afb40b6fc315a4c25e7">r6:%s</a>""" % (HG_REPO, rev2))
-#
-#            ## files
-#            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--9c390eb52cd6">vcs/backends/hg.py</a>""" % (HG_REPO, rev1, rev2))
-#            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--41b41c1f2796">vcs/backends/__init__.py</a>""" % (HG_REPO, rev1, rev2))
-#            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--2f574d260608">vcs/backends/base.py</a>""" % (HG_REPO, rev1, rev2))
-#        finally:
-#            RepoModel().delete(HG_FORK)
+        repo1 = RepoModel().create_repo(repo_name='repo1', repo_type='hg',
+                                        description='diff-test',
+                                        owner=TEST_USER_ADMIN_LOGIN)
+        r1_id = repo1.repo_id
+        Session().commit()
+        #commit something !
+        cs1 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
+                             message='commit1', vcs_type='hg', parent=None,
+                             newfile=True)
+        cs2 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\n',
+                             message='commit2', vcs_type='hg', parent=cs1)
+        #fork this repo
+        repo2 = _fork_repo('repo1-fork', 'hg', parent='repo1')
+        Session().commit()
+        r2_id = repo1.repo_id
+        #now make cs3-6
+        cs3 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\n',
+                             message='commit3', vcs_type='hg', parent=cs2)
+        cs4 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\n',
+                             message='commit4', vcs_type='hg', parent=cs3)
+        cs5 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\n',
+                             message='commit5', vcs_type='hg', parent=cs4)
+        cs6 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\nline6\n',
+                             message='commit6', vcs_type='hg', parent=cs5)
+
+        rev1 = 'tip'
+        rev2 = 'tip'
+
+        try:
+            response = self.app.get(url(controller='compare', action='index',
+                                        repo_name=repo2.repo_name,
+                                        org_ref_type="tag",
+                                        org_ref=rev1,
+                                        other_repo=repo1.repo_name,
+                                        other_ref_type="tag",
+                                        other_ref=rev2,
+                                        rev_start=cs3.raw_id,
+                                        rev_end=cs5.raw_id,
+                                        ))            
+            response.mustcontain('%s@%s -&gt; %s@%s' % (repo2.repo_name, rev1, repo1.repo_name, rev2))
+            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">r3:%s</a>""" % (repo2.repo_name, cs3.raw_id, cs3.short_id))
+            response.mustcontain("""<a href="/%s/changeset/%s">r4:%s</a>""" % (repo2.repo_name, cs4.raw_id, cs4.short_id))
+            response.mustcontain("""<a href="/%s/changeset/%s">r5:%s</a>""" % (repo2.repo_name, cs5.raw_id, cs5.short_id))
+            ## files
+            response.mustcontain("""<a href="/%s/compare/tag@%s...tag@%s?other_repo=%s#C--826e8142e6ba">file1</a>""" % (repo2.repo_name, rev1, rev2, repo1.repo_name))
+            #swap
+            response.mustcontain("""<a href="/%s/compare/tag@%s...tag@%s?as_form=None&amp;other_repo=%s">[swap]</a>""" % (repo1.repo_name, rev1, rev2, repo2.repo_name))
+        finally:
+            RepoModel().delete(r2_id)
+            RepoModel().delete(r1_id)
 
+    def test_compare_cherry_pick_changesets_from_top(self):
+        """
+        repo1:
+            cs1:
+            cs2:
+        repo1-fork- in which we will cherry pick bottom changesets 
+            cs1:
+            cs2:
+            cs3:
+            cs4: x
+            cs5: x
+            cs6: x
+        """
+        #make repo1, and cs1+cs2
+        self.log_user()
 
+        repo1 = RepoModel().create_repo(repo_name='repo1', repo_type='hg',
+                                        description='diff-test',
+                                        owner=TEST_USER_ADMIN_LOGIN)
+        r1_id = repo1.repo_id
+        Session().commit()
+        #commit something !
+        cs1 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
+                             message='commit1', vcs_type='hg', parent=None,
+                             newfile=True)
+        cs2 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\n',
+                             message='commit2', vcs_type='hg', parent=cs1)
+        #fork this repo
+        repo2 = _fork_repo('repo1-fork', 'hg', parent='repo1')
+        Session().commit()
+        r2_id = repo1.repo_id
+        #now make cs3-6
+        cs3 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\n',
+                             message='commit3', vcs_type='hg', parent=cs2)
+        cs4 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\n',
+                             message='commit4', vcs_type='hg', parent=cs3)
+        cs5 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\n',
+                             message='commit5', vcs_type='hg', parent=cs4)
+        cs6 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\nline6\n',
+                             message='commit6', vcs_type='hg', parent=cs5)
+
+        rev1 = 'tip'
+        rev2 = 'tip'
+
+        try:
+            response = self.app.get(url(controller='compare', action='index',
+                                        repo_name=repo2.repo_name,
+                                        org_ref_type="tag",
+                                        org_ref=rev1,
+                                        other_repo=repo1.repo_name,
+                                        other_ref_type="tag",
+                                        other_ref=rev2,
+                                        rev_start=cs4.raw_id,
+                                        rev_end=cs6.raw_id,
+                                        ))
+
+            response.mustcontain('%s@%s -&gt; %s@%s' % (repo2.repo_name, rev1, repo1.repo_name, rev2))
+            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">commit4</div>""")
+            response.mustcontain("""<div class="message tooltip" title="commit4" style="white-space:normal">commit5</div>""")
+            response.mustcontain("""<div class="message tooltip" title="commit5" style="white-space:normal">commit6</div>""")
 
-#
-#    def test_compare_remote_branches_hg(self):
-#        self.log_user()
-#
-#        _fork_repo(HG_FORK, 'hg')
-#
-#        rev1 = '56349e29c2af'
-#        rev2 = '7d4bc8ec6be5'
-#
-#        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,
-#                                    repo=HG_FORK,
-#                                    ))
-#
-#        try:
-#            response.mustcontain('%s@%s -&gt; %s@%s' % (HG_REPO, rev1, HG_FORK, rev2))
-#            ## outgoing changesets between those revisions
-#
-#            response.mustcontain("""<a href="/%s/changeset/2dda4e345facb0ccff1a191052dd1606dba6781d">r4:2dda4e345fac</a>""" % (HG_REPO))
-#            response.mustcontain("""<a href="/%s/changeset/6fff84722075f1607a30f436523403845f84cd9e">r5:6fff84722075</a>""" % (HG_REPO))
-#            response.mustcontain("""<a href="/%s/changeset/7d4bc8ec6be56c0f10425afb40b6fc315a4c25e7">r6:%s</a>""" % (HG_REPO, rev2))
-#
-#            ## files
-#            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--9c390eb52cd6">vcs/backends/hg.py</a>""" % (HG_REPO, rev1, rev2))
-#            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--41b41c1f2796">vcs/backends/__init__.py</a>""" % (HG_REPO, rev1, rev2))
-#            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--2f574d260608">vcs/backends/base.py</a>""" % (HG_REPO, rev1, rev2))
-#        finally:
-#            RepoModel().delete(HG_FORK)
-#
-#    def test_org_repo_new_commits_after_forking_simple_diff(self):
-#        self.log_user()
-#
-#        repo1 = RepoModel().create_repo(repo_name='one', repo_type='hg',
-#                                        description='diff-test',
-#                                        owner=TEST_USER_ADMIN_LOGIN)
-#
-#        Session().commit()
-#        r1_id = repo1.repo_id
-#        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
-#        repo2 = RepoModel().create_repo(repo_name='one-fork', repo_type='hg',
-#                                description='compare-test',
-#                                clone_uri=repo1.repo_full_path,
-#                                owner=TEST_USER_ADMIN_LOGIN, fork_of='one')
-#        Session().commit()
-#        self.assertEqual(repo2.scm_instance.revisions, [cs0.raw_id])
-#        r2_id = repo2.repo_id
-#        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'
-#        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,
-#                                    repo=r1_name,
-#                                    bundle=False,
-#                                    ))
-#
-#        try:
-#            #response.mustcontain('%s@%s -&gt; %s@%s' % (r2_name, rev1, r1_name, rev2))
-#
-#            #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',
-#                content='line1',
-#                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,
-#                                        repo=r1_name,
-#                                        bundle=False
-#                                        ))
-#
-#            response.mustcontain('%s@%s -&gt; %s@%s' % (r2_name, rev1, r1_name, rev2))
-#            response.mustcontain("""file1-line1-from-fork""")
-#            response.mustcontain("""file2-line1-from-fork""")
-#            response.mustcontain("""file3-line1-from-fork""")
-#            self.assertFalse("""<a href="#">file2</a>""" in response.body)  # new commit from parent
-#            self.assertFalse("""line1-from-new-parent"""  in response.body)
-#        finally:
-#            RepoModel().delete(r2_id)
-#            RepoModel().delete(r1_id)
+            response.mustcontain("""<a href="/%s/changeset/%s">r4:%s</a>""" % (repo2.repo_name, cs4.raw_id, cs4.short_id))
+            response.mustcontain("""<a href="/%s/changeset/%s">r5:%s</a>""" % (repo2.repo_name, cs5.raw_id, cs5.short_id))
+            response.mustcontain("""<a href="/%s/changeset/%s">r6:%s</a>""" % (repo2.repo_name, cs6.raw_id, cs6.short_id))
+            ## files
+            response.mustcontain("""<a href="/%s/compare/tag@%s...tag@%s?other_repo=%s#C--826e8142e6ba">file1</a>""" % (repo2.repo_name, rev1, rev2, repo1.repo_name))
+            #swap
+            response.mustcontain("""<a href="/%s/compare/tag@%s...tag@%s?as_form=None&amp;other_repo=%s">[swap]</a>""" % (repo1.repo_name, rev1, rev2, repo2.repo_name))
+        finally:
+            RepoModel().delete(r2_id)
+            RepoModel().delete(r1_id)
+
+    def test_compare_cherry_pick_changeset_mixed_branches(self):
+        """
+
+        """
+        pass
+        #TODO write this tastecase
+
+    def test_compare_remote_branches_hg(self):
+        self.log_user()
+
+        _fork_repo(HG_FORK, 'hg')
+
+        rev1 = '56349e29c2af'
+        rev2 = '7d4bc8ec6be5'
+
+        try:
+            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,
+                                        ))            
+            response.mustcontain('%s@%s -&gt; %s@%s' % (HG_REPO, rev1, HG_FORK, rev2))
+            ## outgoing changesets between those revisions
+
+            response.mustcontain("""<a href="/%s/changeset/2dda4e345facb0ccff1a191052dd1606dba6781d">r4:2dda4e345fac</a>""" % (HG_REPO))
+            response.mustcontain("""<a href="/%s/changeset/6fff84722075f1607a30f436523403845f84cd9e">r5:6fff84722075</a>""" % (HG_REPO))
+            response.mustcontain("""<a href="/%s/changeset/7d4bc8ec6be56c0f10425afb40b6fc315a4c25e7">r6:%s</a>""" % (HG_REPO, rev2))
+
+            ## files
+            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--9c390eb52cd6">vcs/backends/hg.py</a>""" % (HG_REPO, rev1, rev2))
+            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--41b41c1f2796">vcs/backends/__init__.py</a>""" % (HG_REPO, rev1, rev2))
+            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--2f574d260608">vcs/backends/base.py</a>""" % (HG_REPO, rev1, rev2))
+        finally:
+            RepoModel().delete(HG_FORK)
+
+    def test_org_repo_new_commits_after_forking_simple_diff(self):
+        self.log_user()
+
+        repo1 = RepoModel().create_repo(repo_name='one', repo_type='hg',
+                                        description='diff-test',
+                                        owner=TEST_USER_ADMIN_LOGIN)
+
+        Session().commit()
+        r1_id = repo1.repo_id
+        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
+        repo2 = RepoModel().create_repo(repo_name='one-fork', repo_type='hg',
+                                description='compare-test',
+                                clone_uri=repo1.repo_full_path,
+                                owner=TEST_USER_ADMIN_LOGIN, fork_of='one')
+        Session().commit()
+        self.assertEqual(repo2.scm_instance.revisions, [cs0.raw_id])
+        r2_id = repo2.repo_id
+        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'
+
+        try:
+            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,
+                                        repo=r1_name,
+                                        ))            
+            #response.mustcontain('%s@%s -&gt; %s@%s' % (r2_name, rev1, r1_name, rev2))
+
+            #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',
+                content='line1',
+                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,
+                                        repo=r1_name,
+                                        bundle=False
+                                        ))
+
+            response.mustcontain('%s@%s -&gt; %s@%s' % (r2_name, rev1, r1_name, rev2))
+            response.mustcontain("""file1-line1-from-fork""")
+            response.mustcontain("""file2-line1-from-fork""")
+            response.mustcontain("""file3-line1-from-fork""")
+            self.assertFalse("""<a href="#">file2</a>""" in response.body)  # new commit from parent
+            self.assertFalse("""line1-from-new-parent"""  in response.body)
+        finally:
+            RepoModel().delete(r2_id)
+            RepoModel().delete(r1_id)
+            Session()