From b50e950f0ea2a5fdfc8d312d1a6eb4f4e6240fa0 Mon Sep 17 00:00:00 2001 From: Martin Afanasjew Date: Tue, 8 Dec 2015 08:40:44 +0100 Subject: [PATCH] unlinkapps: add --dry-run option Add `--dry-run` option as is customary for destructive commands. Update `bash` completion and man page accordingly. Also correct and update documentation for both `brew linkapps` and `brew unlinkapps` in more general terms. --- Library/Homebrew/cmd/unlinkapps.rb | 15 +++++++++++---- Library/Homebrew/manpages/brew.1.md | 23 ++++++++++++++--------- etc/bash_completion.d/brew | 15 ++++++++++++++- share/doc/homebrew/brew.1.html | 21 +++++++++++++-------- share/man/man1/brew.1 | 18 ++++++++++++------ 5 files changed, 64 insertions(+), 28 deletions(-) diff --git a/Library/Homebrew/cmd/unlinkapps.rb b/Library/Homebrew/cmd/unlinkapps.rb index 86a8160503..68ee9d94e6 100644 --- a/Library/Homebrew/cmd/unlinkapps.rb +++ b/Library/Homebrew/cmd/unlinkapps.rb @@ -4,13 +4,14 @@ module Homebrew def unlinkapps target_dir = linkapps_target(:local => ARGV.include?("--local")) - unlinkapps_from_dir(target_dir) + unlinkapps_from_dir(target_dir, :dry_run => ARGV.dry_run?) end private - def unlinkapps_from_dir(target_dir) + def unlinkapps_from_dir(target_dir, opts = {}) return unless target_dir.directory? + dry_run = opts.fetch(:dry_run, false) apps = Pathname.glob("#{target_dir}/*.app").select do |app| unlinkapps_unlink?(app) @@ -20,10 +21,16 @@ module Homebrew apps.each do |app| app.extend(ObserverPathnameExtension) - puts "Unlinking: #{app}" - app.unlink + if dry_run + puts "Would unlink: #{app}" + else + puts "Unlinking: #{app}" + app.unlink + end end + return if dry_run + if ObserverPathnameExtension.total.zero? puts "No apps unlinked from #{target_dir}" if ARGV.verbose? else diff --git a/Library/Homebrew/manpages/brew.1.md b/Library/Homebrew/manpages/brew.1.md index 47b0517ef3..9e3c2cd07f 100644 --- a/Library/Homebrew/manpages/brew.1.md +++ b/Library/Homebrew/manpages/brew.1.md @@ -267,14 +267,13 @@ With `--verbose` or `-v`, many commands print extra debugging information. Note If `--force` is passed, Homebrew will allow keg-only formulae to be linked. * `linkapps` [`--local`] []: - Find installed formulae that have compiled `.app`-style "application" - packages for OS X, and symlink those apps into `/Applications`, allowing - for easier access. + Find installed formulae that provide `.app`-style OS X apps and symlink them + into `/Applications`, allowing for easier access. - If no are provided, all of them will have their .apps symlinked. + If no are provided, all of them will have their apps symlinked. - If provided, `--local` will move them into the user's `~/Applications` - directory instead of the system directory. It may need to be created, first. + If provided, `--local` will symlink them into the user's `~/Applications` + directory instead of the system directory. * `ls`, `list` [`--full-name`]: List all installed formulae. If `--full-name` is passed, print formulae with @@ -451,10 +450,16 @@ With `--verbose` or `-v`, many commands print extra debugging information. Note If `--dry-run` or `-n` is passed, Homebrew will list all files which would be unlinked, but will not actually unlink or delete any files. - * `unlinkapps` [`--local`] []: - Removes links created by `brew linkapps`. + * `unlinkapps` [`--local`] [`--dry-run`] []: + Remove symlinks created by `brew linkapps` from `/Applications`. - If no are provided, all linked app will be removed. + If no are provided, all linked apps will be removed. + + If provided, `--local` will remove symlinks from the user's `~/Applications` + directory instead of the system directory. + + If `--dry-run` or `-n` is passed, Homebrew will list all symlinks which + would be removed, but will not actually delete any files. * `unpack` [`--git`|`--patch`] [`--destdir=`] : Unpack the source files for into subdirectories of the current diff --git a/etc/bash_completion.d/brew b/etc/bash_completion.d/brew index 6e3cc76c3b..4f52205bc8 100644 --- a/etc/bash_completion.d/brew +++ b/etc/bash_completion.d/brew @@ -487,6 +487,18 @@ _brew_uninstall () __brew_complete_installed } +_brew_unlinkapps () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--dry-run --local" + return + ;; + esac + __brew_complete_installed +} + _brew_unpack () { local cur="${COMP_WORDS[COMP_CWORD]}" @@ -589,7 +601,7 @@ _brew () install|instal|reinstall) _brew_install ;; irb) _brew_irb ;; link|ln) _brew_link ;; - linkapps|unlinkapps) _brew_linkapps ;; + linkapps) _brew_linkapps ;; list|ls) _brew_list ;; log) _brew_log ;; man) _brew_man ;; @@ -609,6 +621,7 @@ _brew () tap-unpin) _brew_tap_unpin ;; tests) _brew_tests ;; uninstall|remove|rm) _brew_uninstall ;; + unlinkapps) _brew_unlinkapps ;; unpack) _brew_unpack ;; unpin) __brew_complete_formulae ;; untap|tap-info|tap-pin) __brew_complete_tapped ;; diff --git a/share/doc/homebrew/brew.1.html b/share/doc/homebrew/brew.1.html index 37519d67e5..ed21c8ffb2 100644 --- a/share/doc/homebrew/brew.1.html +++ b/share/doc/homebrew/brew.1.html @@ -214,14 +214,13 @@ be linked or which would be deleted by brew link --overwrite, but w actually link or delete any files.

If --force is passed, Homebrew will allow keg-only formulae to be linked.

-
linkapps [--local] [formulae]

Find installed formulae that have compiled .app-style "application" -packages for OS X, and symlink those apps into /Applications, allowing -for easier access.

+
linkapps [--local] [formulae]

Find installed formulae that provide .app-style OS X apps and symlink them +into /Applications, allowing for easier access.

-

If no formulae are provided, all of them will have their .apps symlinked.

+

If no formulae are provided, all of them will have their apps symlinked.

-

If provided, --local will move them into the user's ~/Applications -directory instead of the system directory. It may need to be created, first.

+

If provided, --local will symlink them into the user's ~/Applications +directory instead of the system directory.

ls, list [--full-name]

List all installed formulae. If --full-name is passed, print formulae with full-qualified names.

ls, list --unbrewed

List all files in the Homebrew prefix not installed by Homebrew.

@@ -341,9 +340,15 @@ for temporarily disabling a formula:

If --dry-run or -n is passed, Homebrew will list all files which would be unlinked, but will not actually unlink or delete any files.

-
unlinkapps [--local] [formulae]

Removes links created by brew linkapps.

+
unlinkapps [--local] [--dry-run] [formulae]

Remove symlinks created by brew linkapps from /Applications.

-

If no formulae are provided, all linked app will be removed.

+

If no formulae are provided, all linked apps will be removed.

+ +

If provided, --local will remove symlinks from the user's ~/Applications +directory instead of the system directory.

+ +

If --dry-run or -n is passed, Homebrew will list all symlinks which +would be removed, but will not actually delete any files.

unpack [--git|--patch] [--destdir=path] formulae

Unpack the source files for formulae into subdirectories of the current working directory. If --destdir=path is given, the subdirectories will be created in the directory named by <path> instead.

diff --git a/share/man/man1/brew.1 b/share/man/man1/brew.1 index c9adf6bea4..386fc39d19 100644 --- a/share/man/man1/brew.1 +++ b/share/man/man1/brew.1 @@ -286,13 +286,13 @@ If \fB\-\-force\fR is passed, Homebrew will allow keg\-only formulae to be linke . .TP \fBlinkapps\fR [\fB\-\-local\fR] [\fIformulae\fR] -Find installed formulae that have compiled \fB\.app\fR\-style "application" packages for OS X, and symlink those apps into \fB/Applications\fR, allowing for easier access\. +Find installed formulae that provide \fB\.app\fR\-style OS X apps and symlink them into \fB/Applications\fR, allowing for easier access\. . .IP -If no \fIformulae\fR are provided, all of them will have their \.apps symlinked\. +If no \fIformulae\fR are provided, all of them will have their apps symlinked\. . .IP -If provided, \fB\-\-local\fR will move them into the user\'s \fB~/Applications\fR directory instead of the system directory\. It may need to be created, first\. +If provided, \fB\-\-local\fR will symlink them into the user\'s \fB~/Applications\fR directory instead of the system directory\. . .TP \fBls\fR, \fBlist\fR [\fB\-\-full\-name\fR] @@ -476,11 +476,17 @@ Remove symlinks for \fIformula\fR from the Homebrew prefix\. This can be useful If \fB\-\-dry\-run\fR or \fB\-n\fR is passed, Homebrew will list all files which would be unlinked, but will not actually unlink or delete any files\. . .TP -\fBunlinkapps\fR [\fB\-\-local\fR] [\fIformulae\fR] -Removes links created by \fBbrew linkapps\fR\. +\fBunlinkapps\fR [\fB\-\-local\fR] [\fB\-\-dry\-run\fR] [\fIformulae\fR] +Remove symlinks created by \fBbrew linkapps\fR from \fB/Applications\fR\. . .IP -If no \fIformulae\fR are provided, all linked app will be removed\. +If no \fIformulae\fR are provided, all linked apps will be removed\. +. +.IP +If provided, \fB\-\-local\fR will remove symlinks from the user\'s \fB~/Applications\fR directory instead of the system directory\. +. +.IP +If \fB\-\-dry\-run\fR or \fB\-n\fR is passed, Homebrew will list all symlinks which would be removed, but will not actually delete any files\. . .TP \fBunpack\fR [\fB\-\-git\fR|\fB\-\-patch\fR] [\fB\-\-destdir=\fR\fIpath\fR] \fIformulae\fR