diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-04 18:08:40 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-04 18:08:40 +0300 |
commit | 6b833f1e0340e00fdee074da9c42c0d4e07a46d2 (patch) | |
tree | 6fc3a7a2f8a02fec8d1e7561b453d33eb4048dad /app/models/concerns/has_repository.rb | |
parent | 88a0824944720b6edaaef56376713541b9a02118 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/models/concerns/has_repository.rb')
-rw-r--r-- | app/models/concerns/has_repository.rb | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/app/models/concerns/has_repository.rb b/app/models/concerns/has_repository.rb new file mode 100644 index 00000000000..66c2f57bedd --- /dev/null +++ b/app/models/concerns/has_repository.rb @@ -0,0 +1,98 @@ +# frozen_string_literal: true + +module HasRepository + extend ActiveSupport::Concern + include Gitlab::ShellAdapter + include AfterCommitQueue + include Gitlab::Utils::StrongMemoize + + delegate :base_dir, :disk_path, to: :storage + + def valid_repo? + repository.exists? + rescue + errors.add(:path, _('Invalid repository path')) + false + end + + def repo_exists? + strong_memoize(:repo_exists) do + repository.exists? + rescue + false + end + end + + def repository_exists? + !!repository.exists? + end + + def root_ref?(branch) + repository.root_ref == branch + end + + def commit(ref = 'HEAD') + repository.commit(ref) + end + + def commit_by(oid:) + repository.commit_by(oid: oid) + end + + def commits_by(oids:) + repository.commits_by(oids: oids) + end + + def repository + raise NotImplementedError + end + + def storage + raise NotImplementedError + end + + def full_path + raise NotImplementedError + end + + def empty_repo? + repository.empty? + end + + def default_branch + @default_branch ||= repository.root_ref + end + + def reload_default_branch + @default_branch = nil # rubocop:disable Gitlab/ModuleWithInstanceVariables + + default_branch + end + + def url_to_repo + gitlab_shell.url_to_repo(full_path) + end + + def ssh_url_to_repo + url_to_repo + end + + def http_url_to_repo + custom_root = Gitlab::CurrentSettings.custom_http_clone_url_root + + url = if custom_root.present? + Gitlab::Utils.append_path( + custom_root, + web_url(only_path: true) + ) + else + web_url + end + + "#{url}.git" + end + + def web_url(only_path: nil) + raise NotImplementedError + end +end |