self.verify

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