diff --git a/rhodecode/api/tests/test_pull.py b/rhodecode/api/tests/test_pull.py --- a/rhodecode/api/tests/test_pull.py +++ b/rhodecode/api/tests/test_pull.py @@ -19,7 +19,7 @@ # and proprietary license terms, please see https://rhodecode.com/licenses/ import os - +import mock import pytest from rhodecode.tests import TESTS_TMP_PATH @@ -29,6 +29,7 @@ from rhodecode.api.tests.utils import ( @pytest.mark.usefixtures("testuser_api", "app") class TestPull(object): + @pytest.mark.backends("git", "hg") def test_api_pull(self, backend): r = backend.create_repo() @@ -37,12 +38,13 @@ class TestPull(object): r.clone_uri = clone_uri id_, params = build_data(self.apikey, 'pull', repoid=repo_name,) - response = api_call(self.app, params) - msg = 'Pulled from url `%s` on repo `%s`' % ( - clone_uri, repo_name) - expected = {'msg': msg, - 'repository': repo_name} - assert_ok(id_, expected, given=response.body) + with mock.patch('rhodecode.model.scm.url_validator'): + response = api_call(self.app, params) + msg = 'Pulled from url `%s` on repo `%s`' % ( + clone_uri, repo_name) + expected = {'msg': msg, + 'repository': repo_name} + assert_ok(id_, expected, given=response.body) def test_api_pull_error(self, backend): id_, params = build_data( diff --git a/rhodecode/api/tests/test_update_repo.py b/rhodecode/api/tests/test_update_repo.py --- a/rhodecode/api/tests/test_update_repo.py +++ b/rhodecode/api/tests/test_update_repo.py @@ -56,9 +56,15 @@ class TestApiUpdateRepo(object): ({'clone_uri': ''}, {'clone_uri': ''}), + ({'clone_uri': 'http://example.com/repo_pull'}, + {'clone_uri': 'http://example.com/repo_pull'}), + ({'push_uri': ''}, {'push_uri': ''}), + ({'push_uri': 'http://example.com/repo_push'}, + {'push_uri': 'http://example.com/repo_push'}), + ({'landing_rev': 'rev:tip'}, {'landing_rev': ['rev', 'tip']}), diff --git a/rhodecode/model/scm.py b/rhodecode/model/scm.py --- a/rhodecode/model/scm.py +++ b/rhodecode/model/scm.py @@ -377,7 +377,7 @@ class ScmModel(BaseModel): self.sa.add(repo) return repo - def pull_changes(self, repo, username, remote_uri=None): + def pull_changes(self, repo, username, remote_uri=None, validate_uri=True): dbrepo = self._get_repo(repo) remote_uri = remote_uri or dbrepo.clone_uri if not remote_uri: @@ -390,8 +390,9 @@ class ScmModel(BaseModel): # NOTE(marcink): add extra validation so we skip invalid urls # this is due this tasks can be executed via scheduler without # proper validation of remote_uri - config = make_db_config(clear_session=False) - url_validator(remote_uri, dbrepo.repo_type, config) + if validate_uri: + config = make_db_config(clear_session=False) + url_validator(remote_uri, dbrepo.repo_type, config) except InvalidCloneUrl: raise @@ -405,7 +406,7 @@ class ScmModel(BaseModel): log.error(traceback.format_exc()) raise - def push_changes(self, repo, username, remote_uri=None): + def push_changes(self, repo, username, remote_uri=None, validate_uri=True): dbrepo = self._get_repo(repo) remote_uri = remote_uri or dbrepo.push_uri if not remote_uri: @@ -418,8 +419,9 @@ class ScmModel(BaseModel): # NOTE(marcink): add extra validation so we skip invalid urls # this is due this tasks can be executed via scheduler without # proper validation of remote_uri - config = make_db_config(clear_session=False) - url_validator(remote_uri, dbrepo.repo_type, config) + if validate_uri: + config = make_db_config(clear_session=False) + url_validator(remote_uri, dbrepo.repo_type, config) except InvalidCloneUrl: raise