X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/58a4f7eb6dc51569eef87b6b5de800e4defa6291..0f537bcaa60b8a1496010bc9d4a943484e69081c:/services/api/app/models/repository.rb diff --git a/services/api/app/models/repository.rb b/services/api/app/models/repository.rb index 0cab4dcf87..46f2de6ee4 100644 --- a/services/api/app/models/repository.rb +++ b/services/api/app/models/repository.rb @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + class Repository < ArvadosModel include HasUuid include KindAndEtag @@ -13,18 +17,27 @@ class Repository < ArvadosModel t.add :name t.add :fetch_url t.add :push_url + t.add :clone_urls end def self.attributes_required_columns - super.merge({"push_url" => ["name"], "fetch_url" => ["name"]}) + super.merge("clone_urls" => ["name"], + "fetch_url" => ["name"], + "push_url" => ["name"]) end + # Deprecated. Use clone_urls instead. def push_url - "git@git.%s.arvadosapi.com:%s.git" % [Rails.configuration.uuid_prefix, name] + ssh_clone_url end + # Deprecated. Use clone_urls instead. def fetch_url - push_url + ssh_clone_url + end + + def clone_urls + [ssh_clone_url, https_clone_url].compact end def server_path @@ -36,7 +49,7 @@ class Repository < ArvadosModel # prefers bare repositories over checkouts. [["%s.git"], ["%s", ".git"]].each do |repo_base, *join_args| [:uuid, :name].each do |path_attr| - git_dir = File.join(Rails.configuration.git_repositories_dir, + git_dir = File.join(Rails.configuration.Git.Repositories, repo_base % send(path_attr), *join_args) return git_dir if File.exist?(git_dir) end @@ -77,10 +90,38 @@ class Repository < ArvadosModel prefix_match = Regexp.escape(owner.username + "/") errmsg_start = "must be the owner's username, then '/', then" end - if not /^#{prefix_match}[A-Za-z][A-Za-z0-9]*$/.match(name) + if not (/^#{prefix_match}[A-Za-z][A-Za-z0-9]*$/.match(name)) errors.add(:name, - "#{errmsg_start} a letter followed by alphanumerics") + "#{errmsg_start} a letter followed by alphanumerics, expected pattern '#{prefix_match}[A-Za-z][A-Za-z0-9]*' but was '#{name}'") false end end + + def ssh_clone_url + _clone_url Rails.configuration.Services.GitSSH.andand.ExternalURL, 'ssh://git@git.%s.arvadosapi.com' + end + + def https_clone_url + _clone_url Rails.configuration.Services.GitHTTP.andand.ExternalURL, 'https://git.%s.arvadosapi.com/' + end + + def _clone_url config_var, default_base_fmt + if not config_var + return "" + end + prefix = new_record? ? Rails.configuration.ClusterID : uuid[0,5] + if prefix == Rails.configuration.ClusterID and config_var != URI("") + base = config_var + else + base = URI(default_base_fmt % prefix) + end + if base.path == "" + base.path = "/" + end + if base.scheme == "ssh" + '%s@%s:%s.git' % [base.user, base.host, name] + else + '%s%s.git' % [base, name] + end + end end