Merge pull request #8307 from Bo98/svn-date
download_strategy: more direct SVN modified date detection
This commit is contained in:
		
						commit
						a0fd62fddd
					
				@ -1,7 +1,6 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "json"
 | 
			
		||||
require "rexml/document"
 | 
			
		||||
require "time"
 | 
			
		||||
require "unpack_strategy"
 | 
			
		||||
require "lazy_object"
 | 
			
		||||
@ -523,9 +522,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