Show More
@@ -0,0 +1,244 b'' | |||||
|
1 | # -*- coding: utf-8 -*- | |||
|
2 | ||||
|
3 | # Copyright (C) 2010-2017 RhodeCode GmbH | |||
|
4 | # | |||
|
5 | # This program is free software: you can redistribute it and/or modify | |||
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |||
|
7 | # (only), as published by the Free Software Foundation. | |||
|
8 | # | |||
|
9 | # This program is distributed in the hope that it will be useful, | |||
|
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
12 | # GNU General Public License for more details. | |||
|
13 | # | |||
|
14 | # You should have received a copy of the GNU Affero General Public License | |||
|
15 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
|
16 | # | |||
|
17 | # This program is dual-licensed. If you wish to learn more about the | |||
|
18 | # RhodeCode Enterprise Edition, including its added features, Support services, | |||
|
19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ | |||
|
20 | ||||
|
21 | import os | |||
|
22 | ||||
|
23 | import pytest | |||
|
24 | ||||
|
25 | from rhodecode.lib.vcs.backends.git.repository import GitRepository | |||
|
26 | from rhodecode.lib.vcs.backends.hg.repository import MercurialRepository | |||
|
27 | from rhodecode.lib.vcs.nodes import FileNode | |||
|
28 | from rhodecode.model.meta import Session | |||
|
29 | ||||
|
30 | from rhodecode.tests.vcs_operations import ( | |||
|
31 | Command, _check_proper_clone, _check_proper_git_push, _check_proper_hg_push) | |||
|
32 | ||||
|
33 | ||||
|
34 | @pytest.mark.usefixtures("disable_locking") | |||
|
35 | class TestVCSOperationsSpecial(object): | |||
|
36 | ||||
|
37 | def test_git_sets_default_branch_if_not_master( | |||
|
38 | self, backend_git, tmpdir, rc_web_server): | |||
|
39 | empty_repo = backend_git.create_repo() | |||
|
40 | clone_url = rc_web_server.repo_clone_url(empty_repo.repo_name) | |||
|
41 | ||||
|
42 | cmd = Command(tmpdir.strpath) | |||
|
43 | cmd.execute('git clone', clone_url) | |||
|
44 | ||||
|
45 | repo = GitRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |||
|
46 | repo.in_memory_commit.add(FileNode('file', content='')) | |||
|
47 | repo.in_memory_commit.commit( | |||
|
48 | message='Commit on branch test', | |||
|
49 | author='Automatic test', | |||
|
50 | branch='test') | |||
|
51 | ||||
|
52 | repo_cmd = Command(repo.path) | |||
|
53 | stdout, stderr = repo_cmd.execute('git push --verbose origin test') | |||
|
54 | _check_proper_git_push( | |||
|
55 | stdout, stderr, branch='test', should_set_default_branch=True) | |||
|
56 | ||||
|
57 | stdout, stderr = cmd.execute( | |||
|
58 | 'git clone', clone_url, empty_repo.repo_name + '-clone') | |||
|
59 | _check_proper_clone(stdout, stderr, 'git') | |||
|
60 | ||||
|
61 | # Doing an explicit commit in order to get latest user logs on MySQL | |||
|
62 | Session().commit() | |||
|
63 | ||||
|
64 | # def test_git_fetches_from_remote_repository_with_annotated_tags( | |||
|
65 | # self, backend_git, rc_web_server): | |||
|
66 | # # Note: This is a test specific to the git backend. It checks the | |||
|
67 | # # integration of fetching from a remote repository which contains | |||
|
68 | # # annotated tags. | |||
|
69 | # | |||
|
70 | # # Dulwich shows this specific behavior only when | |||
|
71 | # # operating against a remote repository. | |||
|
72 | # source_repo = backend_git['annotated-tag'] | |||
|
73 | # target_vcs_repo = backend_git.create_repo().scm_instance() | |||
|
74 | # target_vcs_repo.fetch(rc_web_server.repo_clone_url(source_repo.repo_name)) | |||
|
75 | ||||
|
76 | def test_git_push_shows_pull_request_refs(self, backend_git, rc_web_server, tmpdir): | |||
|
77 | """ | |||
|
78 | test if remote info about refs is visible | |||
|
79 | """ | |||
|
80 | empty_repo = backend_git.create_repo() | |||
|
81 | ||||
|
82 | clone_url = rc_web_server.repo_clone_url(empty_repo.repo_name) | |||
|
83 | ||||
|
84 | cmd = Command(tmpdir.strpath) | |||
|
85 | cmd.execute('git clone', clone_url) | |||
|
86 | ||||
|
87 | repo = GitRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |||
|
88 | repo.in_memory_commit.add(FileNode('readme.md', content='## Hello')) | |||
|
89 | repo.in_memory_commit.commit( | |||
|
90 | message='Commit on branch Master', | |||
|
91 | author='Automatic test', | |||
|
92 | branch='master') | |||
|
93 | ||||
|
94 | repo_cmd = Command(repo.path) | |||
|
95 | stdout, stderr = repo_cmd.execute('git push --verbose origin master') | |||
|
96 | _check_proper_git_push(stdout, stderr, branch='master') | |||
|
97 | ||||
|
98 | ref = '{}/{}/pull-request/new?branch=master'.format( | |||
|
99 | rc_web_server.host_url(), empty_repo.repo_name) | |||
|
100 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stderr | |||
|
101 | assert 'remote: RhodeCode: push completed' in stderr | |||
|
102 | ||||
|
103 | # push on the same branch | |||
|
104 | repo = GitRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |||
|
105 | repo.in_memory_commit.add(FileNode('setup.py', content='print\n')) | |||
|
106 | repo.in_memory_commit.commit( | |||
|
107 | message='Commit2 on branch Master', | |||
|
108 | author='Automatic test2', | |||
|
109 | branch='master') | |||
|
110 | ||||
|
111 | repo_cmd = Command(repo.path) | |||
|
112 | stdout, stderr = repo_cmd.execute('git push --verbose origin master') | |||
|
113 | _check_proper_git_push(stdout, stderr, branch='master') | |||
|
114 | ||||
|
115 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stderr | |||
|
116 | assert 'remote: RhodeCode: push completed' in stderr | |||
|
117 | ||||
|
118 | # new Branch | |||
|
119 | repo = GitRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |||
|
120 | repo.in_memory_commit.add(FileNode('feature1.py', content='## Hello world')) | |||
|
121 | repo.in_memory_commit.commit( | |||
|
122 | message='Commit on branch feature', | |||
|
123 | author='Automatic test', | |||
|
124 | branch='feature') | |||
|
125 | ||||
|
126 | repo_cmd = Command(repo.path) | |||
|
127 | stdout, stderr = repo_cmd.execute('git push --verbose origin feature') | |||
|
128 | _check_proper_git_push(stdout, stderr, branch='feature') | |||
|
129 | ||||
|
130 | ref = '{}/{}/pull-request/new?branch=feature'.format( | |||
|
131 | rc_web_server.host_url(), empty_repo.repo_name) | |||
|
132 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stderr | |||
|
133 | assert 'remote: RhodeCode: push completed' in stderr | |||
|
134 | ||||
|
135 | def test_hg_push_shows_pull_request_refs(self, backend_hg, rc_web_server, tmpdir): | |||
|
136 | empty_repo = backend_hg.create_repo() | |||
|
137 | ||||
|
138 | clone_url = rc_web_server.repo_clone_url(empty_repo.repo_name) | |||
|
139 | ||||
|
140 | cmd = Command(tmpdir.strpath) | |||
|
141 | cmd.execute('hg clone', clone_url) | |||
|
142 | ||||
|
143 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |||
|
144 | repo.in_memory_commit.add(FileNode(u'readme.md', content=u'## Hello')) | |||
|
145 | repo.in_memory_commit.commit( | |||
|
146 | message=u'Commit on branch default', | |||
|
147 | author=u'Automatic test', | |||
|
148 | branch='default') | |||
|
149 | ||||
|
150 | repo_cmd = Command(repo.path) | |||
|
151 | repo_cmd.execute('hg checkout default') | |||
|
152 | ||||
|
153 | stdout, stderr = repo_cmd.execute('hg push --verbose', clone_url) | |||
|
154 | _check_proper_hg_push(stdout, stderr, branch='default') | |||
|
155 | ||||
|
156 | ref = '{}/{}/pull-request/new?branch=default'.format( | |||
|
157 | rc_web_server.host_url(), empty_repo.repo_name) | |||
|
158 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout | |||
|
159 | assert 'remote: RhodeCode: push completed' in stdout | |||
|
160 | ||||
|
161 | # push on the same branch | |||
|
162 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |||
|
163 | repo.in_memory_commit.add(FileNode(u'setup.py', content=u'print\n')) | |||
|
164 | repo.in_memory_commit.commit( | |||
|
165 | message=u'Commit2 on branch default', | |||
|
166 | author=u'Automatic test2', | |||
|
167 | branch=u'default') | |||
|
168 | ||||
|
169 | repo_cmd = Command(repo.path) | |||
|
170 | repo_cmd.execute('hg checkout default') | |||
|
171 | ||||
|
172 | stdout, stderr = repo_cmd.execute('hg push --verbose', clone_url) | |||
|
173 | _check_proper_hg_push(stdout, stderr, branch='default') | |||
|
174 | ||||
|
175 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout | |||
|
176 | assert 'remote: RhodeCode: push completed' in stdout | |||
|
177 | ||||
|
178 | # new Branch | |||
|
179 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |||
|
180 | repo.in_memory_commit.add(FileNode(u'feature1.py', content=u'## Hello world')) | |||
|
181 | repo.in_memory_commit.commit( | |||
|
182 | message=u'Commit on branch feature', | |||
|
183 | author=u'Automatic test', | |||
|
184 | branch=u'feature') | |||
|
185 | ||||
|
186 | repo_cmd = Command(repo.path) | |||
|
187 | repo_cmd.execute('hg checkout feature') | |||
|
188 | ||||
|
189 | stdout, stderr = repo_cmd.execute('hg push --new-branch --verbose', clone_url) | |||
|
190 | _check_proper_hg_push(stdout, stderr, branch='feature') | |||
|
191 | ||||
|
192 | ref = '{}/{}/pull-request/new?branch=feature'.format( | |||
|
193 | rc_web_server.host_url(), empty_repo.repo_name) | |||
|
194 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout | |||
|
195 | assert 'remote: RhodeCode: push completed' in stdout | |||
|
196 | ||||
|
197 | def test_hg_push_shows_pull_request_refs_book(self, backend_hg, rc_web_server, tmpdir): | |||
|
198 | empty_repo = backend_hg.create_repo() | |||
|
199 | ||||
|
200 | clone_url = rc_web_server.repo_clone_url(empty_repo.repo_name) | |||
|
201 | ||||
|
202 | cmd = Command(tmpdir.strpath) | |||
|
203 | cmd.execute('hg clone', clone_url) | |||
|
204 | ||||
|
205 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |||
|
206 | repo.in_memory_commit.add(FileNode(u'readme.md', content=u'## Hello')) | |||
|
207 | repo.in_memory_commit.commit( | |||
|
208 | message=u'Commit on branch default', | |||
|
209 | author=u'Automatic test', | |||
|
210 | branch='default') | |||
|
211 | ||||
|
212 | repo_cmd = Command(repo.path) | |||
|
213 | repo_cmd.execute('hg checkout default') | |||
|
214 | ||||
|
215 | stdout, stderr = repo_cmd.execute('hg push --verbose', clone_url) | |||
|
216 | _check_proper_hg_push(stdout, stderr, branch='default') | |||
|
217 | ||||
|
218 | ref = '{}/{}/pull-request/new?branch=default'.format( | |||
|
219 | rc_web_server.host_url(), empty_repo.repo_name) | |||
|
220 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout | |||
|
221 | assert 'remote: RhodeCode: push completed' in stdout | |||
|
222 | ||||
|
223 | # add bookmark | |||
|
224 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |||
|
225 | repo.in_memory_commit.add(FileNode(u'setup.py', content=u'print\n')) | |||
|
226 | repo.in_memory_commit.commit( | |||
|
227 | message=u'Commit2 on branch default', | |||
|
228 | author=u'Automatic test2', | |||
|
229 | branch=u'default') | |||
|
230 | ||||
|
231 | repo_cmd = Command(repo.path) | |||
|
232 | repo_cmd.execute('hg checkout default') | |||
|
233 | repo_cmd.execute('hg bookmark feature2') | |||
|
234 | stdout, stderr = repo_cmd.execute('hg push -B feature2 --verbose', clone_url) | |||
|
235 | _check_proper_hg_push(stdout, stderr, branch='default') | |||
|
236 | ||||
|
237 | ref = '{}/{}/pull-request/new?branch=default'.format( | |||
|
238 | rc_web_server.host_url(), empty_repo.repo_name) | |||
|
239 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout | |||
|
240 | ref = '{}/{}/pull-request/new?bookmark=feature2'.format( | |||
|
241 | rc_web_server.host_url(), empty_repo.repo_name) | |||
|
242 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout | |||
|
243 | assert 'remote: RhodeCode: push completed' in stdout | |||
|
244 | assert 'exporting bookmark feature2' in stdout |
@@ -20,23 +20,21 b'' | |||||
20 |
|
20 | |||
21 | import os |
|
21 | import os | |
22 | import json |
|
22 | import json | |
|
23 | import time | |||
23 | import platform |
|
24 | import platform | |
24 | import socket |
|
25 | import socket | |
25 | import tempfile |
|
26 | import tempfile | |
|
27 | import subprocess32 | |||
26 |
|
28 | |||
27 | import subprocess32 |
|
|||
28 | import time |
|
|||
29 | from urllib2 import urlopen, URLError |
|
29 | from urllib2 import urlopen, URLError | |
30 |
|
30 | |||
31 | import configobj |
|
31 | import configobj | |
32 | import pytest |
|
32 | import pytest | |
33 |
|
33 | |||
34 | import pyramid.paster |
|
|||
35 |
|
34 | |||
36 | from rhodecode.lib.pyramid_utils import get_app_config |
|
35 | from rhodecode.lib.pyramid_utils import get_app_config | |
37 | from rhodecode.tests.fixture import TestINI |
|
36 | from rhodecode.tests.fixture import TestINI | |
38 | import rhodecode |
|
37 | from rhodecode.tests.vcs_operations.conftest import get_host_url, get_port | |
39 | from rhodecode.tests.other.vcs_operations.conftest import get_host_url, get_port |
|
|||
40 |
|
38 | |||
41 | VCSSERVER_LOG = os.path.join(tempfile.gettempdir(), 'rc-vcsserver.log') |
|
39 | VCSSERVER_LOG = os.path.join(tempfile.gettempdir(), 'rc-vcsserver.log') | |
42 |
|
40 |
@@ -31,6 +31,11 b' from rhodecode.tests import get_new_dir' | |||||
31 | from rhodecode.tests.utils import check_skip_backends, check_xfail_backends |
|
31 | from rhodecode.tests.utils import check_skip_backends, check_xfail_backends | |
32 |
|
32 | |||
33 |
|
33 | |||
|
34 | @pytest.fixture(scope="session") | |||
|
35 | def vcs_server_config_override(): | |||
|
36 | return ({'server:main': {'workers': 1}},) | |||
|
37 | ||||
|
38 | ||||
34 | @pytest.fixture() |
|
39 | @pytest.fixture() | |
35 | def vcs_repository_support( |
|
40 | def vcs_repository_support( | |
36 | request, backend_alias, baseapp, _vcs_repo_container): |
|
41 | request, backend_alias, baseapp, _vcs_repo_container): |
1 | NO CONTENT: file renamed from rhodecode/tests/other/vcs_operations/__init__.py to rhodecode/tests/vcs_operations/__init__.py |
|
NO CONTENT: file renamed from rhodecode/tests/other/vcs_operations/__init__.py to rhodecode/tests/vcs_operations/__init__.py |
@@ -141,6 +141,11 b' def repos(request, baseapp):' | |||||
141 | fixture.destroy_repo_group(repo_group_id) |
|
141 | fixture.destroy_repo_group(repo_group_id) | |
142 |
|
142 | |||
143 |
|
143 | |||
|
144 | @pytest.fixture(scope="session") | |||
|
145 | def vcs_server_config_override(): | |||
|
146 | return ({'server:main': {'workers': 2}},) | |||
|
147 | ||||
|
148 | ||||
144 | @pytest.fixture(scope="module") |
|
149 | @pytest.fixture(scope="module") | |
145 | def rc_web_server_config(testini_factory): |
|
150 | def rc_web_server_config(testini_factory): | |
146 | """ |
|
151 | """ |
@@ -30,7 +30,7 b' Test suite for making push/pull operatio' | |||||
30 | import pytest |
|
30 | import pytest | |
31 |
|
31 | |||
32 | from rhodecode.tests import (GIT_REPO, HG_REPO) |
|
32 | from rhodecode.tests import (GIT_REPO, HG_REPO) | |
33 |
from rhodecode.tests. |
|
33 | from rhodecode.tests.vcs_operations import Command | |
34 |
|
34 | |||
35 |
|
35 | |||
36 | # override rc_web_server_config fixture with custom INI |
|
36 | # override rc_web_server_config fixture with custom INI |
@@ -30,7 +30,7 b' Test suite for making push/pull operatio' | |||||
30 | import pytest |
|
30 | import pytest | |
31 |
|
31 | |||
32 | from rhodecode.tests import (GIT_REPO, HG_REPO) |
|
32 | from rhodecode.tests import (GIT_REPO, HG_REPO) | |
33 |
from rhodecode.tests. |
|
33 | from rhodecode.tests.vcs_operations import Command | |
34 |
|
34 | |||
35 |
|
35 | |||
36 | # override rc_web_server_config fixture with custom INI |
|
36 | # override rc_web_server_config fixture with custom INI |
@@ -30,7 +30,7 b' Test suite for making push/pull operatio' | |||||
30 | import pytest |
|
30 | import pytest | |
31 |
|
31 | |||
32 | from rhodecode.tests import (GIT_REPO, HG_REPO) |
|
32 | from rhodecode.tests import (GIT_REPO, HG_REPO) | |
33 |
from rhodecode.tests. |
|
33 | from rhodecode.tests.vcs_operations import Command | |
34 |
|
34 | |||
35 |
|
35 | |||
36 | # override rc_web_server_config fixture with custom INI |
|
36 | # override rc_web_server_config fixture with custom INI |
@@ -33,7 +33,7 b' import pytest' | |||||
33 | from rhodecode.lib.vcs.backends.git.repository import GitRepository |
|
33 | from rhodecode.lib.vcs.backends.git.repository import GitRepository | |
34 | from rhodecode.lib.vcs.nodes import FileNode |
|
34 | from rhodecode.lib.vcs.nodes import FileNode | |
35 | from rhodecode.tests import GIT_REPO |
|
35 | from rhodecode.tests import GIT_REPO | |
36 |
from rhodecode.tests. |
|
36 | from rhodecode.tests.vcs_operations import Command | |
37 | from .test_vcs_operations import _check_proper_clone, _check_proper_git_push |
|
37 | from .test_vcs_operations import _check_proper_clone, _check_proper_git_push | |
38 |
|
38 | |||
39 |
|
39 |
@@ -28,14 +28,10 b' Test suite for making push/pull operatio' | |||||
28 | """ |
|
28 | """ | |
29 |
|
29 | |||
30 |
|
30 | |||
31 | import os |
|
|||
32 | import time |
|
31 | import time | |
33 |
|
32 | |||
34 | import pytest |
|
33 | import pytest | |
35 |
|
34 | |||
36 | from rhodecode.lib.vcs.backends.git.repository import GitRepository |
|
|||
37 | from rhodecode.lib.vcs.backends.hg.repository import MercurialRepository |
|
|||
38 | from rhodecode.lib.vcs.nodes import FileNode |
|
|||
39 | from rhodecode.model.auth_token import AuthTokenModel |
|
35 | from rhodecode.model.auth_token import AuthTokenModel | |
40 | from rhodecode.model.db import Repository, UserIpMap, CacheKey |
|
36 | from rhodecode.model.db import Repository, UserIpMap, CacheKey | |
41 | from rhodecode.model.meta import Session |
|
37 | from rhodecode.model.meta import Session | |
@@ -43,15 +39,9 b' from rhodecode.model.repo import RepoMod' | |||||
43 | from rhodecode.model.user import UserModel |
|
39 | from rhodecode.model.user import UserModel | |
44 | from rhodecode.tests import (GIT_REPO, HG_REPO, TEST_USER_ADMIN_LOGIN) |
|
40 | from rhodecode.tests import (GIT_REPO, HG_REPO, TEST_USER_ADMIN_LOGIN) | |
45 |
|
41 | |||
46 |
from rhodecode.tests. |
|
42 | from rhodecode.tests.vcs_operations import ( | |
47 | Command, _check_proper_clone, _check_proper_git_push, |
|
43 | Command, _check_proper_clone, _check_proper_git_push, | |
48 | _check_proper_hg_push, _add_files_and_push, |
|
44 | _add_files_and_push, HG_REPO_WITH_GROUP, GIT_REPO_WITH_GROUP) | |
49 | HG_REPO_WITH_GROUP, GIT_REPO_WITH_GROUP) |
|
|||
50 |
|
||||
51 |
|
||||
52 | @pytest.fixture(scope="session") |
|
|||
53 | def vcs_server_config_override(): |
|
|||
54 | return ({'server:main': {'workers': 2}},) |
|
|||
55 |
|
45 | |||
56 |
|
46 | |||
57 | @pytest.mark.usefixtures("disable_locking", "disable_anonymous_user") |
|
47 | @pytest.mark.usefixtures("disable_locking", "disable_anonymous_user") | |
@@ -468,215 +458,3 b' class TestVCSOperations(object):' | |||||
468 | 'hg clone', clone_url, tmpdir.strpath) |
|
458 | 'hg clone', clone_url, tmpdir.strpath) | |
469 | assert 'abort: authorization failed' in stderr |
|
459 | assert 'abort: authorization failed' in stderr | |
470 |
|
460 | |||
471 |
|
||||
472 | @pytest.mark.usefixtures("disable_locking") |
|
|||
473 | class TestVCSOperationsSpecial(object): |
|
|||
474 |
|
||||
475 | def test_git_sets_default_branch_if_not_master( |
|
|||
476 | self, backend_git, tmpdir, rc_web_server): |
|
|||
477 | empty_repo = backend_git.create_repo() |
|
|||
478 | clone_url = rc_web_server.repo_clone_url(empty_repo.repo_name) |
|
|||
479 |
|
||||
480 | cmd = Command(tmpdir.strpath) |
|
|||
481 | cmd.execute('git clone', clone_url) |
|
|||
482 |
|
||||
483 | repo = GitRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) |
|
|||
484 | repo.in_memory_commit.add(FileNode('file', content='')) |
|
|||
485 | repo.in_memory_commit.commit( |
|
|||
486 | message='Commit on branch test', |
|
|||
487 | author='Automatic test', |
|
|||
488 | branch='test') |
|
|||
489 |
|
||||
490 | repo_cmd = Command(repo.path) |
|
|||
491 | stdout, stderr = repo_cmd.execute('git push --verbose origin test') |
|
|||
492 | _check_proper_git_push( |
|
|||
493 | stdout, stderr, branch='test', should_set_default_branch=True) |
|
|||
494 |
|
||||
495 | stdout, stderr = cmd.execute( |
|
|||
496 | 'git clone', clone_url, empty_repo.repo_name + '-clone') |
|
|||
497 | _check_proper_clone(stdout, stderr, 'git') |
|
|||
498 |
|
||||
499 | # Doing an explicit commit in order to get latest user logs on MySQL |
|
|||
500 | Session().commit() |
|
|||
501 |
|
||||
502 | def test_git_fetches_from_remote_repository_with_annotated_tags( |
|
|||
503 | self, backend_git, rc_web_server): |
|
|||
504 | # Note: This is a test specific to the git backend. It checks the |
|
|||
505 | # integration of fetching from a remote repository which contains |
|
|||
506 | # annotated tags. |
|
|||
507 |
|
||||
508 | # Dulwich shows this specific behavior only when |
|
|||
509 | # operating against a remote repository. |
|
|||
510 | source_repo = backend_git['annotated-tag'] |
|
|||
511 | target_vcs_repo = backend_git.create_repo().scm_instance() |
|
|||
512 | target_vcs_repo.fetch(rc_web_server.repo_clone_url(source_repo.repo_name)) |
|
|||
513 |
|
||||
514 | def test_git_push_shows_pull_request_refs(self, backend_git, rc_web_server, tmpdir): |
|
|||
515 | """ |
|
|||
516 | test if remote info about refs is visible |
|
|||
517 | """ |
|
|||
518 | empty_repo = backend_git.create_repo() |
|
|||
519 |
|
||||
520 | clone_url = rc_web_server.repo_clone_url(empty_repo.repo_name) |
|
|||
521 |
|
||||
522 | cmd = Command(tmpdir.strpath) |
|
|||
523 | cmd.execute('git clone', clone_url) |
|
|||
524 |
|
||||
525 | repo = GitRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) |
|
|||
526 | repo.in_memory_commit.add(FileNode('readme.md', content='## Hello')) |
|
|||
527 | repo.in_memory_commit.commit( |
|
|||
528 | message='Commit on branch Master', |
|
|||
529 | author='Automatic test', |
|
|||
530 | branch='master') |
|
|||
531 |
|
||||
532 | repo_cmd = Command(repo.path) |
|
|||
533 | stdout, stderr = repo_cmd.execute('git push --verbose origin master') |
|
|||
534 | _check_proper_git_push(stdout, stderr, branch='master') |
|
|||
535 |
|
||||
536 | ref = '{}/{}/pull-request/new?branch=master'.format( |
|
|||
537 | rc_web_server.host_url(), empty_repo.repo_name) |
|
|||
538 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stderr |
|
|||
539 | assert 'remote: RhodeCode: push completed' in stderr |
|
|||
540 |
|
||||
541 | # push on the same branch |
|
|||
542 | repo = GitRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) |
|
|||
543 | repo.in_memory_commit.add(FileNode('setup.py', content='print\n')) |
|
|||
544 | repo.in_memory_commit.commit( |
|
|||
545 | message='Commit2 on branch Master', |
|
|||
546 | author='Automatic test2', |
|
|||
547 | branch='master') |
|
|||
548 |
|
||||
549 | repo_cmd = Command(repo.path) |
|
|||
550 | stdout, stderr = repo_cmd.execute('git push --verbose origin master') |
|
|||
551 | _check_proper_git_push(stdout, stderr, branch='master') |
|
|||
552 |
|
||||
553 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stderr |
|
|||
554 | assert 'remote: RhodeCode: push completed' in stderr |
|
|||
555 |
|
||||
556 | # new Branch |
|
|||
557 | repo = GitRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) |
|
|||
558 | repo.in_memory_commit.add(FileNode('feature1.py', content='## Hello world')) |
|
|||
559 | repo.in_memory_commit.commit( |
|
|||
560 | message='Commit on branch feature', |
|
|||
561 | author='Automatic test', |
|
|||
562 | branch='feature') |
|
|||
563 |
|
||||
564 | repo_cmd = Command(repo.path) |
|
|||
565 | stdout, stderr = repo_cmd.execute('git push --verbose origin feature') |
|
|||
566 | _check_proper_git_push(stdout, stderr, branch='feature') |
|
|||
567 |
|
||||
568 | ref = '{}/{}/pull-request/new?branch=feature'.format( |
|
|||
569 | rc_web_server.host_url(), empty_repo.repo_name) |
|
|||
570 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stderr |
|
|||
571 | assert 'remote: RhodeCode: push completed' in stderr |
|
|||
572 |
|
||||
573 | def test_hg_push_shows_pull_request_refs(self, backend_hg, rc_web_server, tmpdir): |
|
|||
574 | empty_repo = backend_hg.create_repo() |
|
|||
575 |
|
||||
576 | clone_url = rc_web_server.repo_clone_url(empty_repo.repo_name) |
|
|||
577 |
|
||||
578 | cmd = Command(tmpdir.strpath) |
|
|||
579 | cmd.execute('hg clone', clone_url) |
|
|||
580 |
|
||||
581 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) |
|
|||
582 | repo.in_memory_commit.add(FileNode(u'readme.md', content=u'## Hello')) |
|
|||
583 | repo.in_memory_commit.commit( |
|
|||
584 | message=u'Commit on branch default', |
|
|||
585 | author=u'Automatic test', |
|
|||
586 | branch='default') |
|
|||
587 |
|
||||
588 | repo_cmd = Command(repo.path) |
|
|||
589 | repo_cmd.execute('hg checkout default') |
|
|||
590 |
|
||||
591 | stdout, stderr = repo_cmd.execute('hg push --verbose', clone_url) |
|
|||
592 | _check_proper_hg_push(stdout, stderr, branch='default') |
|
|||
593 |
|
||||
594 | ref = '{}/{}/pull-request/new?branch=default'.format( |
|
|||
595 | rc_web_server.host_url(), empty_repo.repo_name) |
|
|||
596 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout |
|
|||
597 | assert 'remote: RhodeCode: push completed' in stdout |
|
|||
598 |
|
||||
599 | # push on the same branch |
|
|||
600 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) |
|
|||
601 | repo.in_memory_commit.add(FileNode(u'setup.py', content=u'print\n')) |
|
|||
602 | repo.in_memory_commit.commit( |
|
|||
603 | message=u'Commit2 on branch default', |
|
|||
604 | author=u'Automatic test2', |
|
|||
605 | branch=u'default') |
|
|||
606 |
|
||||
607 | repo_cmd = Command(repo.path) |
|
|||
608 | repo_cmd.execute('hg checkout default') |
|
|||
609 |
|
||||
610 | stdout, stderr = repo_cmd.execute('hg push --verbose', clone_url) |
|
|||
611 | _check_proper_hg_push(stdout, stderr, branch='default') |
|
|||
612 |
|
||||
613 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout |
|
|||
614 | assert 'remote: RhodeCode: push completed' in stdout |
|
|||
615 |
|
||||
616 | # new Branch |
|
|||
617 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) |
|
|||
618 | repo.in_memory_commit.add(FileNode(u'feature1.py', content=u'## Hello world')) |
|
|||
619 | repo.in_memory_commit.commit( |
|
|||
620 | message=u'Commit on branch feature', |
|
|||
621 | author=u'Automatic test', |
|
|||
622 | branch=u'feature') |
|
|||
623 |
|
||||
624 | repo_cmd = Command(repo.path) |
|
|||
625 | repo_cmd.execute('hg checkout feature') |
|
|||
626 |
|
||||
627 | stdout, stderr = repo_cmd.execute('hg push --new-branch --verbose', clone_url) |
|
|||
628 | _check_proper_hg_push(stdout, stderr, branch='feature') |
|
|||
629 |
|
||||
630 | ref = '{}/{}/pull-request/new?branch=feature'.format( |
|
|||
631 | rc_web_server.host_url(), empty_repo.repo_name) |
|
|||
632 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout |
|
|||
633 | assert 'remote: RhodeCode: push completed' in stdout |
|
|||
634 |
|
||||
635 | def test_hg_push_shows_pull_request_refs_book(self, backend_hg, rc_web_server, tmpdir): |
|
|||
636 | empty_repo = backend_hg.create_repo() |
|
|||
637 |
|
||||
638 | clone_url = rc_web_server.repo_clone_url(empty_repo.repo_name) |
|
|||
639 |
|
||||
640 | cmd = Command(tmpdir.strpath) |
|
|||
641 | cmd.execute('hg clone', clone_url) |
|
|||
642 |
|
||||
643 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) |
|
|||
644 | repo.in_memory_commit.add(FileNode(u'readme.md', content=u'## Hello')) |
|
|||
645 | repo.in_memory_commit.commit( |
|
|||
646 | message=u'Commit on branch default', |
|
|||
647 | author=u'Automatic test', |
|
|||
648 | branch='default') |
|
|||
649 |
|
||||
650 | repo_cmd = Command(repo.path) |
|
|||
651 | repo_cmd.execute('hg checkout default') |
|
|||
652 |
|
||||
653 | stdout, stderr = repo_cmd.execute('hg push --verbose', clone_url) |
|
|||
654 | _check_proper_hg_push(stdout, stderr, branch='default') |
|
|||
655 |
|
||||
656 | ref = '{}/{}/pull-request/new?branch=default'.format( |
|
|||
657 | rc_web_server.host_url(), empty_repo.repo_name) |
|
|||
658 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout |
|
|||
659 | assert 'remote: RhodeCode: push completed' in stdout |
|
|||
660 |
|
||||
661 | # add bookmark |
|
|||
662 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) |
|
|||
663 | repo.in_memory_commit.add(FileNode(u'setup.py', content=u'print\n')) |
|
|||
664 | repo.in_memory_commit.commit( |
|
|||
665 | message=u'Commit2 on branch default', |
|
|||
666 | author=u'Automatic test2', |
|
|||
667 | branch=u'default') |
|
|||
668 |
|
||||
669 | repo_cmd = Command(repo.path) |
|
|||
670 | repo_cmd.execute('hg checkout default') |
|
|||
671 | repo_cmd.execute('hg bookmark feature2') |
|
|||
672 | stdout, stderr = repo_cmd.execute('hg push -B feature2 --verbose', clone_url) |
|
|||
673 | _check_proper_hg_push(stdout, stderr, branch='default') |
|
|||
674 |
|
||||
675 | ref = '{}/{}/pull-request/new?branch=default'.format( |
|
|||
676 | rc_web_server.host_url(), empty_repo.repo_name) |
|
|||
677 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout |
|
|||
678 | ref = '{}/{}/pull-request/new?bookmark=feature2'.format( |
|
|||
679 | rc_web_server.host_url(), empty_repo.repo_name) |
|
|||
680 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout |
|
|||
681 | assert 'remote: RhodeCode: push completed' in stdout |
|
|||
682 | assert 'exporting bookmark feature2' in stdout |
|
@@ -37,7 +37,7 b' from rhodecode.model.repo import RepoMod' | |||||
37 | from rhodecode.tests import ( |
|
37 | from rhodecode.tests import ( | |
38 | GIT_REPO, HG_REPO, TEST_USER_ADMIN_LOGIN, TEST_USER_REGULAR_LOGIN, |
|
38 | GIT_REPO, HG_REPO, TEST_USER_ADMIN_LOGIN, TEST_USER_REGULAR_LOGIN, | |
39 | TEST_USER_REGULAR_PASS) |
|
39 | TEST_USER_REGULAR_PASS) | |
40 |
from rhodecode.tests. |
|
40 | from rhodecode.tests.vcs_operations import ( | |
41 | Command, _check_proper_clone, _check_proper_git_push, _add_files_and_push) |
|
41 | Command, _check_proper_clone, _check_proper_git_push, _add_files_and_push) | |
42 |
|
42 | |||
43 |
|
43 |
@@ -37,7 +37,7 b' from rhodecode.model.repo import RepoMod' | |||||
37 | from rhodecode.tests import ( |
|
37 | from rhodecode.tests import ( | |
38 | GIT_REPO, HG_REPO, TEST_USER_ADMIN_LOGIN, TEST_USER_REGULAR_LOGIN, |
|
38 | GIT_REPO, HG_REPO, TEST_USER_ADMIN_LOGIN, TEST_USER_REGULAR_LOGIN, | |
39 | TEST_USER_REGULAR_PASS) |
|
39 | TEST_USER_REGULAR_PASS) | |
40 |
from rhodecode.tests |
|
40 | from rhodecode.tests.vcs_operations import Command, _add_files_and_push | |
41 |
|
41 | |||
42 |
|
42 | |||
43 | # override rc_web_server_config fixture with custom INI |
|
43 | # override rc_web_server_config fixture with custom INI |
@@ -36,7 +36,7 b' from rhodecode.model.integration import ' | |||||
36 | from rhodecode.model.meta import Session |
|
36 | from rhodecode.model.meta import Session | |
37 |
|
37 | |||
38 | from rhodecode.tests import GIT_REPO, HG_REPO |
|
38 | from rhodecode.tests import GIT_REPO, HG_REPO | |
39 |
from rhodecode.tests |
|
39 | from rhodecode.tests.vcs_operations import Command, _add_files_and_push | |
40 | from rhodecode.integrations.types.webhook import WebhookIntegrationType |
|
40 | from rhodecode.integrations.types.webhook import WebhookIntegrationType | |
41 |
|
41 | |||
42 |
|
42 | |||
@@ -91,11 +91,6 b' def enable_webhook_push_integration(requ' | |||||
91 | Session().commit() |
|
91 | Session().commit() | |
92 |
|
92 | |||
93 |
|
93 | |||
94 | @pytest.fixture(scope="session") |
|
|||
95 | def vcs_server_config_override(): |
|
|||
96 | return ({'server:main': {'workers': 2}},) |
|
|||
97 |
|
||||
98 |
|
||||
99 | @pytest.mark.usefixtures( |
|
94 | @pytest.mark.usefixtures( | |
100 | "disable_locking", "disable_anonymous_user", |
|
95 | "disable_locking", "disable_anonymous_user", | |
101 | "enable_webhook_push_integration") |
|
96 | "enable_webhook_push_integration") |
General Comments 0
You need to be logged in to leave comments.
Login now