cmd/keg: refactor to use keyword arguments
This commit is contained in:
		
							parent
							
								
									bca4804a9e
								
							
						
					
					
						commit
						beccc857e1
					
				@ -339,8 +339,7 @@ class Keg
 | 
			
		||||
    EOS
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # TODO: refactor to use keyword arguments.
 | 
			
		||||
  def unlink(**options)
 | 
			
		||||
  def unlink(verbose: false, dry_run: false)
 | 
			
		||||
    ObserverPathnameExtension.reset_counts!
 | 
			
		||||
 | 
			
		||||
    dirs = []
 | 
			
		||||
@ -358,7 +357,7 @@ class Keg
 | 
			
		||||
        next unless dst.symlink?
 | 
			
		||||
        next if src != dst.resolved_path
 | 
			
		||||
 | 
			
		||||
        if options[:dry_run]
 | 
			
		||||
        if dry_run
 | 
			
		||||
          puts dst
 | 
			
		||||
          Find.prune if src.directory?
 | 
			
		||||
          next
 | 
			
		||||
@ -370,7 +369,7 @@ class Keg
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    unless options[:dry_run]
 | 
			
		||||
    unless dry_run
 | 
			
		||||
      remove_old_aliases
 | 
			
		||||
      remove_linked_keg_record if linked?
 | 
			
		||||
      dirs.reverse_each(&:rmdir_if_possible)
 | 
			
		||||
@ -456,22 +455,21 @@ class Keg
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # TODO: refactor to use keyword arguments.
 | 
			
		||||
  def link(**options)
 | 
			
		||||
  def link(verbose: false, dry_run: false, overwrite: false)
 | 
			
		||||
    raise AlreadyLinkedError, self if linked_keg_record.directory?
 | 
			
		||||
 | 
			
		||||
    ObserverPathnameExtension.reset_counts!
 | 
			
		||||
 | 
			
		||||
    optlink(**options) unless options[:dry_run]
 | 
			
		||||
    optlink(verbose: verbose, dry_run: dry_run, overwrite: overwrite) unless dry_run
 | 
			
		||||
 | 
			
		||||
    # yeah indeed, you have to force anything you need in the main tree into
 | 
			
		||||
    # these dirs REMEMBER that *NOT* everything needs to be in the main tree
 | 
			
		||||
    link_dir("etc", **options) { :mkpath }
 | 
			
		||||
    link_dir("bin", **options) { :skip_dir }
 | 
			
		||||
    link_dir("sbin", **options) { :skip_dir }
 | 
			
		||||
    link_dir("include", **options) { :link }
 | 
			
		||||
    link_dir("etc", verbose: verbose, dry_run: dry_run, overwrite: overwrite) { :mkpath }
 | 
			
		||||
    link_dir("bin", verbose: verbose, dry_run: dry_run, overwrite: overwrite) { :skip_dir }
 | 
			
		||||
    link_dir("sbin", verbose: verbose, dry_run: dry_run, overwrite: overwrite) { :skip_dir }
 | 
			
		||||
    link_dir("include", verbose: verbose, dry_run: dry_run, overwrite: overwrite) { :link }
 | 
			
		||||
 | 
			
		||||
    link_dir("share", **options) do |relative_path|
 | 
			
		||||
    link_dir("share", verbose: verbose, dry_run: dry_run, overwrite: overwrite) do |relative_path|
 | 
			
		||||
      case relative_path.to_s
 | 
			
		||||
      when INFOFILE_RX then :info
 | 
			
		||||
      when "locale/locale.alias",
 | 
			
		||||
@ -490,7 +488,7 @@ class Keg
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    link_dir("lib", **options) do |relative_path|
 | 
			
		||||
    link_dir("lib", verbose: verbose, dry_run: dry_run, overwrite: overwrite) do |relative_path|
 | 
			
		||||
      case relative_path.to_s
 | 
			
		||||
      when "charset.alias"
 | 
			
		||||
        :skip_file
 | 
			
		||||
@ -516,7 +514,7 @@ class Keg
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    link_dir("Frameworks", **options) do |relative_path|
 | 
			
		||||
    link_dir("Frameworks", verbose: verbose, dry_run: dry_run, overwrite: overwrite) do |relative_path|
 | 
			
		||||
      # Frameworks contain symlinks pointing into a subdir, so we have to use
 | 
			
		||||
      # the :link strategy. However, for Foo.framework and
 | 
			
		||||
      # Foo.framework/Versions we have to use :mkpath so that multiple formulae
 | 
			
		||||
@ -527,10 +525,11 @@ class Keg
 | 
			
		||||
        :link
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    make_relative_symlink(linked_keg_record, path, **options) unless options[:dry_run]
 | 
			
		||||
    unless dry_run
 | 
			
		||||
      make_relative_symlink(linked_keg_record, path, verbose: verbose, dry_run: dry_run, overwrite: overwrite)
 | 
			
		||||
    end
 | 
			
		||||
  rescue LinkError
 | 
			
		||||
    unlink(verbose: options[:verbose])
 | 
			
		||||
    unlink(verbose: verbose)
 | 
			
		||||
    raise
 | 
			
		||||
  else
 | 
			
		||||
    ObserverPathnameExtension.n
 | 
			
		||||
@ -558,19 +557,19 @@ class Keg
 | 
			
		||||
    tab.aliases || []
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def optlink(**options)
 | 
			
		||||
  def optlink(verbose: false, dry_run: false, overwrite: false)
 | 
			
		||||
    opt_record.delete if opt_record.symlink? || opt_record.exist?
 | 
			
		||||
    make_relative_symlink(opt_record, path, **options)
 | 
			
		||||
    make_relative_symlink(opt_record, path, verbose: verbose, dry_run: dry_run, overwrite: overwrite)
 | 
			
		||||
    aliases.each do |a|
 | 
			
		||||
      alias_opt_record = opt_record.parent/a
 | 
			
		||||
      alias_opt_record.delete if alias_opt_record.symlink? || alias_opt_record.exist?
 | 
			
		||||
      make_relative_symlink(alias_opt_record, path, **options)
 | 
			
		||||
      make_relative_symlink(alias_opt_record, path, verbose: verbose, dry_run: dry_run, overwrite: overwrite)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    return unless oldname_opt_record
 | 
			
		||||
 | 
			
		||||
    oldname_opt_record.delete
 | 
			
		||||
    make_relative_symlink(oldname_opt_record, path, **options)
 | 
			
		||||
    make_relative_symlink(oldname_opt_record, path, verbose: verbose, dry_run: dry_run, overwrite: overwrite)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def delete_pyc_files!
 | 
			
		||||
@ -580,7 +579,7 @@ class Keg
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def resolve_any_conflicts(dst, **options)
 | 
			
		||||
  def resolve_any_conflicts(dst, dry_run: false, verbose: false, overwrite: false)
 | 
			
		||||
    return unless dst.symlink?
 | 
			
		||||
 | 
			
		||||
    src = dst.resolved_path
 | 
			
		||||
@ -593,7 +592,7 @@ class Keg
 | 
			
		||||
      stat = src.lstat
 | 
			
		||||
    rescue Errno::ENOENT
 | 
			
		||||
      # dst is a broken symlink, so remove it.
 | 
			
		||||
      dst.unlink unless options[:dry_run]
 | 
			
		||||
      dst.unlink unless dry_run
 | 
			
		||||
      return
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
@ -602,23 +601,23 @@ class Keg
 | 
			
		||||
    begin
 | 
			
		||||
      keg = Keg.for(src)
 | 
			
		||||
    rescue NotAKegError
 | 
			
		||||
      puts "Won't resolve conflicts for symlink #{dst} as it doesn't resolve into the Cellar" if options[:verbose]
 | 
			
		||||
      puts "Won't resolve conflicts for symlink #{dst} as it doesn't resolve into the Cellar" if verbose
 | 
			
		||||
      return
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    dst.unlink unless options[:dry_run]
 | 
			
		||||
    keg.link_dir(src, **options) { :mkpath }
 | 
			
		||||
    dst.unlink unless dry_run
 | 
			
		||||
    keg.link_dir(src, dry_run: false, verbose: false, overwrite: false) { :mkpath }
 | 
			
		||||
    true
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def make_relative_symlink(dst, src, **options)
 | 
			
		||||
  def make_relative_symlink(dst, src, verbose: false, dry_run: false, overwrite: false)
 | 
			
		||||
    if dst.symlink? && src == dst.resolved_path
 | 
			
		||||
      puts "Skipping; link already exists: #{dst}" if options[:verbose]
 | 
			
		||||
      puts "Skipping; link already exists: #{dst}" if verbose
 | 
			
		||||
      return
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # cf. git-clean -n: list files to delete, don't really link or delete
 | 
			
		||||
    if options[:dry_run] && options[:overwrite]
 | 
			
		||||
    if dry_run && overwrite
 | 
			
		||||
      if dst.symlink?
 | 
			
		||||
        puts "#{dst} -> #{dst.resolved_path}"
 | 
			
		||||
      elsif dst.exist?
 | 
			
		||||
@ -628,12 +627,12 @@ class Keg
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # list all link targets
 | 
			
		||||
    if options[:dry_run]
 | 
			
		||||
    if dry_run
 | 
			
		||||
      puts dst
 | 
			
		||||
      return
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    dst.delete if options[:overwrite] && (dst.exist? || dst.symlink?)
 | 
			
		||||
    dst.delete if overwrite && (dst.exist? || dst.symlink?)
 | 
			
		||||
    dst.make_relative_symlink(src)
 | 
			
		||||
  rescue Errno::EEXIST => e
 | 
			
		||||
    raise ConflictError.new(self, src.relative_path_from(path), dst, e) if dst.exist?
 | 
			
		||||
@ -659,7 +658,7 @@ class Keg
 | 
			
		||||
  protected
 | 
			
		||||
 | 
			
		||||
  # symlinks the contents of path+relative_dir recursively into #{HOMEBREW_PREFIX}/relative_dir
 | 
			
		||||
  def link_dir(relative_dir, **options)
 | 
			
		||||
  def link_dir(relative_dir, verbose: false, dry_run: false, overwrite: false)
 | 
			
		||||
    root = path/relative_dir
 | 
			
		||||
    return unless root.exist?
 | 
			
		||||
 | 
			
		||||
@ -683,10 +682,10 @@ class Keg
 | 
			
		||||
        when :info
 | 
			
		||||
          next if File.basename(src) == "dir" # skip historical local 'dir' files
 | 
			
		||||
 | 
			
		||||
          make_relative_symlink dst, src, **options
 | 
			
		||||
          make_relative_symlink dst, src, verbose: verbose, dry_run: dry_run, overwrite: overwrite
 | 
			
		||||
          dst.install_info
 | 
			
		||||
        else
 | 
			
		||||
          make_relative_symlink dst, src, **options
 | 
			
		||||
          make_relative_symlink dst, src, verbose: verbose, dry_run: dry_run, overwrite: overwrite
 | 
			
		||||
        end
 | 
			
		||||
      elsif src.directory?
 | 
			
		||||
        # if the dst dir already exists, then great! walk the rest of the tree tho
 | 
			
		||||
@ -700,10 +699,10 @@ class Keg
 | 
			
		||||
        when :skip_dir
 | 
			
		||||
          Find.prune
 | 
			
		||||
        when :mkpath
 | 
			
		||||
          dst.mkpath unless resolve_any_conflicts(dst, **options)
 | 
			
		||||
          dst.mkpath unless resolve_any_conflicts(dst, verbose: verbose, dry_run: dry_run, overwrite: overwrite)
 | 
			
		||||
        else
 | 
			
		||||
          unless resolve_any_conflicts(dst, **options)
 | 
			
		||||
            make_relative_symlink dst, src, **options
 | 
			
		||||
          unless resolve_any_conflicts(dst, verbose: verbose, dry_run: dry_run, overwrite: overwrite)
 | 
			
		||||
            make_relative_symlink dst, src, verbose: verbose, dry_run: dry_run, overwrite: overwrite
 | 
			
		||||
            Find.prune
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user