53 lines
1.2 KiB
Ruby
Executable File
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
|