From 61d50d559f2a38adfd4b8eb67816b466df5c7689 Mon Sep 17 00:00:00 2001 From: MAEDA Go Date: Sun, 20 Sep 2026 14:50:30 +0900 Subject: [PATCH] Fix broken links to files on the revision page when the root URL of a Subversion repository contains spaces. --- app/models/repository/subversion.rb | 7 ++++++- test/unit/repository_subversion_test.rb | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/models/repository/subversion.rb b/app/models/repository/subversion.rb index 324e7da8d..a4df05487 100644 --- a/app/models/repository/subversion.rb +++ b/app/models/repository/subversion.rb @@ -117,6 +117,11 @@ class Repository::Subversion < Repository # url = file:///var/svn/foo/bar # => returns /bar def relative_url - @relative_url ||= url.gsub(Regexp.new("^#{Regexp.escape(root_url || scm.root_url)}", Regexp::IGNORECASE), '') + @relative_url ||= begin + # root_url is the repository root reported by "svn info", which is + # percent-encoded (e.g. file:///var/svn/foo%20bar) + root = Addressable::URI.unencode((root_url || scm.root_url).to_s) + url.gsub(Regexp.new("^#{Regexp.escape(root)}", Regexp::IGNORECASE), '') + end end end diff --git a/test/unit/repository_subversion_test.rb b/test/unit/repository_subversion_test.rb index ac39025cf..111d81a4a 100644 --- a/test/unit/repository_subversion_test.rb +++ b/test/unit/repository_subversion_test.rb @@ -112,6 +112,16 @@ class RepositorySubversionTest < ActiveSupport::TestCase end end + def test_relative_path_should_handle_percent_encoded_root_url + repository = + Repository::Subversion.new( + :project => @project, + :url => 'file:///svn/repo with spaces/trunk', + :root_url => 'file:///svn/repo%20with%20spaces' + ) + assert_equal '/dir/file.txt', repository.relative_path('/trunk/dir/file.txt') + end + if repository_configured?('subversion') def test_fetch_changesets_from_scratch assert_equal 0, @repository.changesets.count -- 2.55.0