1module Gitlab
2  module Git
3    class CommitterWithHooks < Gollum::Committer
4      attr_reader :gl_wiki
5
6      def initialize(gl_wiki, options = {})
7        @gl_wiki = gl_wiki
8        super(gl_wiki.gollum_wiki, options)
9      end
10
11      def commit
12        result = Gitlab::Git::OperationService.new(git_user, gl_wiki.repository).with_branch(
13          @wiki.ref,
14          start_branch_name: @wiki.ref
15        ) do |_start_commit|
16          super(false)
17        end
18
19        result[:newrev]
20      rescue Gitlab::Git::PreReceiveError => e
21        message = "Hook failed: #{e.message}"
22        raise Gitlab::Git::Wiki::OperationError, message
23      end
24
25      private
26
27      def git_user
28        @git_user ||= Gitlab::Git::User.new(@options[:username],
29                                            @options[:name],
30                                            @options[:email],
31                                            gitlab_id)
32      end
33
34      def gitlab_id
35        Gitlab::GlId.gl_id_from_id_value(@options[:user_id])
36      end
37    end
38  end
39end
40