Update Homebrew and list the updated formulae.
This commit is contained in:
parent
c71d4ad2bc
commit
c1989b79ad
36
Library/Homebrew/refresh_brew.rb
Normal file
36
Library/Homebrew/refresh_brew.rb
Normal 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
|
||||
@ -13,10 +13,11 @@ require 'keg'
|
||||
require 'utils'
|
||||
require 'brew.h'
|
||||
require 'hardware.rb'
|
||||
require 'refresh_brew'
|
||||
|
||||
# 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_PREFIX=Pathname.new '/tmp/testbrew/prefix'
|
||||
HOMEBREW_PREFIX=Pathname.new '/private/tmp/testbrew/prefix'
|
||||
HOMEBREW_CACHE=HOMEBREW_PREFIX.parent+"cache"
|
||||
HOMEBREW_CELLAR=HOMEBREW_PREFIX.parent+"cellar"
|
||||
HOMEBREW_USER_AGENT="Homebrew"
|
||||
@ -82,6 +83,20 @@ class TestScriptFileFormula <ScriptFileFormula
|
||||
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
|
||||
if ARGV.include? '-V'
|
||||
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'
|
||||
assert_equal '1.8.0-rc1', f.version
|
||||
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
|
||||
|
||||
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
|
||||
11
bin/brew
11
bin/brew
@ -110,6 +110,17 @@ begin
|
||||
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'
|
||||
ARGV.kegs.each {|keg| puts "#{keg.link} links created for #{keg}"}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user