aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cmd/linkapps.rb
blob: 5cf2546251ee1405fdfc014dbcf905c0b0e6a163 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Links any Applications (.app) found in installed prefixes to /Applications
require 'keg'

module Homebrew extend self

  def linkapps
    target_dir = ARGV.include?("--local") ? File.expand_path("~/Applications") : "/Applications"

    unless File.exist? target_dir
      opoo "#{target_dir} does not exist, stopping."
      puts "Run `mkdir #{target_dir}` first."
      exit 1
    end

    HOMEBREW_CELLAR.subdirs.each do |rack|
      kegs = rack.subdirs.map { |d| Keg.new(d) }
      next if kegs.empty?

      keg = kegs.detect(&:linked?) || kegs.max {|a,b| a.version <=> b.version}

      Dir["#{keg}/*.app", "#{keg}/bin/*.app", "#{keg}/libexec/*.app"].each do |app|
        puts "Linking #{app}"
        app_name = File.basename(app)
        target = "#{target_dir}/#{app_name}"

        if File.exist?(target) && !File.symlink?(target)
          onoe "#{target} already exists, skipping."
          next
        end
        system "ln", "-sf", app, target_dir
      end
    end

    puts "Finished linking. Find the links under #{target_dir}."
  end
end