{"action":"created","comment":{"url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/pulls/comments/234307934","pull_request_review_id":175929729,"id":234307934,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzNDMwNzkzNA==","diff_hunk":"@@ -24,90 +24,7 @@\n import attr\n \n from renku import errors\n-\n-#: Define possible repository URLs.\n-_REPOSITORY_URLS = (\n-    re.compile(\n-        r'^(?P<protocol>https?|git|ssh|rsync)\\://'\n-        r'(?:(?P<username>[^:]+)(:(?P<password>[^@]+))?@)?'\n-        r'(?P<hostname>[a-z0-9_.-]*)'\n-        r'[:/]*'\n-        r'(?P<port>[\\d]+){0,1}'\n-        r'(?P<pathname>\\/(?P<owner>.+)/(?P<name>.+).git)'\n-    ),\n-    re.compile(\n-        r'(git\\+)?'\n-        r'((?P<protocol>\\w+)://)'\n-        # '((?P<user>\\w+)@)?'\n-        r'((?P<username>[^:]+)(:(?P<password>[^@]+))?@)?'\n-        r'((?P<hostname>[\\w\\.\\-]+))'\n-        r'(:(?P<port>\\d+))?'\n-        r'(?P<pathname>(\\/(?P<owner>\\w+)/)?'\n-        r'(\\/?(?P<name>[\\w\\-]+)(\\.git)?)?)'\n-    ),\n-    re.compile(\n-        r'^(?:(?P<username>.+)@)*'\n-        r'(?P<hostname>[a-z0-9_.-]*)[:/]*'\n-        r'(?P<port>[\\d]+){0,1}'\n-        r'[:](?P<pathname>\\/?(?P<owner>.+)/(?P<name>.+).git)'\n-    ),\n-    re.compile(\n-        r'((?P<username>\\w+)@)?'\n-        r'((?P<hostname>[\\w\\.\\-]+))'\n-        r'[\\:\\/]{1,2}'\n-        r'(?P<pathname>((?P<owner>\\w+)/)?'\n-        r'((?P<name>[\\w\\-]+)(\\.git)?)?)'\n-    ),\n-    re.compile(\n-        # Simple registry URL like: docker.io\n-        r'((?P<hostname>[\\w\\.\\-]+))'\n-    ),\n-)\n-\n-\n-@attr.s()\n-class GitURL(object):\n-    \"\"\"Parser for common Git URLs.\"\"\"\n-\n-    # Initial value\n-    href = attr.ib()\n-    # Parsed protocols\n-    pathname = attr.ib(default=None)\n-    protocols = attr.ib(default=attr.Factory(list), init=False)\n-    protocol = attr.ib(default='ssh')\n-    hostname = attr.ib(default=None)\n-    username = attr.ib(default=None)\n-    password = attr.ib(default=None)\n-    port = attr.ib(default=None)\n-    owner = attr.ib(default=None)\n-    name = attr.ib(default=None)\n-\n-    def __attrs_post_init__(self):\n-        \"\"\"Derive basic informations.\"\"\"\n-        if self.protocol:\n-            self.protocols = self.protocol.split('+')\n-\n-    @classmethod\n-    def parse(cls, href):\n-        \"\"\"Derive basic informations.\"\"\"\n-        for regex in _REPOSITORY_URLS:\n-            if re.search(regex, href):\n-                matches = re.search(regex, href)\n-                return cls(href=href, **matches.groupdict())\n-        else:\n-            raise errors.ConfigurationError(\n-                '\"{href} is not a valid Git remote.'.format(href=href)\n-            )\n-\n-    @property\n-    def image(self):\n-        \"\"\"Return image name.\"\"\"\n-        img = self.hostname\n-        if self.owner:\n-            img += '/' + self.owner\n-        if self.name:\n-            img += '/' + self.name\n-        return img\n+from renku.api._git import GitURL","path":"renku/cli/_docker.py","position":88,"original_position":88,"commit_id":"f0f242eaeddea73e26ea3e39f97401d8619b2e0d","original_commit_id":"f0f242eaeddea73e26ea3e39f97401d8619b2e0d","user":{"login":"jirikuncar","id":189798,"node_id":"MDQ6VXNlcjE4OTc5OA==","avatar_url":"https://avatars1.githubusercontent.com/u/189798?v=4","gravatar_id":"","url":"https://api.github.com/users/jirikuncar","html_url":"https://github.com/jirikuncar","followers_url":"https://api.github.com/users/jirikuncar/followers","following_url":"https://api.github.com/users/jirikuncar/following{/other_user}","gists_url":"https://api.github.com/users/jirikuncar/gists{/gist_id}","starred_url":"https://api.github.com/users/jirikuncar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jirikuncar/subscriptions","organizations_url":"https://api.github.com/users/jirikuncar/orgs","repos_url":"https://api.github.com/users/jirikuncar/repos","events_url":"https://api.github.com/users/jirikuncar/events{/privacy}","received_events_url":"https://api.github.com/users/jirikuncar/received_events","type":"User","site_admin":false},"body":"```suggestion\r\nfrom renku.models.urls import GitURL\r\n```","created_at":"2018-11-16T18:39:32Z","updated_at":"2018-11-16T18:39:32Z","html_url":"https://github.com/SwissDataScienceCenter/renku-python/pull/358#discussion_r234307934","pull_request_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/pulls/358","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/pulls/comments/234307934"},"html":{"href":"https://github.com/SwissDataScienceCenter/renku-python/pull/358#discussion_r234307934"},"pull_request":{"href":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/pulls/358"}}},"pull_request":{"url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/pulls/358","id":231263710,"node_id":"MDExOlB1bGxSZXF1ZXN0MjMxMjYzNzEw","html_url":"https://github.com/SwissDataScienceCenter/renku-python/pull/358","diff_url":"https://github.com/SwissDataScienceCenter/renku-python/pull/358.diff","patch_url":"https://github.com/SwissDataScienceCenter/renku-python/pull/358.patch","issue_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/issues/358","number":358,"state":"open","locked":false,"title":"cli: automatically initialize submodules","user":{"login":"rokroskar","id":3353586,"node_id":"MDQ6VXNlcjMzNTM1ODY=","avatar_url":"https://avatars3.githubusercontent.com/u/3353586?v=4","gravatar_id":"","url":"https://api.github.com/users/rokroskar","html_url":"https://github.com/rokroskar","followers_url":"https://api.github.com/users/rokroskar/followers","following_url":"https://api.github.com/users/rokroskar/following{/other_user}","gists_url":"https://api.github.com/users/rokroskar/gists{/gist_id}","starred_url":"https://api.github.com/users/rokroskar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rokroskar/subscriptions","organizations_url":"https://api.github.com/users/rokroskar/orgs","repos_url":"https://api.github.com/users/rokroskar/repos","events_url":"https://api.github.com/users/rokroskar/events{/privacy}","received_events_url":"https://api.github.com/users/rokroskar/received_events","type":"User","site_admin":false},"body":"# Description\r\n\r\n- [x] automatically initialize submodules\r\n- [ ] when adding datasets via a submodule, set relative path if needed (when the two remote paths are on the same server)\r\n\r\ncloses #355\r\ncloses https://github.com/SwissDataScienceCenter/renku/issues/441\r\n\r\n## Type of change\r\n\r\nPlease select relevant options.\r\n\r\n- [x] New feature (non-breaking change which adds functionality)\r\n- [x] This change requires a documentation update\r\n\r\n## Checklist\r\n\r\n- [x] I have added tests to cover my changes.\r\n- [x] I have **NOT** removed any existing tests.\r\n- [ ] I have updated the documentation accordingly.\r\n- [x] I have run ``./run-tests.sh`` locally.\r\n","created_at":"2018-11-15T16:49:42Z","updated_at":"2018-11-16T18:39:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1e3e9b6f4c791d1665e6d6a35e9a003cc264525e","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":1128963901,"node_id":"MDU6TGFiZWwxMTI4OTYzOTAx","url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/labels/WIP%20-%20do%20not%20merge","name":"WIP - do not merge","color":"4a2fc4","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/pulls/358/commits","review_comments_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/pulls/358/comments","review_comment_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/issues/358/comments","statuses_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/statuses/f0f242eaeddea73e26ea3e39f97401d8619b2e0d","head":{"label":"rokroskar:fix-355","ref":"fix-355","sha":"f0f242eaeddea73e26ea3e39f97401d8619b2e0d","user":{"login":"rokroskar","id":3353586,"node_id":"MDQ6VXNlcjMzNTM1ODY=","avatar_url":"https://avatars3.githubusercontent.com/u/3353586?v=4","gravatar_id":"","url":"https://api.github.com/users/rokroskar","html_url":"https://github.com/rokroskar","followers_url":"https://api.github.com/users/rokroskar/followers","following_url":"https://api.github.com/users/rokroskar/following{/other_user}","gists_url":"https://api.github.com/users/rokroskar/gists{/gist_id}","starred_url":"https://api.github.com/users/rokroskar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rokroskar/subscriptions","organizations_url":"https://api.github.com/users/rokroskar/orgs","repos_url":"https://api.github.com/users/rokroskar/repos","events_url":"https://api.github.com/users/rokroskar/events{/privacy}","received_events_url":"https://api.github.com/users/rokroskar/received_events","type":"User","site_admin":false},"repo":{"id":102728481,"node_id":"MDEwOlJlcG9zaXRvcnkxMDI3Mjg0ODE=","name":"renku-python","full_name":"rokroskar/renku-python","private":false,"owner":{"login":"rokroskar","id":3353586,"node_id":"MDQ6VXNlcjMzNTM1ODY=","avatar_url":"https://avatars3.githubusercontent.com/u/3353586?v=4","gravatar_id":"","url":"https://api.github.com/users/rokroskar","html_url":"https://github.com/rokroskar","followers_url":"https://api.github.com/users/rokroskar/followers","following_url":"https://api.github.com/users/rokroskar/following{/other_user}","gists_url":"https://api.github.com/users/rokroskar/gists{/gist_id}","starred_url":"https://api.github.com/users/rokroskar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rokroskar/subscriptions","organizations_url":"https://api.github.com/users/rokroskar/orgs","repos_url":"https://api.github.com/users/rokroskar/repos","events_url":"https://api.github.com/users/rokroskar/events{/privacy}","received_events_url":"https://api.github.com/users/rokroskar/received_events","type":"User","site_admin":false},"html_url":"https://github.com/rokroskar/renku-python","description":"Python API and CLI for the Renga platform","fork":true,"url":"https://api.github.com/repos/rokroskar/renku-python","forks_url":"https://api.github.com/repos/rokroskar/renku-python/forks","keys_url":"https://api.github.com/repos/rokroskar/renku-python/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rokroskar/renku-python/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rokroskar/renku-python/teams","hooks_url":"https://api.github.com/repos/rokroskar/renku-python/hooks","issue_events_url":"https://api.github.com/repos/rokroskar/renku-python/issues/events{/number}","events_url":"https://api.github.com/repos/rokroskar/renku-python/events","assignees_url":"https://api.github.com/repos/rokroskar/renku-python/assignees{/user}","branches_url":"https://api.github.com/repos/rokroskar/renku-python/branches{/branch}","tags_url":"https://api.github.com/repos/rokroskar/renku-python/tags","blobs_url":"https://api.github.com/repos/rokroskar/renku-python/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rokroskar/renku-python/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rokroskar/renku-python/git/refs{/sha}","trees_url":"https://api.github.com/repos/rokroskar/renku-python/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rokroskar/renku-python/statuses/{sha}","languages_url":"https://api.github.com/repos/rokroskar/renku-python/languages","stargazers_url":"https://api.github.com/repos/rokroskar/renku-python/stargazers","contributors_url":"https://api.github.com/repos/rokroskar/renku-python/contributors","subscribers_url":"https://api.github.com/repos/rokroskar/renku-python/subscribers","subscription_url":"https://api.github.com/repos/rokroskar/renku-python/subscription","commits_url":"https://api.github.com/repos/rokroskar/renku-python/commits{/sha}","git_commits_url":"https://api.github.com/repos/rokroskar/renku-python/git/commits{/sha}","comments_url":"https://api.github.com/repos/rokroskar/renku-python/comments{/number}","issue_comment_url":"https://api.github.com/repos/rokroskar/renku-python/issues/comments{/number}","contents_url":"https://api.github.com/repos/rokroskar/renku-python/contents/{+path}","compare_url":"https://api.github.com/repos/rokroskar/renku-python/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rokroskar/renku-python/merges","archive_url":"https://api.github.com/repos/rokroskar/renku-python/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rokroskar/renku-python/downloads","issues_url":"https://api.github.com/repos/rokroskar/renku-python/issues{/number}","pulls_url":"https://api.github.com/repos/rokroskar/renku-python/pulls{/number}","milestones_url":"https://api.github.com/repos/rokroskar/renku-python/milestones{/number}","notifications_url":"https://api.github.com/repos/rokroskar/renku-python/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rokroskar/renku-python/labels{/name}","releases_url":"https://api.github.com/repos/rokroskar/renku-python/releases{/id}","deployments_url":"https://api.github.com/repos/rokroskar/renku-python/deployments","created_at":"2017-09-07T11:21:00Z","updated_at":"2018-05-18T12:18:42Z","pushed_at":"2018-11-16T16:46:03Z","git_url":"git://github.com/rokroskar/renku-python.git","ssh_url":"git@github.com:rokroskar/renku-python.git","clone_url":"https://github.com/rokroskar/renku-python.git","svn_url":"https://github.com/rokroskar/renku-python","homepage":null,"size":1253,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"SwissDataScienceCenter:master","ref":"master","sha":"591b6aaed17de808066e9a6be4019b8aff4e405f","user":{"login":"SwissDataScienceCenter","id":25008760,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI1MDA4NzYw","avatar_url":"https://avatars3.githubusercontent.com/u/25008760?v=4","gravatar_id":"","url":"https://api.github.com/users/SwissDataScienceCenter","html_url":"https://github.com/SwissDataScienceCenter","followers_url":"https://api.github.com/users/SwissDataScienceCenter/followers","following_url":"https://api.github.com/users/SwissDataScienceCenter/following{/other_user}","gists_url":"https://api.github.com/users/SwissDataScienceCenter/gists{/gist_id}","starred_url":"https://api.github.com/users/SwissDataScienceCenter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SwissDataScienceCenter/subscriptions","organizations_url":"https://api.github.com/users/SwissDataScienceCenter/orgs","repos_url":"https://api.github.com/users/SwissDataScienceCenter/repos","events_url":"https://api.github.com/users/SwissDataScienceCenter/events{/privacy}","received_events_url":"https://api.github.com/users/SwissDataScienceCenter/received_events","type":"Organization","site_admin":false},"repo":{"id":100947017,"node_id":"MDEwOlJlcG9zaXRvcnkxMDA5NDcwMTc=","name":"renku-python","full_name":"SwissDataScienceCenter/renku-python","private":false,"owner":{"login":"SwissDataScienceCenter","id":25008760,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI1MDA4NzYw","avatar_url":"https://avatars3.githubusercontent.com/u/25008760?v=4","gravatar_id":"","url":"https://api.github.com/users/SwissDataScienceCenter","html_url":"https://github.com/SwissDataScienceCenter","followers_url":"https://api.github.com/users/SwissDataScienceCenter/followers","following_url":"https://api.github.com/users/SwissDataScienceCenter/following{/other_user}","gists_url":"https://api.github.com/users/SwissDataScienceCenter/gists{/gist_id}","starred_url":"https://api.github.com/users/SwissDataScienceCenter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SwissDataScienceCenter/subscriptions","organizations_url":"https://api.github.com/users/SwissDataScienceCenter/orgs","repos_url":"https://api.github.com/users/SwissDataScienceCenter/repos","events_url":"https://api.github.com/users/SwissDataScienceCenter/events{/privacy}","received_events_url":"https://api.github.com/users/SwissDataScienceCenter/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/SwissDataScienceCenter/renku-python","description":"A Python library for the Renku collaborative data science platform. It lets you perform any action with renga command or from withing Python apps - create projects, manage buckets, track files, run containers, etc.","fork":false,"url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python","forks_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/forks","keys_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/teams","hooks_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/hooks","issue_events_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/issues/events{/number}","events_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/events","assignees_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/assignees{/user}","branches_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/branches{/branch}","tags_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/tags","blobs_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/git/refs{/sha}","trees_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/statuses/{sha}","languages_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/languages","stargazers_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/stargazers","contributors_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/contributors","subscribers_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/subscribers","subscription_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/subscription","commits_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/commits{/sha}","git_commits_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/git/commits{/sha}","comments_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/comments{/number}","issue_comment_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/issues/comments{/number}","contents_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/contents/{+path}","compare_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/merges","archive_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/downloads","issues_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/issues{/number}","pulls_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/pulls{/number}","milestones_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/milestones{/number}","notifications_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/labels{/name}","releases_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/releases{/id}","deployments_url":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/deployments","created_at":"2017-08-21T11:49:21Z","updated_at":"2018-11-16T12:29:25Z","pushed_at":"2018-11-16T18:35:35Z","git_url":"git://github.com/SwissDataScienceCenter/renku-python.git","ssh_url":"git@github.com:SwissDataScienceCenter/renku-python.git","clone_url":"https://github.com/SwissDataScienceCenter/renku-python.git","svn_url":"https://github.com/SwissDataScienceCenter/renku-python","homepage":"https://renku-python.readthedocs.io/","size":1238,"stargazers_count":8,"watchers_count":8,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":9,"mirror_url":null,"archived":false,"open_issues_count":42,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":9,"open_issues":42,"watchers":8,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/pulls/358"},"html":{"href":"https://github.com/SwissDataScienceCenter/renku-python/pull/358"},"issue":{"href":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/issues/358"},"comments":{"href":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/issues/358/comments"},"review_comments":{"href":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/pulls/358/comments"},"review_comment":{"href":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/pulls/358/commits"},"statuses":{"href":"https://api.github.com/repos/SwissDataScienceCenter/renku-python/statuses/f0f242eaeddea73e26ea3e39f97401d8619b2e0d"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"jirikuncar"}}