Skip to content
Snippets Groups Projects
Unverified Commit 4465a1f6 authored by Markus Reiter's avatar Markus Reiter Committed by GitHub
Browse files

Merge pull request #8455 from reitermarkus/document-svn

Refactor and document `Svn`.
parents bf257176 8b26e380
No related branches found
No related tags found
No related merge requests found
...@@ -60,7 +60,7 @@ class DependencyCollector ...@@ -60,7 +60,7 @@ class DependencyCollector
end end
def subversion_dep_if_needed(tags) def subversion_dep_if_needed(tags)
return if Utils.svn_available? return if Utils::Svn.available?
Dependency.new("subversion", tags) Dependency.new("subversion", tags)
end end
......
...@@ -1088,9 +1088,9 @@ module Homebrew ...@@ -1088,9 +1088,9 @@ module Homebrew
problem "The URL #{url} is not a valid git URL" unless Utils::Git.remote_exists? url problem "The URL #{url} is not a valid git URL" unless Utils::Git.remote_exists? url
elsif strategy <= SubversionDownloadStrategy elsif strategy <= SubversionDownloadStrategy
next unless DevelopmentTools.subversion_handles_most_https_certificates? next unless DevelopmentTools.subversion_handles_most_https_certificates?
next unless Utils.svn_available? next unless Utils::Svn.available?
problem "The URL #{url} is not a valid svn URL" unless Utils.svn_remote_exists? url problem "The URL #{url} is not a valid svn URL" unless Utils::Svn.remote_exists? url
end end
end end
end end
......
...@@ -523,7 +523,7 @@ class SubversionDownloadStrategy < VCSDownloadStrategy ...@@ -523,7 +523,7 @@ class SubversionDownloadStrategy < VCSDownloadStrategy
end end
def source_modified_time def source_modified_time
time = if Version.create(Utils.svn_version) >= Version.create("1.9") time = if Version.create(Utils::Svn.version) >= Version.create("1.9")
out, = system_command("svn", args: ["info", "--show-item", "last-changed-date"], chdir: cached_location) out, = system_command("svn", args: ["info", "--show-item", "last-changed-date"], chdir: cached_location)
out out
else else
......
...@@ -2,49 +2,48 @@ ...@@ -2,49 +2,48 @@
require "utils/svn" require "utils/svn"
describe Utils do describe Utils::Svn do
describe "#self.svn_available?" do before do
before do described_class.clear_version_cache
described_class.clear_svn_version_cache end
end
describe "::available?" do
it "returns svn version if svn available" do it "returns svn version if svn available" do
if quiet_system "#{HOMEBREW_SHIMS_PATH}/scm/svn", "--version" if quiet_system "#{HOMEBREW_SHIMS_PATH}/scm/svn", "--version"
expect(described_class).to be_svn_available expect(described_class).to be_available
else else
expect(described_class).not_to be_svn_available expect(described_class).not_to be_available
end end
end end
end end
describe "#self.svn_version" do describe "::version" do
before do it "returns svn version if svn available" do
described_class.clear_svn_version_cache if quiet_system "#{HOMEBREW_SHIMS_PATH}/scm/svn", "--version"
end expect(described_class.version).to match(/^\d+\.\d+\.\d+$/)
else
it "returns nil when svn is not available" do expect(described_class.version).to be_nil
allow(described_class).to receive(:svn_available?).and_return(false) end
expect(described_class.svn_version).to eq(nil)
end end
it "returns version of svn when svn is available", :needs_svn do it "returns version of svn when svn is available", :needs_svn do
expect(described_class.svn_version).not_to be_nil expect(described_class.version).not_to be_nil
end end
end end
describe "#self.svn_remote_exists?" do describe "::remote_exists?" do
it "returns true when svn is not available" do it "returns true when svn is not available" do
allow(described_class).to receive(:svn_available?).and_return(false) allow(described_class).to receive(:available?).and_return(false)
expect(described_class).to be_svn_remote_exists("blah") expect(described_class).to be_remote_exists("blah")
end end
context "when svn is available" do context "when svn is available" do
before do before do
allow(described_class).to receive(:svn_available?).and_return(true) allow(described_class).to receive(:available?).and_return(true)
end end
it "returns false when remote does not exist" do it "returns false when remote does not exist" do
expect(described_class).not_to be_svn_remote_exists(HOMEBREW_CACHE/"install") expect(described_class).not_to be_remote_exists(HOMEBREW_CACHE/"install")
end end
it "returns true when remote exists", :needs_network, :needs_svn do it "returns true when remote exists", :needs_network, :needs_svn do
...@@ -54,7 +53,7 @@ describe Utils do ...@@ -54,7 +53,7 @@ describe Utils do
"https://github.com/Homebrew/install" "https://github.com/Homebrew/install"
end end
expect(described_class).to be_svn_remote_exists(HOMEBREW_CACHE/"install") expect(described_class).to be_remote_exists(HOMEBREW_CACHE/"install")
end end
end end
end end
......
# frozen_string_literal: true # frozen_string_literal: true
require "system_command"
module Utils module Utils
def self.clear_svn_version_cache # Helper functions for querying SVN information.
remove_instance_variable(:@svn_available) if defined?(@svn_available) #
remove_instance_variable(:@svn_version) if defined?(@svn_version) # @api private
end module Svn
module_function
def self.svn_available? def available?
return @svn_available if defined?(@svn_available) version.present?
end
@svn_available = quiet_system HOMEBREW_SHIMS_PATH/"scm/svn", "--version" def version
end return @version if defined?(@version)
def self.svn_version stdout, _, status = system_command(HOMEBREW_SHIMS_PATH/"scm/svn", args: ["--version"], print_stderr: false)
return unless svn_available? @version = status.success? ? stdout.chomp[/svn, version (\d+(?:\.\d+)*)/, 1] : nil
return @svn_version if defined?(@svn_version) end
@svn_version = Utils.popen_read( def remote_exists?(url)
HOMEBREW_SHIMS_PATH/"scm/svn", "--version" return true unless available?
).chomp[/svn, version (\d+(?:\.\d+)*)/, 1]
end
def self.svn_remote_exists?(url) # OK to unconditionally trust here because we're just checking if
return true unless svn_available? # a URL exists.
quiet_system "svn", "ls", url, "--depth", "empty",
"--non-interactive", "--trust-server-cert"
end
# OK to unconditionally trust here because we're just checking if def clear_version_cache
# a URL exists. remove_instance_variable(:@version) if defined?(@version)
quiet_system "svn", "ls", url, "--depth", "empty", end
"--non-interactive", "--trust-server-cert"
end end
end end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment