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