1
0
Fork 0
dotfiles/bin/git-up

53 lines
1.2 KiB
Ruby
Executable File

#!/usr/bin/env ruby
last_commit = `git rev-parse HEAD`.chomp
system 'git pull --rebase'
news = `git whatchanged #{last_commit}..HEAD`
files = Hash.new do |hash, key|
hash[key] = { :status => [], :author => [] }
end
conflict = false
current_author = ''
news.split("\n").each do |str|
am = str.match(/Author: (.*?) <.*/)
current_author = am[1] unless am.nil?
fm = str.match(/^:.*?\.\.\. ([A-Z]+)\t(.*)/)
next if fm.nil?
m, status, file = *fm
files[file][:status] << status
files[file][:author] << current_author
conflict = true if status.length > 1
end
files.each do |file, info|
color_code = case info[:status].first
when 'D' then 31
when 'A' then 32
else 33
end
puts "\e[1m\e[#{color_code}m#{info[:status].first}\e[0m #{file} (\e[34m#{info[:author].uniq.join(', ')}\e[0m)"
end
exit if conflict
# Running bundle command if needed
system 'bundle' if files.keys.include?('Gemfile.lock')
# Migrating if schema has changed
if files.keys.include?('db/schema.rb')
system 'bundle exec rake db:migrate'
system 'git checkout db/schema.rb' # Reseting schema
end
if files.keys.grep(/^app\/assets/).length > 0
puts 'Compiling assets...'
system 'bundle exec rake assets:precompile > /dev/null 2>&1'
end