namespace :git do
desc "Removes all of the old branches that have been merged into master" task :remove_merged_branches do status = %x[ git status ] if status =~ /Not a git repository/ puts status else puts "==> git checkout master" %x[ git checkout master ] puts "==> git pull" %x[ git pull ] puts "==> # Gets rid of stale tracking branches" puts "==> git fetch -p" %x[ git fetch -p ] puts "==> # Gets list of the all old branches that have been merged into master" puts "==> git branch -r --merged" branches = %x[ git branch -r --merged ].split(/\n/).map do |b| branch = b.strip if branch =~ /(HEAD|master|production)/ nil else branch.split(/\//) end end.compact puts "==> # Will be removed '#{branches.count}' branches" branches.each do |branch| puts "==> git push #{branch[0]} :#{branch[1]}" # Example: # git push origin :branch_name %x[ git push #{branch[0]} :#{branch[1]} ] end end end # task :remove_merged_branches
end