2010-09-11 20:22:54 +01:00
|
|
|
module Homebrew extend self
|
|
|
|
def update
|
|
|
|
abort "Please `brew install git' first." unless system "/usr/bin/which -s git"
|
|
|
|
|
|
|
|
updater = RefreshBrew.new
|
|
|
|
if updater.update_from_masterbrew!
|
|
|
|
updater.report
|
|
|
|
else
|
|
|
|
puts "Already up-to-date."
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2009-09-08 00:02:28 +02:00
|
|
|
class RefreshBrew
|
2010-10-15 21:16:04 -07:00
|
|
|
REPOSITORY_URL = "http://github.com/mxcl/homebrew.git"
|
2010-05-08 15:35:06 +10:00
|
|
|
INIT_COMMAND = "git init"
|
2010-10-15 21:16:04 -07:00
|
|
|
CHECKOUT_COMMAND = "git checkout -q master"
|
2010-08-30 10:48:07 -05:00
|
|
|
UPDATE_COMMAND = "git pull #{REPOSITORY_URL} master"
|
2010-10-15 21:16:04 -07:00
|
|
|
REVISION_COMMAND = "git log -l -1 --pretty=format:%H 2> /dev/null"
|
|
|
|
GIT_UP_TO_DATE = "Already up-to-date."
|
2010-07-23 17:32:43 -07:00
|
|
|
|
2009-09-20 17:54:10 +02:00
|
|
|
formula_regexp = 'Library/Formula/(.+?)\.rb'
|
|
|
|
ADDED_FORMULA = %r{^\s+create mode \d+ #{formula_regexp}$}
|
|
|
|
UPDATED_FORMULA = %r{^\s+#{formula_regexp}\s}
|
2010-02-18 19:24:03 -05:00
|
|
|
DELETED_FORMULA = %r{^\s+delete mode \d+ #{formula_regexp}$}
|
2010-07-23 17:32:43 -07:00
|
|
|
|
|
|
|
example_regexp = 'Library/Contributions/examples/([^.\s]+).*'
|
|
|
|
ADDED_EXAMPLE = %r{^\s+create mode \d+ #{example_regexp}$}
|
|
|
|
UPDATED_EXAMPLE = %r{^\s+#{example_regexp}}
|
|
|
|
DELETED_EXAMPLE = %r{^\s+delete mode \d+ #{example_regexp}$}
|
|
|
|
|
2010-05-31 14:15:26 -07:00
|
|
|
attr_reader :added_formulae, :updated_formulae, :deleted_formulae, :initial_revision
|
2010-07-23 17:32:43 -07:00
|
|
|
attr_reader :added_examples, :updated_examples, :deleted_examples
|
|
|
|
|
2009-09-08 00:02:28 +02:00
|
|
|
def initialize
|
2010-02-18 19:24:03 -05:00
|
|
|
@added_formulae, @updated_formulae, @deleted_formulae = [], [], []
|
2010-07-23 17:32:43 -07:00
|
|
|
@added_examples, @updated_examples, @deleted_examples = [], [], []
|
2010-05-31 14:15:26 -07:00
|
|
|
@initial_revision = self.current_revision
|
2009-09-08 00:02:28 +02:00
|
|
|
end
|
2010-07-23 17:32:43 -07:00
|
|
|
|
2009-09-08 00:02:28 +02:00
|
|
|
# Performs an update of the homebrew source. Returns +true+ if a newer
|
2009-09-11 19:17:50 +02:00
|
|
|
# version was available, +false+ if already up-to-date.
|
2009-09-08 00:02:28 +02:00
|
|
|
def update_from_masterbrew!
|
2009-11-12 03:55:09 +00:00
|
|
|
output = ''
|
2010-07-23 17:37:03 -07:00
|
|
|
HOMEBREW_REPOSITORY.cd do
|
2009-11-12 03:55:09 +00:00
|
|
|
if File.directory? '.git'
|
|
|
|
safe_system CHECKOUT_COMMAND
|
|
|
|
else
|
2010-10-15 21:16:04 -07:00
|
|
|
safe_system INIT_COMMAND
|
2009-11-12 03:55:09 +00:00
|
|
|
end
|
|
|
|
output = execute(UPDATE_COMMAND)
|
|
|
|
end
|
|
|
|
|
2009-09-20 17:54:10 +02:00
|
|
|
output.split("\n").reverse.each do |line|
|
|
|
|
case line
|
|
|
|
when ADDED_FORMULA
|
|
|
|
@added_formulae << $1
|
2010-02-18 19:24:03 -05:00
|
|
|
when DELETED_FORMULA
|
|
|
|
@deleted_formulae << $1
|
2009-09-20 17:54:10 +02:00
|
|
|
when UPDATED_FORMULA
|
2010-02-18 19:24:03 -05:00
|
|
|
@updated_formulae << $1 unless @added_formulae.include?($1) or @deleted_formulae.include?($1)
|
2010-07-23 17:32:43 -07:00
|
|
|
when ADDED_EXAMPLE
|
|
|
|
@added_examples << $1
|
|
|
|
when DELETED_EXAMPLE
|
|
|
|
@deleted_examples << $1
|
|
|
|
when UPDATED_EXAMPLE
|
|
|
|
@updated_examples << $1 unless @added_examples.include?($1) or @deleted_examples.include?($1)
|
2009-09-20 17:54:10 +02:00
|
|
|
end
|
2009-09-08 00:02:28 +02:00
|
|
|
end
|
2009-09-20 17:54:10 +02:00
|
|
|
@added_formulae.sort!
|
|
|
|
@updated_formulae.sort!
|
2010-02-18 19:24:03 -05:00
|
|
|
@deleted_formulae.sort!
|
2010-07-23 17:32:43 -07:00
|
|
|
@added_examples.sort!
|
|
|
|
@updated_examples.sort!
|
|
|
|
@deleted_examples.sort!
|
|
|
|
|
2009-09-08 00:02:28 +02:00
|
|
|
output.strip != GIT_UP_TO_DATE
|
|
|
|
end
|
2010-07-23 17:32:43 -07:00
|
|
|
|
2009-09-08 00:02:28 +02:00
|
|
|
def pending_formulae_changes?
|
|
|
|
!@updated_formulae.empty?
|
|
|
|
end
|
2010-07-23 17:32:43 -07:00
|
|
|
|
2010-02-18 19:24:03 -05:00
|
|
|
def pending_new_formulae?
|
|
|
|
!@added_formulae.empty?
|
|
|
|
end
|
|
|
|
|
|
|
|
def deleted_formulae?
|
|
|
|
!@deleted_formulae.empty?
|
|
|
|
end
|
|
|
|
|
2010-07-23 17:32:43 -07:00
|
|
|
def pending_examples_changes?
|
|
|
|
!@updated_examples.empty?
|
|
|
|
end
|
|
|
|
|
|
|
|
def pending_new_examples?
|
|
|
|
!@added_examples.empty?
|
|
|
|
end
|
|
|
|
|
|
|
|
def deleted_examples?
|
|
|
|
!@deleted_examples.empty?
|
|
|
|
end
|
|
|
|
|
2009-09-08 00:02:28 +02:00
|
|
|
def current_revision
|
2010-07-23 17:37:03 -07:00
|
|
|
HOMEBREW_REPOSITORY.cd { execute(REVISION_COMMAND).strip }
|
2009-11-12 03:55:09 +00:00
|
|
|
rescue
|
|
|
|
'TAIL'
|
2009-09-08 00:02:28 +02:00
|
|
|
end
|
2010-07-23 17:32:43 -07:00
|
|
|
|
|
|
|
def report
|
|
|
|
puts "Updated Homebrew from #{initial_revision[0,8]} to #{current_revision[0,8]}."
|
|
|
|
## New Formulae
|
|
|
|
if pending_new_formulae?
|
|
|
|
ohai "The following formulae are new:"
|
|
|
|
puts_columns added_formulae
|
|
|
|
end
|
|
|
|
## Deleted Formulae
|
|
|
|
if deleted_formulae?
|
|
|
|
ohai "The following formulae were removed:"
|
|
|
|
puts_columns deleted_formulae
|
|
|
|
end
|
|
|
|
## Updated Formulae
|
|
|
|
if pending_formulae_changes?
|
|
|
|
ohai "The following formulae were updated:"
|
|
|
|
puts_columns updated_formulae
|
|
|
|
else
|
|
|
|
puts "No formulae were updated."
|
|
|
|
end
|
|
|
|
## New examples
|
|
|
|
if pending_new_examples?
|
|
|
|
ohai "The following external commands are new:"
|
|
|
|
puts_columns added_examples
|
|
|
|
end
|
|
|
|
## Deleted examples
|
|
|
|
if deleted_examples?
|
|
|
|
ohai "The following external commands were removed:"
|
|
|
|
puts_columns deleted_examples
|
|
|
|
end
|
|
|
|
## Updated Formulae
|
|
|
|
if pending_examples_changes?
|
|
|
|
ohai "The following external commands were updated:"
|
|
|
|
puts_columns updated_examples
|
|
|
|
else
|
|
|
|
puts "No external commands were updated."
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2009-09-08 00:02:28 +02:00
|
|
|
private
|
2010-07-23 17:37:03 -07:00
|
|
|
|
2009-09-11 20:09:39 +02:00
|
|
|
def execute(cmd)
|
|
|
|
out = `#{cmd}`
|
2010-05-08 15:35:06 +10:00
|
|
|
if $? && !$?.success?
|
2009-09-11 20:58:41 +02:00
|
|
|
puts out
|
2009-09-20 17:54:10 +02:00
|
|
|
raise "Failed while executing #{cmd}"
|
2009-09-11 20:58:41 +02:00
|
|
|
end
|
2009-09-17 18:26:31 +01:00
|
|
|
ohai(cmd, out) if ARGV.verbose?
|
2009-09-11 20:09:39 +02:00
|
|
|
out
|
|
|
|
end
|
2009-09-17 18:40:21 +01:00
|
|
|
end
|