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
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require "json"
|
require "json"
|
||||||
require "rexml/document"
|
|
||||||
require "time"
|
require "time"
|
||||||
require "unpack_strategy"
|
require "unpack_strategy"
|
||||||
require "lazy_object"
|
require "lazy_object"
|
||||||
@ -518,9 +517,14 @@ class SubversionDownloadStrategy < VCSDownloadStrategy
|
|||||||
end
|
end
|
||||||
|
|
||||||
def source_modified_time
|
def source_modified_time
|
||||||
out, = system_command("svn", args: ["info", "--xml"], chdir: cached_location)
|
time = if Version.create(Utils.svn_version) >= Version.create("1.9")
|
||||||
xml = REXML::Document.new(out)
|
out, = system_command("svn", args: ["info", "--show-item", "last-changed-date"], chdir: cached_location)
|
||||||
Time.parse REXML::XPath.first(xml, "//date/text()").to_s
|
out
|
||||||
|
else
|
||||||
|
out, = system_command("svn", args: ["info"], chdir: cached_location)
|
||||||
|
out[/^Last Changed Date: (.+)$/, 1]
|
||||||
|
end
|
||||||
|
Time.parse time
|
||||||
end
|
end
|
||||||
|
|
||||||
def last_commit
|
def last_commit
|
||||||
|
|||||||
@ -120,7 +120,7 @@ describe Utils do
|
|||||||
describe "::git_version" do
|
describe "::git_version" do
|
||||||
it "returns nil when git is not available" do
|
it "returns nil when git is not available" do
|
||||||
stub_const("HOMEBREW_SHIMS_PATH", HOMEBREW_PREFIX/"bin/shim")
|
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
|
end
|
||||||
|
|
||||||
it "returns version of git when git is available" do
|
it "returns version of git when git is available" do
|
||||||
|
|||||||
@ -17,6 +17,21 @@ describe Utils do
|
|||||||
end
|
end
|
||||||
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
|
describe "#self.svn_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(:svn_available?).and_return(false)
|
||||||
|
|||||||
@ -2,13 +2,23 @@
|
|||||||
|
|
||||||
module Utils
|
module Utils
|
||||||
def self.clear_svn_version_cache
|
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
|
end
|
||||||
|
|
||||||
def self.svn_available?
|
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
|
end
|
||||||
|
|
||||||
def self.svn_remote_exists?(url)
|
def self.svn_remote_exists?(url)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user