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
 |