Commit 3b06d2616533629a7a85858e499762d3bed76075

Authored by Will Farrington
1 parent 60851f970a

better error messages about auto updating

Showing 1 changed file with 12 additions and 5 deletions Inline Diff

#!/usr/bin/ruby 1 1 #!/usr/bin/ruby
# Run Boxen. 2 2 # Run Boxen.
3 3
require "pathname" 4 4 require "pathname"
5 5
if ENV["USER"] == "root" 6 6 if ENV["USER"] == "root"
abort "Run this as a normal user, I'll sudo if I need to." 7 7 abort "Run this as a normal user, I'll sudo if I need to."
end 8 8 end
9 9
# Make sure only one boxen process runs at a time. 10 10 # Make sure only one boxen process runs at a time.
11 11
myself = File.new __FILE__ 12 12 myself = File.new __FILE__
13 13
unless myself.flock File::LOCK_EX | File::LOCK_NB 14 14 unless myself.flock File::LOCK_EX | File::LOCK_NB
abort "You're already running a boxen process! Know a patience." 15 15 abort "You're already running a boxen process! Know a patience."
end 16 16 end
17 17
# Yeah yeah, I like to be explicit. 18 18 # Yeah yeah, I like to be explicit.
19 19
at_exit { myself.flock File::LOCK_UN } 20 20 at_exit { myself.flock File::LOCK_UN }
21 21
# Put us where we belong, in the root dir of our boxen repo. 22 22 # Put us where we belong, in the root dir of our boxen repo.
23 23
Dir.chdir Pathname.new(__FILE__).realpath + "../.." 24 24 Dir.chdir Pathname.new(__FILE__).realpath + "../.."
25 25
# Auto-update code. This is done as early as possible so that changes 26 26 # Auto-update code. This is done as early as possible so that changes
# to boxen support code or dependencies can be grabbed. 27 27 # to boxen support code or dependencies can be grabbed.
28 28
unless ENV["BOXEN_NO_PULL"] || ARGV.include?("--no-pull") 29 29 unless ENV["BOXEN_NO_PULL"] || ARGV.include?("--no-pull")
if system("which git > /dev/null") && File.directory?(".git") 30 30 if system("which git > /dev/null") && File.directory?(".git")
clean = `git status --porcelain`.empty? 31 31 clean = `git status --porcelain`.empty?
master = `git symbolic-ref HEAD`.chomp == "refs/heads/master" 32 32 current_branch = `git symbolic-ref HEAD`.chomp
33 master = current_branch == "refs/heads/master"
no_new_commits = system('git diff --exit-code --quiet origin/master master') 33 34 no_new_commits = system('git diff --exit-code --quiet origin/master master')
34 35
warn "Cannot auto-update due to unclean tree!" unless clean 35 36 short_branch = current_branch.split('/').last
warn "Cannot auto-update due to unpushed commits on master!" unless no_new_commits 36
37 37
38 if !master
39 warn "Boxen on a non-master branch '#{short_branch}', won't auto-update!"
40 elsif !no_new_commits
41 warn "Boxen has unpushed commits on master, won't auto-update!"
42 elsif !clean
43 warn "Boxen has a dirty tree, won't auto-update!"
44 end
45
if clean && master && no_new_commits 38 46 if clean && master && no_new_commits
quietly = "> /dev/null 2>&1" 39 47 quietly = "> /dev/null 2>&1"
fetch = "(git fetch origin #{quietly})" 40 48 fetch = "(git fetch origin #{quietly})"
reset = "(git reset --hard origin/master #{quietly})" 41 49 reset = "(git reset --hard origin/master #{quietly})"
reclean = "(git clean -df #{quietly})" 42 50 reclean = "(git clean -df #{quietly})"
43 51
unless system "#{fetch} && #{reset} && #{reclean}" 44 52 unless system "#{fetch} && #{reset} && #{reclean}"
warn "Couldn't auto-update, continuing." 45 53 warn "Auto-update of Boxen FAILED, continuing."
end 46 54 end