diff options
| author | Mike McQuaid | 2017-02-27 08:42:17 +0000 |
|---|---|---|
| committer | GitHub | 2017-02-27 08:42:17 +0000 |
| commit | 0a8c8f90b68b9b2dddcf7284c9c1f941aebb1277 (patch) | |
| tree | 126f61113b502b7e39e75d1d9c7f9c33f48af793 /Library/Homebrew/utils | |
| parent | ef85460c52ddea6234bf7964ae5a2e4bd4f11bce (diff) | |
| parent | 25396d9c4d7a7a111eebf02f0ebdbb0e69aad3b0 (diff) | |
| download | brew-0a8c8f90b68b9b2dddcf7284c9c1f941aebb1277.tar.bz2 | |
Merge pull request #1708 from joshka/feature/install-tap-cmd-completions
install tap cmd completions
Diffstat (limited to 'Library/Homebrew/utils')
| -rw-r--r-- | Library/Homebrew/utils/link.rb | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/Library/Homebrew/utils/link.rb b/Library/Homebrew/utils/link.rb new file mode 100644 index 000000000..095dba209 --- /dev/null +++ b/Library/Homebrew/utils/link.rb @@ -0,0 +1,70 @@ +module Utils + module Link + module_function + + def link_src_dst_dirs(src_dir, dst_dir, command, link_dir: false) + return unless src_dir.exist? + conflicts = [] + src_paths = link_dir ? [src_dir] : src_dir.find + src_paths.each do |src| + next if src.directory? && !link_dir + dst = dst_dir/src.relative_path_from(src_dir) + if dst.symlink? + next if src == dst.resolved_path + dst.unlink + end + if dst.exist? + conflicts << dst + next + end + dst_dir.parent.mkpath + dst.make_relative_symlink(src) + end + + return if conflicts.empty? + onoe <<-EOS.undent + Could not link: + #{conflicts.join("\n")} + + Please delete these paths and run `#{command}`. + EOS + end + private_class_method :link_src_dst_dirs + + def unlink_src_dst_dirs(src_dir, dst_dir, unlink_dir: false) + return unless src_dir.exist? + src_paths = unlink_dir ? [src_dir] : src_dir.find + src_paths.each do |src| + next if src.directory? && !unlink_dir + dst = dst_dir/src.relative_path_from(src_dir) + dst.delete if dst.symlink? && src == dst.resolved_path + dst.parent.rmdir_if_possible + end + end + private_class_method :unlink_src_dst_dirs + + def link_manpages(path, command) + link_src_dst_dirs(path/"manpages", HOMEBREW_PREFIX/"share/man/man1", command) + end + + def unlink_manpages(path) + unlink_src_dst_dirs(path/"manpages", HOMEBREW_PREFIX/"share/man/man1") + end + + def link_completions(path, command) + link_src_dst_dirs(path/"completions/bash", HOMEBREW_PREFIX/"etc/bash_completion.d", command) + link_src_dst_dirs(path/"completions/zsh", HOMEBREW_PREFIX/"share/zsh/site-functions", command) + link_src_dst_dirs(path/"completions/fish", HOMEBREW_PREFIX/"share/fish/vendor_completions.d", command) + end + + def unlink_completions(path) + unlink_src_dst_dirs(path/"completions/bash", HOMEBREW_PREFIX/"etc/bash_completion.d") + unlink_src_dst_dirs(path/"completions/zsh", HOMEBREW_PREFIX/"share/zsh/site-functions") + unlink_src_dst_dirs(path/"completions/fish", HOMEBREW_PREFIX/"share/fish/vendor_completions.d") + end + + def link_docs(path, command) + link_src_dst_dirs(path/"docs", HOMEBREW_PREFIX/"share/doc/homebrew", command, link_dir: true) + end + end +end |
