aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/dev-cmd/audit.rb18
-rw-r--r--Library/Homebrew/utils.rb1
-rw-r--r--Library/Homebrew/utils/git.rb5
-rw-r--r--Library/Homebrew/utils/svn.rb11
4 files changed, 31 insertions, 4 deletions
diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb
index db7973eb3..839d1c429 100644
--- a/Library/Homebrew/dev-cmd/audit.rb
+++ b/Library/Homebrew/dev-cmd/audit.rb
@@ -1490,10 +1490,20 @@ class ResourceAuditor
return unless @online
urls.each do |url|
- begin
- nostdout { curl "--connect-timeout", "15", "--output", "/dev/null", "--range", "0-0", url }
- rescue ErrorDuringExecution
- problem "The mirror #{url} is not reachable (curl exit code #{$?.exitstatus})"
+ if url.start_with? "http", "ftp"
+ status_code, _, _ = curl_output "--connect-timeout", "15", "--output", "/dev/null", "--range", "0-0", \
+ "--write-out", "%{http_code}", url
+ unless status_code.start_with? "20"
+ problem "The mirror #{url} is not reachable (HTTP status code #{status_code})"
+ end
+ elsif url.start_with? "git"
+ unless Utils.git_remote_exists url
+ problem "The mirror #{url} is not a valid git URL"
+ end
+ elsif url.start_with? "svn"
+ unless Utils.svn_remote_exists url
+ problem "The mirror #{url} is not a valid svn URL"
+ end
end
check_insecure_mirror(url) if url.start_with? "http:"
end
diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb
index 70d2787d9..b129c7328 100644
--- a/Library/Homebrew/utils.rb
+++ b/Library/Homebrew/utils.rb
@@ -10,6 +10,7 @@ require "utils/github"
require "utils/hash"
require "utils/inreplace"
require "utils/popen"
+require "utils/svn"
require "utils/tty"
require "time"
diff --git a/Library/Homebrew/utils/git.rb b/Library/Homebrew/utils/git.rb
index dfe47f890..1b4d24894 100644
--- a/Library/Homebrew/utils/git.rb
+++ b/Library/Homebrew/utils/git.rb
@@ -40,4 +40,9 @@ module Utils
@git_path = nil
@git_version = nil
end
+
+ def self.git_remote_exists(url)
+ return true unless git_available?
+ quiet_system "git", "ls-remote", url
+ end
end
diff --git a/Library/Homebrew/utils/svn.rb b/Library/Homebrew/utils/svn.rb
new file mode 100644
index 000000000..fb49ac2e9
--- /dev/null
+++ b/Library/Homebrew/utils/svn.rb
@@ -0,0 +1,11 @@
+module Utils
+ def self.svn_available?
+ return @svn if instance_variable_defined?(:@svn)
+ @svn = quiet_system HOMEBREW_SHIMS_PATH/"scm/svn", "--version"
+ end
+
+ def self.svn_remote_exists(url)
+ return true unless svn_available?
+ quiet_system "svn", "ls", url, "--depth", "empty"
+ end
+end