summaryrefslogtreecommitdiff
path: root/app/models/concerns/has_ref.rb
blob: f16e879c26431c476ad885af968efb9273bf1bbc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# frozen_string_literal: true

module HasRef
  extend ActiveSupport::Concern

  def branch?
    !tag? && !merge_request?
  end

  def git_ref
    if merge_request?
      ##
      # In the future, we're going to change this ref to
      # merge request's merged reference, such as "refs/merge-requests/:iid/merge".
      # In order to do that, we have to update GitLab-Runner's source pulling
      # logic.
      # See https://gitlab.com/gitlab-org/gitlab-runner/merge_requests/1092
      git_branch_ref
    elsif branch?
      git_branch_ref
    elsif tag?
      git_tag_ref
    end
  end

  def ref_type
    if merge_request?
      'branch'
    elsif branch?
      'branch'
    elsif tag?
      'tag'
    end
  end

  def refspecs
    spec = []

    if merge_request?
      spec << "+#{merge_request.ref_path}:#{merge_request.ref_path}"
    end

    if git_depth > 0
      if branch?
        spec << "+#{git_branch_ref}:refs/remotes/origin/#{ref}"
      elsif tag?
        spec << "+#{git_tag_ref}:#{git_tag_ref}"
      end
    else
      if branch? || tag?
        spec << '+refs/heads/*:refs/remotes/origin/*'
        spec << '+refs/tags/*:refs/tags/*'
      end
    end

    spec
  end

  private

  def git_branch_ref
    Gitlab::Git::BRANCH_REF_PREFIX + ref.to_s
  end

  def git_tag_ref
    Gitlab::Git::TAG_REF_PREFIX + ref.to_s
  end
end