class Aid::Scripts::Finish
Public Class Methods
description()
click to toggle source
# File lib/aid/scripts/finish.rb, line 13 def self.description "Commits what is currently staged with a [finishes] tag" end
Public Instance Methods
run()
click to toggle source
# File lib/aid/scripts/finish.rb, line 17 def run Dir.chdir(project_root) do Bundler.with_clean_env do check_for_staged_files! check_for_master! clean_up_feature_branch! amend_commit_with_finish_message! check_for_linter_prehook! force_push_to_github! end end end
Private Instance Methods
add_rubocop_linter(linter_path)
click to toggle source
# File lib/aid/scripts/finish.rb, line 80 def add_rubocop_linter(linter_path) dirname = File.dirname(linter_path) FileUtils.mkdir_p(dirname) unless File.directory?(dirname) linter_template = <<~RUBOCOP_LINTER #!/bin/bash rubocop -a RUBOCOP_LINTER file = File.open(linter_path, "w+") file.puts linter_template file.close end
amend_commit_with_finish_message!()
click to toggle source
# File lib/aid/scripts/finish.rb, line 45 def amend_commit_with_finish_message! step "Amending your last commit with finish message" do message = amend_message_with_tag(`git log -1 --pretty="format:%B"`.strip) template_file = create_template_file begin template_file.write(message) template_file.close system! "git commit --amend -o -F '#{template_file.path}'" ensure template_file.close template_file.unlink end end end
amend_message_with_tag(message)
click to toggle source
# File lib/aid/scripts/finish.rb, line 98 def amend_message_with_tag(message) finish_message = asana_finish_message message = message.gsub("\n\n#{finish_message}", "") "#{message}\n\n#{finish_message}" end
asana_finish_message()
click to toggle source
# File lib/aid/scripts/finish.rb, line 105 def asana_finish_message metadata = [asana_task_name, asana_task_url].compact metadata_lines = metadata.join("\n ") "Finishes:\n #{metadata_lines}" end
asana_task_id()
click to toggle source
# File lib/aid/scripts/finish.rb, line 120 def asana_task_id @asana_task_id ||= branch_name&.split("-")&.last end
asana_task_name()
click to toggle source
# File lib/aid/scripts/finish.rb, line 112 def asana_task_name git_config("tasks.#{asana_task_id}.name") end
asana_task_url()
click to toggle source
# File lib/aid/scripts/finish.rb, line 116 def asana_task_url git_config("tasks.#{asana_task_id}.url") end
branch_name()
click to toggle source
# File lib/aid/scripts/finish.rb, line 124 def branch_name `git rev-parse --abbrev-ref HEAD`.strip end
check_for_linter_prehook!()
click to toggle source
# File lib/aid/scripts/finish.rb, line 62 def check_for_linter_prehook! step "checking for linter prehook" do pre_commit_file_location = ".git/hooks/pre-commit" pre_commit_exists = File.exist?(pre_commit_file_location) linter_path = ".git/hooks/rubocop-linter" if pre_commit_exists if File.readlines(pre_commit_file_location).grep(/rubocop[-]linter/).empty? open(pre_commit_file_location, "a") do |f| f << "bash #{linter_path}" end end else add_rubocop_linter linter_path end end end
check_for_master!()
click to toggle source
# File lib/aid/scripts/finish.rb, line 33 def check_for_master! return unless `git rev-parse --abbrev-ref HEAD`.chomp == "master" abort colorize(:red, "You are on master, can not aid finish") end
clean_up_feature_branch!()
click to toggle source
# File lib/aid/scripts/finish.rb, line 39 def clean_up_feature_branch! step "Removing any empty commits & pulling in any changes from master" do system! "git fetch origin && git rebase -f origin/master" end end
create_template_file()
click to toggle source
# File lib/aid/scripts/finish.rb, line 128 def create_template_file Tempfile.new("git-commit-template") end
force_push_to_github!()
click to toggle source
# File lib/aid/scripts/finish.rb, line 92 def force_push_to_github! step "Force pushing your branch to origin" do system! "git push --force-with-lease origin #{branch_name.inspect}" end end