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 '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
|
||||||
11
bin/brew
11
bin/brew
@ -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}"}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user