From 575f391ba78f3c6ea9a9b3d656165f7a33f984e3 Mon Sep 17 00:00:00 2001 From: allegroai <> Date: Sat, 20 Jun 2020 22:15:08 +0300 Subject: [PATCH] Fix ssh://user@domain@server.com/ in git repo link (Issue #149) --- .../backend_interface/task/repo/scriptinfo.py | 5 ++--- trains/backend_interface/task/repo/util.py | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/trains/backend_interface/task/repo/scriptinfo.py b/trains/backend_interface/task/repo/scriptinfo.py index 5f4b4876..e76f6a6a 100644 --- a/trains/backend_interface/task/repo/scriptinfo.py +++ b/trains/backend_interface/task/repo/scriptinfo.py @@ -7,11 +7,10 @@ from tempfile import mkstemp import attr import logging import json -from furl import furl from pathlib2 import Path from threading import Thread, Event -from .util import get_command_output +from .util import get_command_output, remove_user_pass_from_url from ....backend_api import Session from ....debugging import get_logger from .detectors import GitEnvDetector, GitDetector, HgEnvDetector, HgDetector, Result as DetectionResult @@ -634,7 +633,7 @@ class ScriptInfo(object): script_requirements = None script_info = dict( - repository=furl(repo_info.url).remove(username=True, password=True).tostr(), + repository=remove_user_pass_from_url(repo_info.url), branch=repo_info.branch, version_num=repo_info.commit, entry_point=entry_point, diff --git a/trains/backend_interface/task/repo/util.py b/trains/backend_interface/task/repo/util.py index 36d0b4bf..d6921632 100644 --- a/trains/backend_interface/task/repo/util.py +++ b/trains/backend_interface/task/repo/util.py @@ -1,6 +1,8 @@ import os from subprocess import check_output +from furl import furl + def get_command_output(command, path=None): """ @@ -10,3 +12,23 @@ def get_command_output(command, path=None): """ with open(os.devnull, "wb") as devnull: return check_output(command, cwd=path, stderr=devnull).decode().strip() + + +def remove_user_pass_from_url(url): + # remove user / password, if we have it embedded in the git repo + url = str(url) + # noinspection PyBroadException + try: + url = furl(url).remove(username=True, password=True).tostr() + except ValueError: + # check if for any reason we have two @ + # (e.g. ssh://user@abc.com@domain.com/path or ssh://user@abc.com:pass@domain.com/path) + if len(url.split('@')) >= 3: + # noinspection PyBroadException + try: + url = furl(url.replace('@', '_', 1)).remove(username=True, password=True).tostr() + except Exception: + pass + except Exception: + pass + return url