Update Homebrew and list the updated formulae.

This commit is contained in:
Eloy Duran 2009-09-08 00:02:28 +02:00
parent c71d4ad2bc
commit c1989b79ad
3 changed files with 170 additions and 1 deletions

View File

@ -0,0 +1,36 @@
class RefreshBrew
UPDATE_COMMAND = 'git pull origin masterbrew'
REVISION_COMMAND = 'git log -l -1 --pretty=format:%H'
GIT_UP_TO_DATE = 'Already up-to-date.'
UPDATED_FORMULA = %r{^\s+Library/Formula/(.+?)\.rb\s}
attr_reader :updated_formulae
def initialize
@updated_formulae = []
end
# Performs an update of the homebrew source. Returns +true+ if a newer
# version was availble, +false+ if already up-to-date.
def update_from_masterbrew!
output = git_pull!
output.split("\n").each do |line|
@updated_formulae << $1 if line =~ UPDATED_FORMULA
end
output.strip != GIT_UP_TO_DATE
end
def pending_formulae_changes?
!@updated_formulae.empty?
end
def current_revision
`#{REVISION_COMMAND}`.strip
end
private
def git_pull!
Dir.chdir(HOMEBREW_PREFIX) { `#{UPDATE_COMMAND}` }
end
end

View File

@ -13,10 +13,11 @@ require 'keg'
require 'utils' require 'utils'
require 'brew.h' require 'brew.h'
require 'hardware.rb' require 'hardware.rb'
require 'refresh_brew'
# these are defined in global.rb, but we don't want to break our actual # these are defined in global.rb, but we don't want to break our actual
# homebrew tree, and we do want to test everything :) # homebrew tree, and we do want to test everything :)
HOMEBREW_PREFIX=Pathname.new '/tmp/testbrew/prefix' HOMEBREW_PREFIX=Pathname.new '/private/tmp/testbrew/prefix'
HOMEBREW_CACHE=HOMEBREW_PREFIX.parent+"cache" HOMEBREW_CACHE=HOMEBREW_PREFIX.parent+"cache"
HOMEBREW_CELLAR=HOMEBREW_PREFIX.parent+"cellar" HOMEBREW_CELLAR=HOMEBREW_PREFIX.parent+"cellar"
HOMEBREW_USER_AGENT="Homebrew" HOMEBREW_USER_AGENT="Homebrew"
@ -82,6 +83,20 @@ class TestScriptFileFormula <ScriptFileFormula
end end
end end
class RefreshBrewMock < RefreshBrew
def in_prefix_expect(expect, returns)
@expect, @returns = expect, returns
end
def `(cmd)
if Dir.pwd == HOMEBREW_PREFIX.to_s and cmd == @expect
@returns
else
raise "<#{inspect}> Called backticks in pwd `#{HOMEBREW_PREFIX}' and command `#{cmd}'"
end
end
end
def nostdout def nostdout
if ARGV.include? '-V' if ARGV.include? '-V'
yield yield
@ -485,4 +500,111 @@ class BeerTasting <Test::Unit::TestCase
f=MockFormula.new 'http://ftp.mozilla.org/pub/mozilla.org/js/js-1.8.0-rc1.tar.gz' f=MockFormula.new 'http://ftp.mozilla.org/pub/mozilla.org/js/js-1.8.0-rc1.tar.gz'
assert_equal '1.8.0-rc1', f.version assert_equal '1.8.0-rc1', f.version
end end
def test_updater_update_homebrew_without_any_changes
updater = RefreshBrewMock.new
updater.in_prefix_expect("git pull origin masterbrew", "Already up-to-date.\n")
assert_equal false, updater.update_from_masterbrew!
assert updater.updated_formulae.empty?
end end
def test_updater_update_homebrew_without_formulae_changes
updater = RefreshBrewMock.new
output = fixture('update_git_pull_output_without_formulae_changes')
updater.in_prefix_expect("git pull origin masterbrew", output)
assert_equal true, updater.update_from_masterbrew!
assert !updater.pending_formulae_changes?
assert updater.updated_formulae.empty?
end
def test_updater_update_homebrew_with_formulae_changes
updater = RefreshBrewMock.new
output = fixture('update_git_pull_output_with_formulae_changes')
updater.in_prefix_expect("git pull origin masterbrew", output)
assert_equal true, updater.update_from_masterbrew!
assert updater.pending_formulae_changes?
assert_equal %w{ antiword bash-completion xar yajl }, updater.updated_formulae
end
def test_updater_returns_current_revision
updater = RefreshBrewMock.new
updater.in_prefix_expect('git log -l -1 --pretty=format:%H', 'the-revision-hash')
assert_equal 'the-revision-hash', updater.current_revision
end
private
def fixture(name)
self.class.fixture_data[name]
end
def self.fixture_data
unless @fixture_data
require 'yaml'
@fixture_data = YAML.load(DATA)
end
@fixture_data
end
end
__END__
update_git_pull_output_without_formulae_changes: |
remote: Counting objects: 58, done.
remote: Compressing objects: 100% (35/35), done.
remote: Total 39 (delta 20), reused 0 (delta 0)
Unpacking objects: 100% (39/39), done.
From git://github.com/mxcl/homebrew
* branch masterbrew -> FETCH_HEAD
Updating 14ef7f9..f414bc8
Fast forward
Library/Homebrew/ARGV+yeast.rb | 35 ++--
Library/Homebrew/beer_events.rb | 181 +++++++++++++
Library/Homebrew/hardware.rb | 71 ++++++
Library/Homebrew/hw.model.c | 17 --
README | 337 +++++++++++++------------
bin/brew | 137 ++++++++---
40 files changed, 1107 insertions(+), 426 deletions(-)
create mode 100644 Library/Homebrew/beer_events.rb
create mode 100644 Library/Homebrew/hardware.rb
delete mode 100644 Library/Homebrew/hw.model.c
delete mode 100644 Library/Homebrew/hw.model.rb
update_git_pull_output_with_formulae_changes: |
remote: Counting objects: 58, done.
remote: Compressing objects: 100% (35/35), done.
remote: Total 39 (delta 20), reused 0 (delta 0)
Unpacking objects: 100% (39/39), done.
From git://github.com/mxcl/homebrew
* branch masterbrew -> FETCH_HEAD
Updating 14ef7f9..f414bc8
Fast forward
Library/Contributions/brew_bash_completion.sh | 6 +-
Library/Formula/antiword.rb | 13 +
Library/Formula/bash-completion.rb | 25 ++
Library/Formula/xar.rb | 19 ++
Library/Formula/yajl.rb | 2 +-
Library/Homebrew/ARGV+yeast.rb | 35 ++--
Library/Homebrew/beer_events.rb | 181 +++++++++++++
Library/Homebrew/hardware.rb | 71 ++++++
Library/Homebrew/hw.model.c | 17 --
Library/Homebrew/pathname+yeast.rb | 28 ++-
Library/Homebrew/unittest.rb | 106 ++++++++-
Library/Homebrew/utils.rb | 36 ++-
README | 337 +++++++++++++------------
bin/brew | 137 ++++++++---
40 files changed, 1107 insertions(+), 426 deletions(-)
create mode 100644 Library/Formula/antiword.rb
create mode 100644 Library/Formula/bash-completion.rb
create mode 100644 Library/Formula/ddrescue.rb
create mode 100644 Library/Formula/dict.rb
create mode 100644 Library/Formula/lua.rb
delete mode 100644 Library/Formula/antiword.rb
delete mode 100644 Library/Formula/bash-completion.rb
delete mode 100644 Library/Formula/xar.rb
delete mode 100644 Library/Formula/yajl.rb
create mode 100644 Library/Homebrew/beer_events.rb
create mode 100644 Library/Homebrew/hardware.rb
delete mode 100644 Library/Homebrew/hw.model.c
delete mode 100644 Library/Homebrew/hw.model.rb

View File

@ -110,6 +110,17 @@ begin
end end
when 'up', 'update'
require 'refresh_brew'
updater = RefreshBrew.new
unless updater.update_from_masterbrew!
ohai "Already up-to-date."
else
ohai "Updated Homebrew to: #{updater.current_revision}"
ohai "No formulae were updated." unless updater.pending_formulae_changes?
ohai "The following formulae were updated: #{updater.updated_formulae.join(', ')}"
end
when 'ln', 'link' when 'ln', 'link'
ARGV.kegs.each {|keg| puts "#{keg.link} links created for #{keg}"} ARGV.kegs.each {|keg| puts "#{keg.link} links created for #{keg}"}