in _plugins/link-checker.rb [151:219]
def self.verify(site)
return unless @check_links
@base_url_matcher = /^
retry_hosts = {}
loop do
urls = @urls
unless retry_hosts.empty?
host_name, min_timeout_obj = @retry_timeouts_dict.min_by { |k,v| v[:retry_timestamp] }
now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
sleep_time = min_timeout_obj[:retry_timestamp] - now + @@retry_buffer
if sleep_time > 0
Jekyll.logger.info "LinkChecker: [Info] Going to sleep for #{sleep_time}".cyan()
sleep(sleep_time)
end
Jekyll.logger.info "LinkChecker: [Info] Retrying links for host #{host_name}".cyan()
urls = retry_hosts[host_name].clone
@retry_timeouts_dict.delete(host_name)
retry_hosts.delete(host_name)
end
urls.each do |url, pages|
valid_or_retry, metadata = check(url)
@failures << "Verify:: #{url}, linked to in ./#{pages.to_a.join(", ./")}" unless valid_or_retry
if @retry_external_links and metadata&.key?(:retry_host_name)
retry_host_name = metadata[:retry_host_name]
retry_hosts[retry_host_name] = [] unless retry_hosts.key?(retry_host_name)
retry_hosts[retry_host_name] << url
end
end
@retry_iteration += 1
break if !@retry_external_links or (@retry_iteration >= @@max_retry_iterations) or retry_hosts.empty?
end
msg = "Found #{@failures.size} dead link#{@failures.size > 1 ? 's' : ''}:\n#{@failures.join("\n")}" unless @failures.empty?
unless retry_hosts.empty?
retry_msg = retry_hosts.map {|host, urls|
"Host:#{host}\n#{urls.map {|url| "-
}.join("\n")
msg = "Links we could not retry: \n#{retry_msg} \n#{msg}"
end
if !@failures.empty?
if @should_build_fatally
raise msg
else
Jekyll.logger.warn "\nLinkChecker: [Warning] #{msg}\n"
end
else
Jekyll.logger.info "\nLinkChecker: [Success] No broken links!\n".green()
end
end