diff --git a/rhodecode/tests/functional/test_compare.py b/rhodecode/tests/functional/test_compare.py --- a/rhodecode/tests/functional/test_compare.py +++ b/rhodecode/tests/functional/test_compare.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- from rhodecode.tests import * from rhodecode.model.repo import RepoModel from rhodecode.model.meta import Session @@ -40,6 +41,10 @@ def _commit_change(repo, filename, conte return cs +def _commit_div(sha, msg): + return """
""" % (sha, msg) + + class TestCompareController(TestController): def setUp(self): @@ -78,29 +83,77 @@ class TestCompareController(TestControll rev1 = 'default' rev2 = 'default' - response = self.app.get(url(controller='compare', action='index', + 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', - )) + merge='1',)) - response.mustcontain('%s@%s -> %s@%s' % (repo1.repo_name, rev2, repo2.repo_name, rev1)) + 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("""""") - response.mustcontain("""""") + response.mustcontain(_commit_div(cs1.raw_id, 'commit2')) + response.mustcontain(_commit_div(cs2.raw_id, 'commit3')) response.mustcontain("""r1:%s""" % (repo2.repo_name, cs1.raw_id, cs1.short_id)) response.mustcontain("""r2:%s""" % (repo2.repo_name, cs2.raw_id, cs2.short_id)) ## files response.mustcontain("""file1""" % (repo1.repo_name, rev2, rev1, repo2.repo_name)) #swap - response.mustcontain("""[swap]""" % (repo2.repo_name, rev1, rev2, repo1.repo_name)) + response.mustcontain(""" Swap""" % (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("""r1:%s""" % (repo2.repo_name, cs1.raw_id, cs1.short_id)) + response.mustcontain("""r2:%s""" % (repo2.repo_name, cs2.raw_id, cs2.short_id)) + ## files + response.mustcontain("""file1""" % (repo1.repo_name, rev2, rev1, repo2.repo_name)) + #swap + response.mustcontain(""" Swap""" % (repo2.repo_name, rev1, rev2, repo1.repo_name)) def test_compare_forks_on_branch_extra_commits_origin_has_incomming_hg(self): self.log_user() @@ -133,28 +186,84 @@ class TestCompareController(TestControll rev1 = 'default' rev2 = 'default' - response = self.app.get(url(controller='compare', action='index', + 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='x', - )) - response.mustcontain('%s@%s -> %s@%s' % (repo1.repo_name, rev2, repo2.repo_name, 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("""""") - response.mustcontain("""""") + response.mustcontain(_commit_div(cs1.raw_id, 'commit2')) + response.mustcontain(_commit_div(cs2.raw_id, 'commit3')) response.mustcontain("""r1:%s""" % (repo2.repo_name, cs1.raw_id, cs1.short_id)) response.mustcontain("""r2:%s""" % (repo2.repo_name, cs2.raw_id, cs2.short_id)) ## files - response.mustcontain("""file1""" % (repo1.repo_name, rev2, rev1, repo2.repo_name)) + response.mustcontain("""file1""" % (repo1.repo_name, rev2, rev1, repo2.repo_name)) #swap - response.mustcontain("""[swap]""" % (repo2.repo_name, rev1, rev2, repo1.repo_name)) + response.mustcontain(""" Swap""" % (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("""r1:%s""" % (repo2.repo_name, cs1.raw_id, cs1.short_id)) + response.mustcontain("""r2:%s""" % (repo2.repo_name, cs2.raw_id, cs2.short_id)) + ## files + response.mustcontain("""file1""" % (repo1.repo_name, rev2, rev1, repo2.repo_name)) + #swap + response.mustcontain(""" Swap""" % (repo2.repo_name, rev1, rev2, repo1.repo_name)) def test_compare_cherry_pick_changesets_from_bottom(self): @@ -195,7 +304,7 @@ class TestCompareController(TestControll 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', + 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 @@ -204,13 +313,14 @@ class TestCompareController(TestControll other_ref=cs4.short_id, merge='True', )) - response.mustcontain('%s@%s -> %s@%s' % (repo2.repo_name, cs1.short_id, repo1.repo_name, cs4.short_id)) + 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("""""") - response.mustcontain("""""") - response.mustcontain("""""") + 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("""r2:%s""" % (repo1.repo_name, cs2.raw_id, cs2.short_id)) response.mustcontain("""r3:%s""" % (repo1.repo_name, cs3.raw_id, cs3.short_id)) @@ -255,22 +365,23 @@ class TestCompareController(TestControll 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', + + 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', - )) + merge='1',)) - response.mustcontain('%s@%s -> %s@%s' % (repo1.repo_name, cs2.short_id, repo1.repo_name, cs5.short_id)) + 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("""""") - response.mustcontain("""""") - response.mustcontain("""""") + 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("""r3:%s""" % (repo1.repo_name, cs3.raw_id, cs3.short_id)) response.mustcontain("""r4:%s""" % (repo1.repo_name, cs4.raw_id, cs4.short_id)) @@ -279,8 +390,8 @@ class TestCompareController(TestControll response.mustcontain("""#C--826e8142e6ba">file1""") def test_compare_cherry_pick_changeset_mixed_branches(self): - pass - #TODO write this tastecase + #TODO: write this + assert 1 def test_compare_remote_branches_hg(self): self.log_user() @@ -290,16 +401,17 @@ class TestCompareController(TestControll rev1 = '56349e29c2af' rev2 = '7d4bc8ec6be5' - response = self.app.get(url(controller='compare', action='index', + 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 -> %s@%s' % (HG_REPO, rev1, HG_FORK, rev2)) + merge='1',)) + + response.mustcontain('%s@%s' % (HG_REPO, rev1)) + response.mustcontain('%s@%s' % (HG_FORK, rev2)) ## outgoing changesets between those revisions response.mustcontain("""r4:2dda4e345fac""" % (HG_FORK)) @@ -311,7 +423,37 @@ class TestCompareController(TestControll response.mustcontain("""vcs/backends/__init__.py""" % (HG_REPO, rev1, rev2, HG_FORK)) response.mustcontain("""vcs/backends/base.py""" % (HG_REPO, rev1, rev2, HG_FORK)) - def test_org_repo_new_commits_after_forking_simple_diff(self): + 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("""r4:49d3fd156b6f""" % (GIT_FORK)) + response.mustcontain("""r5:2d1028c05466""" % (GIT_FORK)) + response.mustcontain("""r6:%s""" % (GIT_FORK, rev2[:12])) + + ## files + response.mustcontain("""vcs/backends/hg.py""" % (GIT_REPO, rev1, rev2, GIT_FORK)) + response.mustcontain("""vcs/backends/__init__.py""" % (GIT_REPO, rev1, rev2, GIT_FORK)) + response.mustcontain("""vcs/backends/base.py""" % (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', @@ -355,28 +497,20 @@ class TestCompareController(TestControll rev1 = 'default' rev2 = 'default' - response = self.app.get(url(controller='compare', action='index', + 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 -> %s@%s' % (r2_name, rev1, r1_name, rev2)) + merge='1',)) + + response.mustcontain('%s@%s' % (r2_name, rev1)) + response.mustcontain('%s@%s' % (r1_name, rev2)) response.mustcontain('No files') response.mustcontain('No changesets') - #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' -# ) cs0 = _commit_change(repo=r1_name, filename='file2', content='line1-added-after-fork', message='commit2-parent', vcs_type='hg', parent=None, newfile=True) @@ -384,7 +518,7 @@ class TestCompareController(TestControll #compare ! rev1 = 'default' rev2 = 'default' - response = self.app.get(url(controller='compare', action='index', + response = self.app.get(url('compare_url', repo_name=r2_name, org_ref_type="branch", org_ref=rev1, @@ -394,8 +528,91 @@ class TestCompareController(TestControll merge='1', )) - response.mustcontain('%s@%s -> %s@%s' % (r2_name, rev1, r1_name, rev2)) + 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""")