diff --git a/Library/Homebrew/cmd/update-report.rb b/Library/Homebrew/cmd/update-report.rb index 25c4cb1bad..c5ed558914 100644 --- a/Library/Homebrew/cmd/update-report.rb +++ b/Library/Homebrew/cmd/update-report.rb @@ -198,6 +198,8 @@ module Homebrew next unless /^(?[^\.]+[^\-])\-(?[^\-].*)/ =~ child.basename.to_s target = HOMEBREW_CACHE/"#{prefix}--#{suffix}" + next if suffix.include?("--") && !suffix.start_with?("patch") + if target.exist? begin FileUtils.rm_rf child diff --git a/Library/Homebrew/test/cmd/update-report_spec.rb b/Library/Homebrew/test/cmd/update-report_spec.rb index dbe1938cdc..e4cfceeb17 100644 --- a/Library/Homebrew/test/cmd/update-report_spec.rb +++ b/Library/Homebrew/test/cmd/update-report_spec.rb @@ -16,6 +16,32 @@ describe "brew update-report" do expect(renamed_cache_file).to exist end + context "when the formula name contains dashes" do + let(:legacy_cache_file) { HOMEBREW_CACHE/"foo-bar-1.2.3.tar.gz" } + let(:renamed_cache_file) { HOMEBREW_CACHE/"foo-bar--1.2.3.tar.gz" } + + it "does not introduce extra double dashes when called multiple times" do + Homebrew.migrate_cache_entries_to_double_dashes(Version.new("1.7.1")) + Homebrew.migrate_cache_entries_to_double_dashes(Version.new("1.7.1")) + + expect(legacy_cache_file).not_to exist + expect(renamed_cache_file).to exist + end + end + + context "when the file is a patch and the formula name contains dashes" do + let(:legacy_cache_file) { HOMEBREW_CACHE/"foo-bar-patch--1.2.3.tar.gz" } + let(:renamed_cache_file) { HOMEBREW_CACHE/"foo-bar--patch--1.2.3.tar.gz" } + + it "does not introduce extra double dashes when called multiple times" do + Homebrew.migrate_cache_entries_to_double_dashes(Version.new("1.7.1")) + Homebrew.migrate_cache_entries_to_double_dashes(Version.new("1.7.1")) + + expect(legacy_cache_file).not_to exist + expect(renamed_cache_file).to exist + end + end + it "does not move files if upgrading from > 1.7.1" do Homebrew.migrate_cache_entries_to_double_dashes(Version.new("1.7.2"))