aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
authorEloy Duran2009-09-08 00:02:28 +0200
committerEloy Duran2009-09-17 00:24:11 +0200
commitc1989b79ad12f54501a749f31fa869dfbac610cd (patch)
tree8b458f9bb3d76378d48bc8328b4786e057868152 /Library/Homebrew
parentc71d4ad2bc0a5e29afb9e36d688405c8ce6cd81c (diff)
downloadbrew-c1989b79ad12f54501a749f31fa869dfbac610cd.tar.bz2
Update Homebrew and list the updated formulae.
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/refresh_brew.rb36
-rwxr-xr-xLibrary/Homebrew/unittest.rb124
2 files changed, 159 insertions, 1 deletions
diff --git a/Library/Homebrew/refresh_brew.rb b/Library/Homebrew/refresh_brew.rb
new file mode 100644
index 000000000..753036ed5
--- /dev/null
+++ b/Library/Homebrew/refresh_brew.rb
@@ -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 \ No newline at end of file
diff --git a/Library/Homebrew/unittest.rb b/Library/Homebrew/unittest.rb
index 8d5f1b76f..bc1cc6937 100755
--- a/Library/Homebrew/unittest.rb
+++ b/Library/Homebrew/unittest.rb
@@ -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 \ No newline at end of file