diff --git a/Library/Homebrew/cmd/update.rb b/Library/Homebrew/cmd/update.rb index 4be763b6aa..9890d15ef1 100644 --- a/Library/Homebrew/cmd/update.rb +++ b/Library/Homebrew/cmd/update.rb @@ -187,7 +187,13 @@ class Updater @stashed = true end - @initial_branch = `git symbolic-ref --short HEAD`.chomp + + begin + @initial_branch = `git symbolic-ref --short HEAD 2>/dev/null`.chomp + rescue ErrorDuringExecution + @initial_branch = "" + end + if @initial_branch != "master" && !@initial_branch.empty? safe_system "git", "checkout", "master", *quiet end @@ -227,7 +233,7 @@ class Updater ignore_interrupts { yield } ensure if $?.signaled? && $?.termsig == 2 # SIGINT - safe_system "git", "checkout", @initial_branch + safe_system "git", "checkout", @initial_branch unless @initial_branch.empty? safe_system "git", "reset", "--hard", @initial_revision safe_system "git", "stash", "pop" if @stashed end diff --git a/Library/Homebrew/test/test_updater.rb b/Library/Homebrew/test/test_updater.rb index 88f8c23aa7..16f4f2e858 100644 --- a/Library/Homebrew/test/test_updater.rb +++ b/Library/Homebrew/test/test_updater.rb @@ -58,7 +58,7 @@ class UpdaterTests < Homebrew::TestCase FormulaVersions.stubs(:new).returns(stub(:formula_at_revision => "2.0")) @updater.diff = fixture(fixture_name) @updater.in_repo_expect("git diff --quiet", true) - @updater.in_repo_expect("git symbolic-ref --short HEAD", "master") + @updater.in_repo_expect("git symbolic-ref --short HEAD 2>/dev/null", "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 --ff --no-rebase --quiet origin refs/heads/master:refs/remotes/origin/master")