From b72c4e324864ad9f3e809e7f8f0308d7b709e4e2 Mon Sep 17 00:00:00 2001 From: Andrew Janke Date: Tue, 19 Jun 2018 20:13:43 -0400 Subject: [PATCH] Fix SVN downloads of versioned formula by munging directory names --- Library/Homebrew/download_strategy.rb | 4 ++++ Library/Homebrew/resource.rb | 12 +++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index fe34008a17..d8fa33f7b3 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -665,6 +665,10 @@ class SubversionDownloadStrategy < VCSDownloadStrategy @url = @url.sub("svn+http://", "") end + def cache_filename + Resource.safe_download_name("#{name}--#{cache_tag}") + end + def fetch clear_cache unless @url.chomp("/") == repo_url || quiet_system("svn", "switch", @url, cached_location) super diff --git a/Library/Homebrew/resource.rb b/Library/Homebrew/resource.rb index 3dda50f8df..12519bb98d 100644 --- a/Library/Homebrew/resource.rb +++ b/Library/Homebrew/resource.rb @@ -66,8 +66,18 @@ class Resource name.tr("/", "-") end + def self.safe_download_name(str) + # "@" is a special character for Subversion. Keep it out of the cache dir name. + str.gsub("@", "-AT-") + end + def download_name - name.nil? ? owner.name : "#{owner.name}--#{escaped_name}" + raw_name = if name + "#{owner.name}--#{escaped_name}" + else + owner.name + end + Resource.safe_download_name(raw_name) end def cached_download