download_strategy: more direct SVN modified date detection
This commit is contained in:
parent
3eba477b7c
commit
d7864d7efb
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user