diff --git a/Library/Homebrew/cmd/update.rb b/Library/Homebrew/cmd/update.rb index 200f039792..83350988b5 100644 --- a/Library/Homebrew/cmd/update.rb +++ b/Library/Homebrew/cmd/update.rb @@ -194,6 +194,8 @@ class Updater reset_on_interrupt { safe_system "git", *args } + @current_revision = read_current_revision + if @initial_branch != "master" && !@initial_branch.empty? safe_system "git", "checkout", @initial_branch, *quiet end @@ -206,8 +208,6 @@ class Updater end @stashed = false end - - @current_revision = read_current_revision end def reset_on_interrupt @@ -224,6 +224,8 @@ class Updater map = Hash.new { |h, k| h[k] = [] } if initial_revision && initial_revision != current_revision + wc_revision = read_current_revision + diff.each_line do |line| status, *paths = line.split src = paths.first @@ -239,7 +241,11 @@ class Updater file = repository.join(src) begin formula = Formulary.factory(file) - new_version = formula.pkg_version + new_version = if wc_revision == current_revision + formula.pkg_version + else + FormulaVersions.new(formula).formula_at_revision(@current_revision, &:pkg_version) + end old_version = FormulaVersions.new(formula).formula_at_revision(@initial_revision, &:pkg_version) next if new_version == old_version rescue FormulaUnavailableError, *FormulaVersions::IGNORED_EXCEPTIONS => e diff --git a/Library/Homebrew/test/test_updater.rb b/Library/Homebrew/test/test_updater.rb index 9c3c029796..87e175ea3a 100644 --- a/Library/Homebrew/test/test_updater.rb +++ b/Library/Homebrew/test/test_updater.rb @@ -64,6 +64,7 @@ class UpdaterTests < Homebrew::TestCase @updater.in_repo_expect("git pull --quiet origin refs/heads/master:refs/remotes/origin/master") @updater.in_repo_expect("git rev-parse -q --verify HEAD", "3456cdef") @updater.pull!(:silent => true) + @updater.in_repo_expect("git rev-parse -q --verify HEAD", "3456cdef") @report.update(@updater.report) assert_equal @updater.expected, @updater.called end