diff --git a/rhodecode/lib/utils2.py b/rhodecode/lib/utils2.py index 6bd0dba5..35e56631 100644 --- a/rhodecode/lib/utils2.py +++ b/rhodecode/lib/utils2.py @@ -23,6 +23,8 @@ Some simple helper functions import collections import datetime +import os + import dateutil.relativedelta import logging import re @@ -498,6 +500,10 @@ def get_clone_url(request, uri_tmpl, repo_name, repo_id, repo_type, **override): parsed_url = urlobject.URLObject(qualified_home_url) decoded_path = safe_str(urllib.parse.unquote(parsed_url.path.rstrip("/"))) + default_ssh_port = "" + if os.environ.get("RC_SSH_PORT"): + default_ssh_port = f":{os.environ['RC_SSH_PORT']}" + args = { "scheme": parsed_url.scheme, "user": "", @@ -508,6 +514,7 @@ def get_clone_url(request, uri_tmpl, repo_name, repo_id, repo_type, **override): "prefix": decoded_path, "repo": repo_name, "repoid": str(repo_id), + "ssh_port": default_ssh_port, "repo_type": repo_type, } args.update(override) diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py index 8c781a53..376b83cb 100644 --- a/rhodecode/model/db.py +++ b/rhodecode/model/db.py @@ -1915,7 +1915,7 @@ class Repository(Base, BaseModel): ) DEFAULT_CLONE_URI = "{scheme}://{user}@{netloc}/{repo}" DEFAULT_CLONE_URI_ID = "{scheme}://{user}@{netloc}/_{repoid}" - DEFAULT_CLONE_URI_SSH = "ssh://{sys_user}@{hostname}/{repo}" + DEFAULT_CLONE_URI_SSH = "ssh://{sys_user}@{hostname}{ssh_port}/{repo}" STATE_CREATED = "repo_state_created" STATE_PENDING = "repo_state_pending" diff --git a/rhodecode/tests/lib/test_libs.py b/rhodecode/tests/lib/test_libs.py index 446727e4..7b81a821 100644 --- a/rhodecode/tests/lib/test_libs.py +++ b/rhodecode/tests/lib/test_libs.py @@ -579,6 +579,28 @@ def test_clone_url_svn_ssh_generator(): assert clone_url == "svn+ssh://rcdev@vps1/svn-test" +def test_clone_url_svn_ssh_with_port_generator(): + from rhodecode.lib.utils2 import get_clone_url + + class RequestStub(object): + def request_url(self, name): + return "http://vps1:8000" + + def route_url(self, name): + return self.request_url(name) + + clone_url = get_clone_url( + request=RequestStub(), + uri_tmpl=Repository.DEFAULT_CLONE_URI_SSH, + repo_name="svn-test", + repo_id=23, + repo_type="svn", + ssh_port=":9022", + **{"sys_user": "rcdev"}, + ) + assert clone_url == "svn+ssh://rcdev@vps1:9022/svn-test" + + idx = 0