Sha256: cd06f3eacbe252c15c6de6b71e7bb2376ce022e5c8a2e4cebc454f2a4b024b0f

Contents?: true

Size: 1.17 KB

Versions: 6

Compression:

Stored size: 1.17 KB

Contents

# frozen_string_literal: true

module Geet
  module Services
    class MergePr
      DEFAULT_GIT_CLIENT = Geet::Utils::GitClient.new

      def initialize(repository, out: $stdout, git_client: DEFAULT_GIT_CLIENT)
        @repository = repository
        @out = out
        @git_client = git_client
      end

      def execute(delete_branch: false)
        merge_head = find_merge_head
        pr = checked_find_branch_pr(merge_head)
        merge_pr(pr)
        do_delete_branch if delete_branch
        pr
      end

      private

      def find_merge_head
        @git_client.current_branch
      end

      # Expect to find only one.
      def checked_find_branch_pr(head)
        @out.puts "Finding PR with head (#{head})..."

        prs = @repository.prs(head: head)

        raise "Expected to find only one PR for the current branch; found: #{prs.size}" if prs.size != 1

        prs[0]
      end

      def merge_pr(pr)
        @out.puts "Merging PR ##{pr.number}..."

        pr.merge
      end

      def do_delete_branch
        @out.puts "Deleting branch #{@git_client.current_branch}..."

        @repository.delete_branch(@git_client.current_branch)
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
geet-0.3.7 lib/geet/services/merge_pr.rb
geet-0.3.6 lib/geet/services/merge_pr.rb
geet-0.3.5 lib/geet/services/merge_pr.rb
geet-0.3.4 lib/geet/services/merge_pr.rb
geet-0.3.3 lib/geet/services/merge_pr.rb
geet-0.3.2 lib/geet/services/merge_pr.rb