Skip to content

Instantly share code, notes, and snippets.

@everton
Last active August 29, 2015 13:57
Show Gist options
  • Save everton/9554788 to your computer and use it in GitHub Desktop.
Save everton/9554788 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
project_source_dir = ARGV.first
project_source_dir += '/' unless project_source_dir[-1] == '/'
raise 'Not a Git repository' unless File.exists? "#{project_source_dir}.git"
# TODO: raise 'Not a Rails application' if ???
def pending_git_tasks?
result = `git status`
result.include?('Untracked files:') ||
result.include?('unmerged:') ||
result.include?('modified:')
end
original_dir = Dir.pwd
Dir.chdir project_source_dir
require 'progressbar'
begin
raise 'Commit or stash before start' if pending_git_tasks?
`find #{project_source_dir} -name \*~ -delete`
revs = `git log --oneline --reverse --no-color |cut -d' ' -f1`.split
project_name = File.basename project_source_dir
File.open(File.join(original_dir, "#{project_name}-flog"), 'w') do |file|
file.sync = true
pbar = ProgressBar.new('Revisions', revs.size)
revs.each do |revision|
`git checkout -q #{revision}`
flogs = `flog --continue -s app lib test spec`
# file.puts "#{revision} #{flogs.split("\n").join}"
# file.puts "#{revision} #{flogs.split.first[0..-2]}"
file.puts flogs.split.first[0..-2]
pbar.inc
end
pbar.finish
end
ensure
`git checkout master`
Dir.chdir original_dir
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment