class RakeCommit::Git
Public Class Methods
new(build_command, collapse_commits = true, rebase_only = false, incremental = false, prompt_exclusions = [], precommit = nil, commit_message_wrap = nil, commit_message_type = MessageType::MESSAGE)
click to toggle source
# File lib/rake_commit/git.rb, line 6 def initialize(build_command, collapse_commits = true, rebase_only = false, incremental = false, prompt_exclusions = [], precommit = nil, commit_message_wrap = nil, commit_message_type = MessageType::MESSAGE) @build_command = build_command @collapse_commits = collapse_commits @rebase_only = rebase_only @incremental = incremental @prompt_exclusions = prompt_exclusions @precommit = precommit @commit_message_wrap = commit_message_wrap @commit_message_type = commit_message_type end
Public Instance Methods
add()
click to toggle source
# File lib/rake_commit/git.rb, line 75 def add RakeCommit::Shell.system "git add -A ." end
collapse_git_commits()
click to toggle source
# File lib/rake_commit/git.rb, line 59 def collapse_git_commits RakeCommit::Shell.system(@precommit) unless @precommit.nil? add temp_commit reset_soft status return if nothing_to_commit? incremental_commit pull_rebase rescue return false return true end
collapse_git_commits?()
click to toggle source
# File lib/rake_commit/git.rb, line 43 def collapse_git_commits? return false unless @collapse_commits return true unless merge_commits? status input = Readline.readline("Do you want to collapse merge commits? (y/n): ").chomp input == "y" end
commit()
click to toggle source
# File lib/rake_commit/git.rb, line 17 def commit if @incremental incremental_commit elsif rebase_in_progress? rebase_continue RakeCommit::Shell.system(@build_command) push else if collapse_git_commits? return unless collapse_git_commits elsif rebase_only? unless nothing_to_commit? puts "You have uncommitted changes. Please amend, stash, or clean and retry." exit 1 end pull_rebase rescue return false end RakeCommit::Shell.system(@build_command) push end end
git_branch()
click to toggle source
# File lib/rake_commit/git.rb, line 111 def git_branch @git_branch ||= begin output = RakeCommit::Shell.backtick("git symbolic-ref HEAD") output.gsub('refs/heads/', '').strip end end
incremental_commit()
click to toggle source
# File lib/rake_commit/git.rb, line 79 def incremental_commit commit_message = RakeCommit::CommitMessage.new(@prompt_exclusions, @commit_message_type) unless commit_message.author.nil? RakeCommit::Shell.system("git config user.name #{Shellwords.shellescape(commit_message.author)}") end message = commit_message.joined_message(@commit_message_wrap) RakeCommit::Shell.system("git commit -m #{Shellwords.shellescape(message)}") end
merge_base()
click to toggle source
# File lib/rake_commit/git.rb, line 122 def merge_base @merge_base ||= RakeCommit::Shell.backtick("git merge-base #{git_branch} origin/#{git_branch}").strip end
merge_commits?()
click to toggle source
# File lib/rake_commit/git.rb, line 118 def merge_commits? RakeCommit::Shell.backtick("git log #{merge_base}..HEAD") != RakeCommit::Shell.backtick("git log --no-merges #{merge_base}..HEAD") end
nothing_to_commit?()
click to toggle source
# File lib/rake_commit/git.rb, line 106 def nothing_to_commit? status = RakeCommit::Shell.backtick("git status", false) status.empty? || status =~ /nothing to commit/m end
pull_rebase()
click to toggle source
# File lib/rake_commit/git.rb, line 93 def pull_rebase RakeCommit::Shell.system "git pull --rebase --stat" end
push()
click to toggle source
# File lib/rake_commit/git.rb, line 97 def push RakeCommit::Shell.system "git push origin #{git_branch}" end
rebase_continue()
click to toggle source
# File lib/rake_commit/git.rb, line 55 def rebase_continue RakeCommit::Shell.system("git rebase --continue") end
rebase_in_progress?()
click to toggle source
# File lib/rake_commit/git.rb, line 39 def rebase_in_progress? File.directory?(".git/rebase-merge") || File.directory?(".git/rebase-apply") end
rebase_only?()
click to toggle source
# File lib/rake_commit/git.rb, line 51 def rebase_only? !!@rebase_only end
reset_soft()
click to toggle source
# File lib/rake_commit/git.rb, line 88 def reset_soft raise "Could not determine branch" unless git_branch RakeCommit::Shell.system "git reset --soft #{merge_base}" end
status()
click to toggle source
# File lib/rake_commit/git.rb, line 71 def status RakeCommit::Shell.system("git status", false) end
temp_commit()
click to toggle source
# File lib/rake_commit/git.rb, line 101 def temp_commit return if nothing_to_commit? RakeCommit::Shell.system "git commit -m 'rake_commit backup commit'" end