diff --git a/Library/Homebrew/cmd/update.rb b/Library/Homebrew/cmd/update.rb index 5addb4375d..85cc3014b5 100644 --- a/Library/Homebrew/cmd/update.rb +++ b/Library/Homebrew/cmd/update.rb @@ -172,7 +172,7 @@ class Updater map = Hash.new{ |h,k| h[k] = [] } if initial_revision && initial_revision != current_revision - `git diff-tree -r --name-status --diff-filter=AMD #{initial_revision} #{current_revision}`.each_line do |line| + diff.each_line do |line| status, path = line.split map[status.to_sym] << repository.join(path) end @@ -187,6 +187,10 @@ class Updater `git rev-parse -q --verify HEAD`.chomp end + def diff + `git diff-tree -r --name-status --diff-filter=AMD #{initial_revision} #{current_revision}` + end + def `(cmd) out = super if $? && !$?.success? diff --git a/Library/Homebrew/test/test_updater.rb b/Library/Homebrew/test/test_updater.rb index 28ce48ad0b..0806b3d7c8 100644 --- a/Library/Homebrew/test/test_updater.rb +++ b/Library/Homebrew/test/test_updater.rb @@ -4,6 +4,8 @@ require 'yaml' class UpdaterTests < Homebrew::TestCase class UpdaterMock < ::Updater + attr_accessor :diff + def initialize(*) super @outputs = Hash.new { |h, k| h[k] = [] } @@ -51,12 +53,12 @@ class UpdaterTests < Homebrew::TestCase def perform_update(diff_output="") HOMEBREW_REPOSITORY.cd do + @updater.diff = diff_output @updater.in_repo_expect("git checkout -q master") @updater.in_repo_expect("git rev-parse -q --verify HEAD", "1234abcd") @updater.in_repo_expect("git config core.autocrlf false") @updater.in_repo_expect("git pull -q origin refs/heads/master:refs/remotes/origin/master") @updater.in_repo_expect("git rev-parse -q --verify HEAD", "3456cdef") - @updater.in_repo_expect("git diff-tree -r --name-status --diff-filter=AMD 1234abcd 3456cdef", diff_output) @updater.pull! @report.update(@updater.report) end