Sha256: febefcb389bab7c4e33aad216b6234bd7e1860b63e6832a4289cf1ae109ea616

Contents?: true

Size: 1.31 KB

Versions: 9

Compression:

Stored size: 1.31 KB

Contents

require 'thor'
require 'gitx'
require 'gitx/cli/base_command'

module Gitx
  module Cli
    class CleanupCommand < BaseCommand
      desc 'cleanup', 'Cleanup branches that have been merged into master from the repo'
      def cleanup
        checkout_branch config.base_branch
        run_cmd 'git pull'
        run_cmd 'git remote prune origin'

        say 'Deleting local and remote branches that have been merged into '
        say config.base_branch, :green
        merged_branches(remote: true).each do |branch|
          run_cmd "git push origin --delete #{branch}"
        end
        merged_branches(remote: false).each do |branch|
          run_cmd "git branch -d #{branch}"
        end
      end

      private

      # @return list of branches that have been merged
      def merged_branches(options = {})
        args = []
        args << '-r' if options[:remote]
        args << '--merged'
        output = run_cmd("git branch #{args.join(' ')}").split("\n")
        branches = output.map do |branch|
          branch = branch.gsub(/\*/, '').strip.split(' ').first
          branch = branch.split('/').last if options[:remote]
          branch
        end
        branches.uniq!
        branches -= config.reserved_branches
        branches.reject! { |b| config.aggregate_branch?(b) }

        branches
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
gitx-2.21.3.ci.135.1 lib/gitx/cli/cleanup_command.rb
gitx-2.21.3 lib/gitx/cli/cleanup_command.rb
gitx-2.21.2.ci.134.1 lib/gitx/cli/cleanup_command.rb
gitx-2.21.2.ci.130.1 lib/gitx/cli/cleanup_command.rb
gitx-2.21.2 lib/gitx/cli/cleanup_command.rb
gitx-2.21.1.ci.125.1 lib/gitx/cli/cleanup_command.rb
gitx-2.21.1 lib/gitx/cli/cleanup_command.rb
gitx-2.21.0.ci.121.1 lib/gitx/cli/cleanup_command.rb
gitx-2.21.0 lib/gitx/cli/cleanup_command.rb