Sha256: 51fbd5af005337d0138fd8126edb0d60b4b73ecdabe94663c781d8cb9cd0ba78

Contents?: true

Size: 1.62 KB

Versions: 604

Compression:

Stored size: 1.62 KB

Contents

# frozen_string_literal: true

require "time"
require "gpgme"
require "tmpdir"
require "dependabot/pull_request_creator"

module Dependabot
  class PullRequestCreator
    class CommitSigner
      attr_reader :author_details, :commit_message, :tree_sha, :parent_sha,
                  :signature_key

      def initialize(author_details:, commit_message:, tree_sha:, parent_sha:,
                     signature_key:)
        @author_details = author_details
        @commit_message = commit_message
        @tree_sha = tree_sha
        @parent_sha = parent_sha
        @signature_key = signature_key
      end

      def signature
        email = author_details[:email]

        dir = Dir.mktmpdir

        GPGME::Engine.home_dir = dir
        GPGME::Key.import(signature_key)

        crypto = GPGME::Crypto.new(armor: true)
        opts = { mode: GPGME::SIG_MODE_DETACH, signer: email }
        crypto.sign(commit_object, opts).to_s
      rescue Errno::ENOTEMPTY
        FileUtils.remove_entry(dir, true)
        # This appears to be a Ruby bug which occurs very rarely
        raise if @retrying

        @retrying = true
        retry
      ensure
        FileUtils.remove_entry(dir, true)
      end

      private

      def commit_object
        time_str = Time.parse(author_details[:date]).strftime("%s %z")
        name = author_details[:name]
        email = author_details[:email]

        [
          "tree #{tree_sha}",
          "parent #{parent_sha}",
          "author #{name} <#{email}> #{time_str}",
          "committer #{name} <#{email}> #{time_str}",
          "",
          commit_message
        ].join("\n")
      end
    end
  end
end

Version data entries

604 entries across 604 versions & 2 rubygems

Version Path
dependabot-common-0.113.1 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.113.0 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.37 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.36 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.35 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.34 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.33 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.32 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.31 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.30 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.29 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.28 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.27 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.26 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.25 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.24 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.23 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.22 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.21 lib/dependabot/pull_request_creator/commit_signer.rb
dependabot-common-0.112.20 lib/dependabot/pull_request_creator/commit_signer.rb