Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tap: Use CLI::Parser to parse args #5292

Merged
merged 1 commit into from
Nov 11, 2018
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
50 changes: 45 additions & 5 deletions Library/Homebrew/cmd/tap.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,53 @@
#: * `tap` `--list-pinned`:
#: List all pinned taps.

require "cli_parser"

module Homebrew
module_function

def tap_args
Homebrew::CLI::Parser.new do
usage_banner <<~EOS
`tap` [<options>] <user>`/`<repo> [<URL>]

Tap a formula repository.

List all installed taps when no arguments are passed.

With <URL> unspecified, taps a formula repository from GitHub using HTTPS.
Since so many taps are hosted on GitHub, this command is a shortcut for
`brew tap` <user>`/`<repo> `https://github.com/`<user>`/homebrew-`<repo>.

With <URL> specified, taps a formula repository from anywhere, using
any transport protocol that `git` handles. The one-argument form of `tap`
simplifies but also limits. This two-argument command makes no
assumptions, so taps can be cloned from places other than GitHub and
using protocols other than HTTPS, e.g., SSH, GIT, HTTP, FTP(S), RSYNC.
EOS
switch "--full",
description: "Use a full clone when tapping a repository. By default, the repository is "\
"cloned as a shallow copy (`--depth=1`). To convert a shallow copy to a "\
"full copy, you can retap passing `--full` without first untapping."
switch "--force-auto-update",
description: "Auto-update tap even if it is not hosted on GitHub. By default, only taps "\
"hosted on GitHub are auto-updated (for performance reasons)."
switch "--repair",
description: "Migrate tapped formulae from symlink-based to directory-based structure."
switch "--list-pinned",
description: "List all pinned taps."
switch "-q", "--quieter",
description: "Suppress any warnings."
switch :debug
end
end

def tap
if ARGV.include? "--repair"
tap_args.parse

if args.repair?
Tap.each(&:link_completions_and_manpages)
elsif ARGV.include? "--list-pinned"
elsif args.list_pinned?
puts Tap.select(&:pinned?).map(&:name)
elsif ARGV.named.empty?
puts Tap.names
Expand All @@ -48,7 +88,7 @@ def tap
tap.install clone_target: ARGV.named.second,
force_auto_update: force_auto_update?,
full_clone: full_clone?,
quiet: ARGV.quieter?
quiet: args.quieter?
rescue TapRemoteMismatchError => e
odie e
rescue TapAlreadyTappedError, TapAlreadyUnshallowError # rubocop:disable Lint/HandleExceptions
Expand All @@ -57,11 +97,11 @@ def tap
end

def full_clone?
ARGV.include?("--full") || ARGV.homebrew_developer?
args.full? || ARGV.homebrew_developer?
end

def force_auto_update?
# if no relevant flag is present, return nil, meaning "no change"
true if ARGV.include?("--force-auto-update")
true if args.force_auto_update?
end
end