79 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # typed: false
 | |
| # frozen_string_literal: true
 | |
| 
 | |
| require "cli/parser"
 | |
| require "formula"
 | |
| require "livecheck/livecheck"
 | |
| require "livecheck/strategy"
 | |
| 
 | |
| module Homebrew
 | |
|   module_function
 | |
| 
 | |
|   WATCHLIST_PATH = (
 | |
|     ENV["HOMEBREW_LIVECHECK_WATCHLIST"] ||
 | |
|     "#{Dir.home}/.brew_livecheck_watchlist"
 | |
|   ).freeze
 | |
| 
 | |
|   def livecheck_args
 | |
|     Homebrew::CLI::Parser.new do
 | |
|       usage_banner <<~EOS
 | |
|         `livecheck` [<formulae>]
 | |
| 
 | |
|         Check for newer versions of formulae from upstream.
 | |
| 
 | |
|         If no formula argument is passed, the list of formulae to check is taken from `HOMEBREW_LIVECHECK_WATCHLIST`
 | |
|         or `~/.brew_livecheck_watchlist`.
 | |
|       EOS
 | |
|       switch "--full-name",
 | |
|              description: "Print formulae with fully-qualified names."
 | |
|       flag   "--tap=",
 | |
|              description: "Check formulae within the given tap, specified as <user>`/`<repo>."
 | |
|       switch "--all",
 | |
|              description: "Check all available formulae."
 | |
|       switch "--installed",
 | |
|              description: "Check formulae that are currently installed."
 | |
|       switch "--newer-only",
 | |
|              description: "Show the latest version only if it's newer than the formula."
 | |
|       switch "--json",
 | |
|              description: "Output information in JSON format."
 | |
|       switch "-q", "--quiet",
 | |
|              description: "Suppress warnings, don't print a progress bar for JSON output."
 | |
|       conflicts "--debug", "--json"
 | |
|       conflicts "--tap=", "--all", "--installed"
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def livecheck
 | |
|     args = livecheck_args.parse
 | |
| 
 | |
|     if args.debug? && args.verbose?
 | |
|       puts args
 | |
|       puts ENV["HOMEBREW_LIVECHECK_WATCHLIST"] if ENV["HOMEBREW_LIVECHECK_WATCHLIST"].present?
 | |
|     end
 | |
| 
 | |
|     formulae_to_check = if args.tap
 | |
|       Tap.fetch(args.tap).formula_names.map { |name| Formula[name] }
 | |
|     elsif args.installed?
 | |
|       Formula.installed
 | |
|     elsif args.all?
 | |
|       Formula
 | |
|     elsif (formulae_args = args.named.to_formulae) && formulae_args.present?
 | |
|       formulae_args
 | |
|     elsif File.exist?(WATCHLIST_PATH)
 | |
|       begin
 | |
|         Pathname.new(WATCHLIST_PATH).read.lines.map do |line|
 | |
|           next if line.start_with?("#")
 | |
| 
 | |
|           Formula[line.strip]
 | |
|         end.compact
 | |
|       rescue Errno::ENOENT => e
 | |
|         onoe e
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     raise UsageError, "No formulae to check." if formulae_to_check.blank?
 | |
| 
 | |
|     Livecheck.livecheck_formulae(formulae_to_check, args)
 | |
|   end
 | |
| end
 | 
