Moved kegs from ARGV to args.rb
This commit is contained in:
		
							parent
							
								
									2bf8015bc4
								
							
						
					
					
						commit
						fd429d0d75
					
				@ -50,6 +50,69 @@ module Homebrew
 | 
			
		||||
      def passthrough
 | 
			
		||||
        options_only - CLI::Parser.global_options.values.map(&:first).flatten
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def downcased_unique_named
 | 
			
		||||
        # Only lowercase names, not paths, bottle filenames or URLs
 | 
			
		||||
        @downcased_unique_named ||= remaining.map do |arg|
 | 
			
		||||
          if arg.include?("/") || arg.end_with?(".tar.gz") || File.exist?(arg)
 | 
			
		||||
            arg
 | 
			
		||||
          else
 | 
			
		||||
            arg.downcase
 | 
			
		||||
          end
 | 
			
		||||
        end.uniq
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def kegs
 | 
			
		||||
        require "keg"
 | 
			
		||||
        require "formula"
 | 
			
		||||
        require "missing_formula"
 | 
			
		||||
 | 
			
		||||
        @kegs ||= downcased_unique_named.map do |name|
 | 
			
		||||
          raise UsageError if name.empty?
 | 
			
		||||
 | 
			
		||||
          rack = Formulary.to_rack(name.downcase)
 | 
			
		||||
 | 
			
		||||
          dirs = rack.directory? ? rack.subdirs : []
 | 
			
		||||
 | 
			
		||||
          if dirs.empty?
 | 
			
		||||
            if (reason = Homebrew::MissingFormula.suggest_command(name, "uninstall"))
 | 
			
		||||
              $stderr.puts reason
 | 
			
		||||
            end
 | 
			
		||||
            raise NoSuchKegError, rack.basename
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          linked_keg_ref = HOMEBREW_LINKED_KEGS/rack.basename
 | 
			
		||||
          opt_prefix = HOMEBREW_PREFIX/"opt/#{rack.basename}"
 | 
			
		||||
 | 
			
		||||
          begin
 | 
			
		||||
            if opt_prefix.symlink? && opt_prefix.directory?
 | 
			
		||||
              Keg.new(opt_prefix.resolved_path)
 | 
			
		||||
            elsif linked_keg_ref.symlink? && linked_keg_ref.directory?
 | 
			
		||||
              Keg.new(linked_keg_ref.resolved_path)
 | 
			
		||||
            elsif dirs.length == 1
 | 
			
		||||
              Keg.new(dirs.first)
 | 
			
		||||
            else
 | 
			
		||||
              f = if name.include?("/") || File.exist?(name)
 | 
			
		||||
                Formulary.factory(name)
 | 
			
		||||
              else
 | 
			
		||||
                Formulary.from_rack(rack)
 | 
			
		||||
              end
 | 
			
		||||
 | 
			
		||||
              unless (prefix = f.installed_prefix).directory?
 | 
			
		||||
                raise MultipleVersionsInstalledError, rack.basename
 | 
			
		||||
              end
 | 
			
		||||
 | 
			
		||||
              Keg.new(prefix)
 | 
			
		||||
            end
 | 
			
		||||
          rescue FormulaUnavailableError
 | 
			
		||||
            raise <<~EOS
 | 
			
		||||
              Multiple kegs installed to #{rack}
 | 
			
		||||
              However we don't know which one you refer to.
 | 
			
		||||
              Please delete (with rm -rf!) all but one and then try again.
 | 
			
		||||
            EOS
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,7 @@ module Homebrew
 | 
			
		||||
    mode.overwrite = true if args.overwrite?
 | 
			
		||||
    mode.dry_run = true if args.dry_run?
 | 
			
		||||
 | 
			
		||||
    ARGV.kegs.each do |keg|
 | 
			
		||||
    Homebrew.args.kegs.each do |keg|
 | 
			
		||||
      keg_only = Formulary.keg_only?(keg.rack)
 | 
			
		||||
 | 
			
		||||
      if keg.linked?
 | 
			
		||||
 | 
			
		||||
@ -73,9 +73,9 @@ module Homebrew
 | 
			
		||||
        safe_system "ls", *Homebrew.args.passthrough << HOMEBREW_CELLAR
 | 
			
		||||
      end
 | 
			
		||||
    elsif args.verbose? || !$stdout.tty?
 | 
			
		||||
      system_command! "find", args: ARGV.kegs.map(&:to_s) + %w[-not -type d -print], print_stdout: true
 | 
			
		||||
      system_command! "find", args: Homebrew.args.kegs.map(&:to_s) + %w[-not -type d -print], print_stdout: true
 | 
			
		||||
    else
 | 
			
		||||
      ARGV.kegs.each { |keg| PrettyListing.new keg }
 | 
			
		||||
      Homebrew.args.kegs.each { |keg| PrettyListing.new keg }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,7 @@ module Homebrew
 | 
			
		||||
        [rack, rack.subdirs.map { |d| Keg.new(d) }]
 | 
			
		||||
      end]
 | 
			
		||||
    else
 | 
			
		||||
      ARGV.kegs.group_by(&:rack)
 | 
			
		||||
      Homebrew.args.kegs.group_by(&:rack)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    handle_unsatisfied_dependents(kegs_by_rack)
 | 
			
		||||
 | 
			
		||||
@ -31,7 +31,7 @@ module Homebrew
 | 
			
		||||
    mode = OpenStruct.new
 | 
			
		||||
    mode.dry_run = true if args.dry_run?
 | 
			
		||||
 | 
			
		||||
    ARGV.kegs.each do |keg|
 | 
			
		||||
    Homebrew.args.kegs.each do |keg|
 | 
			
		||||
      if mode.dry_run
 | 
			
		||||
        puts "Would remove:"
 | 
			
		||||
        keg.unlink(mode)
 | 
			
		||||
 | 
			
		||||
@ -33,10 +33,10 @@ module Homebrew
 | 
			
		||||
    linkage_args.parse
 | 
			
		||||
 | 
			
		||||
    CacheStoreDatabase.use(:linkage) do |db|
 | 
			
		||||
      kegs = if ARGV.kegs.empty?
 | 
			
		||||
      kegs = if Homebrew.args.kegs.empty?
 | 
			
		||||
        Formula.installed.map(&:opt_or_installed_prefix_keg).reject(&:nil?)
 | 
			
		||||
      else
 | 
			
		||||
        ARGV.kegs
 | 
			
		||||
        Homebrew.args.kegs
 | 
			
		||||
      end
 | 
			
		||||
      kegs.each do |keg|
 | 
			
		||||
        ohai "Checking #{keg.name} linkage" if kegs.size > 1
 | 
			
		||||
 | 
			
		||||
@ -39,58 +39,6 @@ module HomebrewArgvExtension
 | 
			
		||||
    downcased_unique_named.grep HOMEBREW_CASK_TAP_CASK_REGEX
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def kegs
 | 
			
		||||
    require "keg"
 | 
			
		||||
    require "formula"
 | 
			
		||||
    require "missing_formula"
 | 
			
		||||
    # TODO: use @instance variable to ||= cache when moving to CLI::Parser
 | 
			
		||||
    downcased_unique_named.map do |name|
 | 
			
		||||
      raise UsageError if name.empty?
 | 
			
		||||
 | 
			
		||||
      rack = Formulary.to_rack(name.downcase)
 | 
			
		||||
 | 
			
		||||
      dirs = rack.directory? ? rack.subdirs : []
 | 
			
		||||
 | 
			
		||||
      if dirs.empty?
 | 
			
		||||
        if (reason = Homebrew::MissingFormula.suggest_command(name, "uninstall"))
 | 
			
		||||
          $stderr.puts reason
 | 
			
		||||
        end
 | 
			
		||||
        raise NoSuchKegError, rack.basename
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      linked_keg_ref = HOMEBREW_LINKED_KEGS/rack.basename
 | 
			
		||||
      opt_prefix = HOMEBREW_PREFIX/"opt/#{rack.basename}"
 | 
			
		||||
 | 
			
		||||
      begin
 | 
			
		||||
        if opt_prefix.symlink? && opt_prefix.directory?
 | 
			
		||||
          Keg.new(opt_prefix.resolved_path)
 | 
			
		||||
        elsif linked_keg_ref.symlink? && linked_keg_ref.directory?
 | 
			
		||||
          Keg.new(linked_keg_ref.resolved_path)
 | 
			
		||||
        elsif dirs.length == 1
 | 
			
		||||
          Keg.new(dirs.first)
 | 
			
		||||
        else
 | 
			
		||||
          f = if name.include?("/") || File.exist?(name)
 | 
			
		||||
            Formulary.factory(name)
 | 
			
		||||
          else
 | 
			
		||||
            Formulary.from_rack(rack)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          unless (prefix = f.installed_prefix).directory?
 | 
			
		||||
            raise MultipleVersionsInstalledError, rack.basename
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          Keg.new(prefix)
 | 
			
		||||
        end
 | 
			
		||||
      rescue FormulaUnavailableError
 | 
			
		||||
        raise <<~EOS
 | 
			
		||||
          Multiple kegs installed to #{rack}
 | 
			
		||||
          However we don't know which one you refer to.
 | 
			
		||||
          Please delete (with rm -rf!) all but one and then try again.
 | 
			
		||||
        EOS
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def value(name)
 | 
			
		||||
    arg_prefix = "--#{name}="
 | 
			
		||||
    flag_with_value = find { |arg| arg.start_with?(arg_prefix) }
 | 
			
		||||
 | 
			
		||||
@ -27,27 +27,6 @@ describe HomebrewArgvExtension do
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "#kegs" do
 | 
			
		||||
    context "when there are matching Kegs" do
 | 
			
		||||
      before do
 | 
			
		||||
        keg = HOMEBREW_CELLAR + "mxcl/10.0"
 | 
			
		||||
        keg.mkpath
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it "returns an array of Kegs" do
 | 
			
		||||
        expect(subject.kegs.length).to eq 1
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "when there are no matching Kegs" do
 | 
			
		||||
      let(:argv) { [] }
 | 
			
		||||
 | 
			
		||||
      it "returns an empty array" do
 | 
			
		||||
        expect(subject.kegs).to be_empty
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "#named" do
 | 
			
		||||
    let(:argv) { ["foo", "--debug", "-v"] }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -235,5 +235,22 @@ describe Homebrew::CLI::Parser do
 | 
			
		||||
      parser.parse(["--foo", "--bar=value", "-v", "-s", "a", "b", "cdefg"])
 | 
			
		||||
      expect(Homebrew.args.passthrough).to eq %w[--foo --bar=value -s]
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "kegs" do
 | 
			
		||||
      before do
 | 
			
		||||
        keg = HOMEBREW_CELLAR + "mxcl/10.0"
 | 
			
		||||
        keg.mkpath
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it "when there are matching kegs returns an array of Kegs" do
 | 
			
		||||
        parser.parse(["mxcl"])
 | 
			
		||||
        expect(Homebrew.args.kegs.length).to eq 1
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it "when there are no matching kegs returns an array of Kegs" do
 | 
			
		||||
        parser.parse([])
 | 
			
		||||
        expect(Homebrew.args.kegs).to be_empty
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user