summaryrefslogtreecommitdiff
path: root/app/services/ci/create_commit_service.rb
blob: 0a1abf89a95b14786bd03e10d6715fdf0f9de65a (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
module Ci
  class CreateCommitService
    def execute(project, params)
      before_sha = params[:before]
      sha = params[:checkout_sha] || params[:after]
      origin_ref = params[:ref]
      
      unless origin_ref && sha.present?
        return false
      end

      ref = origin_ref.gsub(/\Arefs\/(tags|heads)\//, '')

      # Skip branch removal
      if sha == Ci::Git::BLANK_SHA
        return false
      end

      commit = project.commits.find_by_sha_and_ref(sha, ref)

      # Create commit if not exists yet
      unless commit
        data = {
          ref: ref,
          sha: sha,
          tag: origin_ref.start_with?('refs/tags/'),
          before_sha: before_sha,
          push_data: {
            before: before_sha,
            after: sha,
            ref: ref,
            user_name: params[:user_name],
            user_email: params[:user_email],
            repository: params[:repository],
            commits: params[:commits],
            total_commits_count: params[:total_commits_count],
            ci_yaml_file: params[:ci_yaml_file]
          }
        }

        commit = project.commits.create(data)
      end

      commit.update_committed!
      commit.create_builds unless commit.builds.any?

      commit
    end
  end
end