view rhodecode/tests/functional/test_compare.py @ 4116:ffd45b185016 rhodecode-2.2.5-gpl

Imported some of the GPLv3'd changes from RhodeCode v2.2.5. This imports changes between changesets 21af6c4eab3d and 6177597791c2 in RhodeCode's original repository, including only changes to Python files and HTML. RhodeCode clearly licensed its changes to these files under GPLv3 in their /LICENSE file, which states the following: The Python code and integrated HTML are licensed under the GPLv3 license. (See: https://code.rhodecode.com/rhodecode/files/v2.2.5/LICENSE or http://web.archive.org/web/20140512193334/https://code.rhodecode.com/rhodecode/files/f3b123159901f15426d18e3dc395e8369f70ebe0/LICENSE for an online copy of that LICENSE file) Conservancy reviewed these changes and confirmed that they can be licensed as a whole to the Kallithea project under GPLv3-only. While some of the contents committed herein are clearly licensed GPLv3-or-later, on the whole we must assume the are GPLv3-only, since the statement above from RhodeCode indicates that they intend GPLv3-only as their license, per GPLv3ยง14 and other relevant sections of GPLv3.
author Bradley M. Kuhn <bkuhn@sfconservancy.org>
date Wed, 02 Jul 2014 19:03:13 -0400
parents dc4644865e8b
children 3c713e810e61
line wrap: on
line source

# -*- coding: utf-8 -*-
from rhodecode.tests import *
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
from rhodecode.tests.fixture import Fixture

fixture = Fixture()


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:
        nodes = {
            filename: {
                'content': content
            }
        }
        cs = ScmModel().create_nodes(
            user=TEST_USER_ADMIN_LOGIN, repo=repo,
            message=message,
            nodes=nodes,
            parent_cs=_cs,
            author=TEST_USER_ADMIN_LOGIN,
        )
    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


def _commit_div(sha, msg):
    return """<div id="C-%s" class="message" style="white-space:normal; height: 10px;width: 250px">%s</div>""" % (sha, msg)


class TestCompareController(TestController):

    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()

    def test_compare_forks_on_branch_extra_commits_hg(self):
        self.log_user()
        repo1 = fixture.create_repo('one', repo_type='hg',
                                    repo_description='diff-test',
                                    cur_user=TEST_USER_ADMIN_LOGIN)
        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)

        #fork this repo
        repo2 = fixture.create_fork('one', 'one-fork')
        self.r2_id = repo2.repo_id

        #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'

        response = self.app.get(url('compare_url',
                                    repo_name=repo1.repo_name,
                                    org_ref_type="branch",
                                    org_ref=rev2,
                                    other_repo=repo2.repo_name,
                                    other_ref_type="branch",
                                    other_ref=rev1,
                                    merge='1',))

        response.mustcontain('%s@%s' % (repo1.repo_name, rev2))
        response.mustcontain('%s@%s' % (repo2.repo_name, rev1))
        response.mustcontain("""Showing 2 commits""")
        response.mustcontain("""1 file changed with 2 insertions and 0 deletions""")

        response.mustcontain(_commit_div(cs1.raw_id, 'commit2'))
        response.mustcontain(_commit_div(cs2.raw_id, 'commit3'))

        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
        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))
        #swap
        response.mustcontain("""<a class="btn btn-small" href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=True"><i class="icon-refresh"></i> Swap</a>""" % (repo2.repo_name, rev1, rev2, repo1.repo_name))

    def test_compare_forks_on_branch_extra_commits_git(self):
        self.log_user()
        repo1 = fixture.create_repo('one-git', repo_type='git',
                                    repo_description='diff-test',
                                    cur_user=TEST_USER_ADMIN_LOGIN)
        self.r1_id = repo1.repo_id
        #commit something !
        cs0 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
                             message='commit1', vcs_type='git', parent=None, newfile=True)

        #fork this repo
        repo2 = fixture.create_fork('one-git', 'one-git-fork')
        self.r2_id = repo2.repo_id

        #add two extra commit into fork
        cs1 = _commit_change(repo2.repo_name, filename='file1', content='line1\nline2\n',
                             message='commit2', vcs_type='git', parent=cs0)

        cs2 = _commit_change(repo2.repo_name, filename='file1', content='line1\nline2\nline3\n',
                             message='commit3', vcs_type='git', parent=cs1)

        rev1 = 'master'
        rev2 = 'master'

        response = self.app.get(url('compare_url',
                                    repo_name=repo1.repo_name,
                                    org_ref_type="branch",
                                    org_ref=rev2,
                                    other_repo=repo2.repo_name,
                                    other_ref_type="branch",
                                    other_ref=rev1,
                                    merge='1',))

        response.mustcontain('%s@%s' % (repo1.repo_name, rev2))
        response.mustcontain('%s@%s' % (repo2.repo_name, rev1))
        response.mustcontain("""Showing 2 commits""")
        response.mustcontain("""1 file changed with 2 insertions and 0 deletions""")

        response.mustcontain(_commit_div(cs1.raw_id, 'commit2'))
        response.mustcontain(_commit_div(cs2.raw_id, 'commit3'))

        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
        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))
        #swap
        response.mustcontain("""<a class="btn btn-small" href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=True"><i class="icon-refresh"></i> Swap</a>""" % (repo2.repo_name, rev1, rev2, repo1.repo_name))

    def test_compare_forks_on_branch_extra_commits_origin_has_incomming_hg(self):
        self.log_user()

        repo1 = fixture.create_repo('one', repo_type='hg',
                                    repo_description='diff-test',
                                    cur_user=TEST_USER_ADMIN_LOGIN)

        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)

        #fork this repo
        repo2 = fixture.create_fork('one', 'one-fork')
        self.r2_id = repo2.repo_id

        #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'

        response = self.app.get(url('compare_url',
                                    repo_name=repo1.repo_name,
                                    org_ref_type="branch",
                                    org_ref=rev2,
                                    other_repo=repo2.repo_name,
                                    other_ref_type="branch",
                                    other_ref=rev1,
                                    merge='1',))

        response.mustcontain('%s@%s' % (repo1.repo_name, rev2))
        response.mustcontain('%s@%s' % (repo2.repo_name, rev1))
        response.mustcontain("""Showing 2 commits""")
        response.mustcontain("""1 file changed with 2 insertions and 0 deletions""")

        response.mustcontain(_commit_div(cs1.raw_id, 'commit2'))
        response.mustcontain(_commit_div(cs2.raw_id, 'commit3'))

        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
        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))
        #swap
        response.mustcontain("""<a class="btn btn-small" href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=True"><i class="icon-refresh"></i> Swap</a>""" % (repo2.repo_name, rev1, rev2, repo1.repo_name))

    def test_compare_forks_on_branch_extra_commits_origin_has_incomming_git(self):
        self.log_user()

        repo1 = fixture.create_repo('one-git', repo_type='git',
                                    repo_description='diff-test',
                                    cur_user=TEST_USER_ADMIN_LOGIN)

        self.r1_id = repo1.repo_id

        #commit something !
        cs0 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
                             message='commit1', vcs_type='git', parent=None, newfile=True)

        #fork this repo
        repo2 = fixture.create_fork('one-git', 'one-git-fork')
        self.r2_id = repo2.repo_id

        #now commit something to origin repo
        cs1_prim = _commit_change(repo1.repo_name, filename='file2', content='line1file2\n',
                                  message='commit2', vcs_type='git', 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='git', parent=cs0)

        cs2 = _commit_change(repo2.repo_name, filename='file1', content='line1\nline2\nline3\n',
                             message='commit3', vcs_type='git', parent=cs1)

        rev1 = 'master'
        rev2 = 'master'

        response = self.app.get(url('compare_url',
                                    repo_name=repo1.repo_name,
                                    org_ref_type="branch",
                                    org_ref=rev2,
                                    other_repo=repo2.repo_name,
                                    other_ref_type="branch",
                                    other_ref=rev1,
                                    merge='1',))

        response.mustcontain('%s@%s' % (repo1.repo_name, rev2))
        response.mustcontain('%s@%s' % (repo2.repo_name, rev1))
        response.mustcontain("""Showing 2 commits""")
        response.mustcontain("""1 file changed with 2 insertions and 0 deletions""")

        response.mustcontain(_commit_div(cs1.raw_id, 'commit2'))
        response.mustcontain(_commit_div(cs2.raw_id, 'commit3'))

        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
        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))
        #swap
        response.mustcontain("""<a class="btn btn-small" href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=True"><i class="icon-refresh"></i> Swap</a>""" % (repo2.repo_name, rev1, rev2, repo1.repo_name))

    def test_compare_cherry_pick_changesets_from_bottom(self):

#        repo1:
#            cs0:
#            cs1:
#        repo1-fork- in which we will cherry pick bottom changesets
#            cs0:
#            cs1:
#            cs2: x
#            cs3: x
#            cs4: x
#            cs5:
        #make repo1, and cs1+cs2
        self.log_user()

        repo1 = fixture.create_repo('repo1', repo_type='hg',
                                    repo_description='diff-test',
                                    cur_user=TEST_USER_ADMIN_LOGIN)
        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
        repo2 = fixture.create_fork('repo1', 'repo1-fork')
        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)

        response = self.app.get(url('compare_url',
                                    repo_name=repo2.repo_name,
                                    org_ref_type="rev",
                                    org_ref=cs1.short_id,  # parent of cs2, in repo2
                                    other_repo=repo1.repo_name,
                                    other_ref_type="rev",
                                    other_ref=cs4.short_id,
                                    merge='True',
                                    ))
        response.mustcontain('%s@%s' % (repo2.repo_name, cs1.short_id))
        response.mustcontain('%s@%s' % (repo1.repo_name, cs4.short_id))
        response.mustcontain("""Showing 3 commits""")
        response.mustcontain("""1 file changed with 3 insertions and 0 deletions""")

        response.mustcontain(_commit_div(cs2.raw_id, 'commit3'))
        response.mustcontain(_commit_div(cs3.raw_id, 'commit4'))
        response.mustcontain(_commit_div(cs4.raw_id, 'commit5'))

        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>""")

    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()
        repo1 = fixture.create_repo('repo1', repo_type='hg',
                                    repo_description='diff-test',
                                    cur_user=TEST_USER_ADMIN_LOGIN)
        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
        repo2 = fixture.create_fork('repo1', 'repo1-fork')
        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)

        response = self.app.get(url('compare_url',
                                    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,
                                    merge='1',))

        response.mustcontain('%s@%s' % (repo1.repo_name, cs2.short_id))
        response.mustcontain('%s@%s' % (repo1.repo_name, cs5.short_id))
        response.mustcontain("""Showing 3 commits""")
        response.mustcontain("""1 file changed with 3 insertions and 0 deletions""")

        response.mustcontain(_commit_div(cs3.raw_id, 'commit4'))
        response.mustcontain(_commit_div(cs4.raw_id, 'commit5'))
        response.mustcontain(_commit_div(cs5.raw_id, 'commit6'))

        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))
        ## files
        response.mustcontain("""#C--826e8142e6ba">file1</a>""")

    def test_compare_cherry_pick_changeset_mixed_branches(self):
        #TODO: write this
        assert 1

    def test_compare_remote_branches_hg(self):
        self.log_user()

        repo2 = fixture.create_fork(HG_REPO, HG_FORK)
        self.r2_id = repo2.repo_id
        rev1 = '56349e29c2af'
        rev2 = '7d4bc8ec6be5'

        response = self.app.get(url('compare_url',
                                    repo_name=HG_REPO,
                                    org_ref_type="rev",
                                    org_ref=rev1,
                                    other_ref_type="rev",
                                    other_ref=rev2,
                                    other_repo=HG_FORK,
                                    merge='1',))

        response.mustcontain('%s@%s' % (HG_REPO, rev1))
        response.mustcontain('%s@%s' % (HG_FORK, rev2))
        ## outgoing changesets between those revisions

        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))

        ## files
        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))

    def test_compare_remote_branches_git(self):
        self.log_user()

        repo2 = fixture.create_fork(GIT_REPO, GIT_FORK)
        self.r2_id = repo2.repo_id
        rev1 = '102607b09cdd60e2793929c4f90478be29f85a17'
        rev2 = 'd7e0d30fbcae12c90680eb095a4f5f02505ce501'

        response = self.app.get(url('compare_url',
                                    repo_name=GIT_REPO,
                                    org_ref_type="rev",
                                    org_ref=rev1,
                                    other_ref_type="rev",
                                    other_ref=rev2,
                                    other_repo=GIT_FORK,
                                    merge='1',))

        response.mustcontain('%s@%s' % (GIT_REPO, rev1))
        response.mustcontain('%s@%s' % (GIT_FORK, rev2))
        ## outgoing changesets between those revisions

        response.mustcontain("""<a href="/%s/changeset/49d3fd156b6f7db46313fac355dca1a0b94a0017">r4:49d3fd156b6f</a>""" % (GIT_FORK))
        response.mustcontain("""<a href="/%s/changeset/2d1028c054665b962fa3d307adfc923ddd528038">r5:2d1028c05466</a>""" % (GIT_FORK))
        response.mustcontain("""<a href="/%s/changeset/d7e0d30fbcae12c90680eb095a4f5f02505ce501">r6:%s</a>""" % (GIT_FORK, rev2[:12]))

        ## files
        response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s?other_repo=%s&amp;merge=1#C--9c390eb52cd6">vcs/backends/hg.py</a>""" % (GIT_REPO, rev1, rev2, GIT_FORK))
        response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s?other_repo=%s&amp;merge=1#C--41b41c1f2796">vcs/backends/__init__.py</a>""" % (GIT_REPO, rev1, rev2, GIT_FORK))
        response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s?other_repo=%s&amp;merge=1#C--2f574d260608">vcs/backends/base.py</a>""" % (GIT_REPO, rev1, rev2, GIT_FORK))

    def test_org_repo_new_commits_after_forking_simple_diff_hg(self):
        self.log_user()

        repo1 = fixture.create_repo('one', repo_type='hg',
                                    repo_description='diff-test',
                                    cur_user=TEST_USER_ADMIN_LOGIN)

        self.r1_id = repo1.repo_id
        r1_name = repo1.repo_name

        cs0 = _commit_change(repo=r1_name, filename='file1',
                       content='line1', message='commit1', vcs_type='hg',
                       newfile=True)
        Session().commit()
        self.assertEqual(repo1.scm_instance.revisions, [cs0.raw_id])
        #fork the repo1
        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')
        Session().commit()
        self.assertEqual(repo2.scm_instance.revisions, [cs0.raw_id])
        self.r2_id = repo2.repo_id
        r2_name = repo2.repo_name


        cs1 = _commit_change(repo=r2_name, filename='file1-fork',
                       content='file1-line1-from-fork', message='commit1-fork',
                       vcs_type='hg', parent=repo2.scm_instance[-1],
                       newfile=True)

        cs2 = _commit_change(repo=r2_name, filename='file2-fork',
                       content='file2-line1-from-fork', message='commit2-fork',
                       vcs_type='hg', parent=cs1,
                       newfile=True)

        cs3 = _commit_change(repo=r2_name, filename='file3-fork',
                       content='file3-line1-from-fork', message='commit3-fork',
                       vcs_type='hg', parent=cs2, newfile=True)
        #compare !
        rev1 = 'default'
        rev2 = 'default'

        response = self.app.get(url('compare_url',
                                    repo_name=r2_name,
                                    org_ref_type="branch",
                                    org_ref=rev1,
                                    other_ref_type="branch",
                                    other_ref=rev2,
                                    other_repo=r1_name,
                                    merge='1',))

        response.mustcontain('%s@%s' % (r2_name, rev1))
        response.mustcontain('%s@%s' % (r1_name, rev2))
        response.mustcontain('No files')
        response.mustcontain('No changesets')

        cs0 = _commit_change(repo=r1_name, filename='file2',
                    content='line1-added-after-fork', message='commit2-parent',
                    vcs_type='hg', parent=None, newfile=True)

        #compare !
        rev1 = 'default'
        rev2 = 'default'
        response = self.app.get(url('compare_url',
                                    repo_name=r2_name,
                                    org_ref_type="branch",
                                    org_ref=rev1,
                                    other_ref_type="branch",
                                    other_ref=rev2,
                                    other_repo=r1_name,
                                    merge='1',
                                    ))

        response.mustcontain('%s@%s' % (r2_name, rev1))
        response.mustcontain('%s@%s' % (r1_name, rev2))

        response.mustcontain("""commit2-parent""")
        response.mustcontain("""1 file changed with 1 insertions and 0 deletions""")
        response.mustcontain("""line1-added-after-fork""")

    def test_org_repo_new_commits_after_forking_simple_diff_git(self):
        self.log_user()

        repo1 = fixture.create_repo('one-git', repo_type='git',
                                    repo_description='diff-test',
                                    cur_user=TEST_USER_ADMIN_LOGIN)

        self.r1_id = repo1.repo_id
        r1_name = repo1.repo_name

        cs0 = _commit_change(repo=r1_name, filename='file1',
                       content='line1', message='commit1', vcs_type='git',
                       newfile=True)
        Session().commit()
        self.assertEqual(repo1.scm_instance.revisions, [cs0.raw_id])
        #fork the repo1
        repo2 = fixture.create_repo('one-git-fork', repo_type='git',
                                    repo_description='diff-test',
                                    cur_user=TEST_USER_ADMIN_LOGIN,
                                    clone_uri=repo1.repo_full_path,
                                    fork_of='one-git')
        Session().commit()
        self.assertEqual(repo2.scm_instance.revisions, [cs0.raw_id])
        self.r2_id = repo2.repo_id
        r2_name = repo2.repo_name


        cs1 = _commit_change(repo=r2_name, filename='file1-fork',
                       content='file1-line1-from-fork', message='commit1-fork',
                       vcs_type='git', parent=repo2.scm_instance[-1],
                       newfile=True)

        cs2 = _commit_change(repo=r2_name, filename='file2-fork',
                       content='file2-line1-from-fork', message='commit2-fork',
                       vcs_type='git', parent=cs1,
                       newfile=True)

        cs3 = _commit_change(repo=r2_name, filename='file3-fork',
                       content='file3-line1-from-fork', message='commit3-fork',
                       vcs_type='git', parent=cs2, newfile=True)
        #compare !
        rev1 = 'master'
        rev2 = 'master'

        response = self.app.get(url('compare_url',
                                    repo_name=r2_name,
                                    org_ref_type="branch",
                                    org_ref=rev1,
                                    other_ref_type="branch",
                                    other_ref=rev2,
                                    other_repo=r1_name,
                                    merge='1',))

        response.mustcontain('%s@%s' % (r2_name, rev1))
        response.mustcontain('%s@%s' % (r1_name, rev2))
        response.mustcontain('No files')
        response.mustcontain('No changesets')

        cs0 = _commit_change(repo=r1_name, filename='file2',
                    content='line1-added-after-fork', message='commit2-parent',
                    vcs_type='git', parent=None, newfile=True)

        #compare !
        rev1 = 'master'
        rev2 = 'master'
        response = self.app.get(url('compare_url',
                                    repo_name=r2_name,
                                    org_ref_type="branch",
                                    org_ref=rev1,
                                    other_ref_type="branch",
                                    other_ref=rev2,
                                    other_repo=r1_name,
                                    merge='1',
                                    ))

        response.mustcontain('%s@%s' % (r2_name, rev1))
        response.mustcontain('%s@%s' % (r1_name, rev2))

        response.mustcontain("""commit2-parent""")
        response.mustcontain("""1 file changed with 1 insertions and 0 deletions""")
        response.mustcontain("""line1-added-after-fork""")