download_strategy: more direct SVN modified date detection

This commit is contained in:
Bo Anderson 2020-08-11 18:53:13 +01:00
parent 3eba477b7c
commit d7864d7efb
4 changed files with 37 additions and 8 deletions

View File

@ -1,7 +1,6 @@
# frozen_string_literal: true
require "json"
require "rexml/document"
require "time"
require "unpack_strategy"
require "lazy_object"
@ -518,9 +517,14 @@ class SubversionDownloadStrategy < VCSDownloadStrategy
end
def source_modified_time
out, = system_command("svn", args: ["info", "--xml"], chdir: cached_location)
xml = REXML::Document.new(out)
Time.parse REXML::XPath.first(xml, "//date/text()").to_s
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
else
out, = system_command("svn", args: ["info"], chdir: cached_location)
out[/^Last Changed Date: (.+)$/, 1]
end
Time.parse time
end
def last_commit

View File

@ -120,7 +120,7 @@ describe Utils do
describe "::git_version" do
it "returns nil when git is not available" do
stub_const("HOMEBREW_SHIMS_PATH", HOMEBREW_PREFIX/"bin/shim")
expect(described_class.git_path).to eq(nil)
expect(described_class.git_version).to eq(nil)
end
it "returns version of git when git is available" do

View File

@ -17,6 +17,21 @@ describe Utils do
end
end
describe "#self.svn_version" do
before do
described_class.clear_svn_version_cache
end
it "returns nil when svn is not available" do
allow(described_class).to receive(:svn_available?).and_return(false)
expect(described_class.svn_version).to eq(nil)
end
it "returns version of svn when svn is available", :needs_svn do
expect(described_class.svn_version).not_to be_nil
end
end
describe "#self.svn_remote_exists?" do
it "returns true when svn is not available" do
allow(described_class).to receive(:svn_available?).and_return(false)

View File

@ -2,13 +2,23 @@
module Utils
def self.clear_svn_version_cache
remove_instance_variable(:@svn) if instance_variable_defined?(:@svn)
remove_instance_variable(:@svn_available) if defined?(@svn_available)
remove_instance_variable(:@svn_version) if defined?(@svn_version)
end
def self.svn_available?
return @svn if instance_variable_defined?(:@svn)
return @svn_available if defined?(@svn_available)
@svn = quiet_system HOMEBREW_SHIMS_PATH/"scm/svn", "--version"
@svn_available = quiet_system HOMEBREW_SHIMS_PATH/"scm/svn", "--version"
end
def self.svn_version
return unless svn_available?
return @svn_version if defined?(@svn_version)
@svn_version = Utils.popen_read(
HOMEBREW_SHIMS_PATH/"scm/svn", "--version"
).chomp[/svn, version (\d+(?:\.\d+)*)/, 1]
end
def self.svn_remote_exists?(url)