diff --git a/Library/Homebrew/cmd/tap.rb b/Library/Homebrew/cmd/tap.rb index 91f873e679..addde2b4af 100644 --- a/Library/Homebrew/cmd/tap.rb +++ b/Library/Homebrew/cmd/tap.rb @@ -25,8 +25,10 @@ module Homebrew using protocols other than HTTPS, e.g. SSH, git, HTTP, FTP(S), rsync. EOS switch "--full", - description: "Convert a shallow clone to a full clone without untapping. By default, taps are no "\ - "longer cloned as shallow clones." + description: "Convert a shallow clone to a full clone without untapping. Taps are only cloned as "\ + "shallow clones on continuous integration, or if `--shallow` was originally passed." + switch "--shallow", + description: "Fetch tap as a shallow clone rather than a full clone. Useful for continuous integration." 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)." @@ -51,11 +53,20 @@ module Homebrew elsif args.no_named? puts Tap.names else + full_clone = if args.full? + true + elsif !args.shallow? + ENV["CI"].blank? + else + !args.shallow? + end + odebug "Tapping as #{full_clone ? "full" : "shallow"} clone" tap = Tap.fetch(args.named.first) begin tap.install clone_target: args.named.second, force_auto_update: force_auto_update?, - quiet: args.quiet? + quiet: args.quiet?, + full_clone: full_clone rescue TapRemoteMismatchError => e odie e rescue TapAlreadyTappedError diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index 8721bbe0e7..9894b4b47b 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -243,7 +243,7 @@ class Tap if installed? raise TapRemoteMismatchError.new(name, @remote, requested_remote) if clone_target && requested_remote != remote - raise TapAlreadyTappedError, name if force_auto_update.nil? + raise TapAlreadyTappedError, name if force_auto_update.nil? && !shallow? end # ensure git is installed diff --git a/docs/Manpage.md b/docs/Manpage.md index cb084c827a..9ec3a9f0ed 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -501,7 +501,9 @@ taps can be cloned from places other than GitHub and using protocols other than HTTPS, e.g. SSH, git, HTTP, FTP(S), rsync. * `--full`: - Convert a shallow clone to a full clone without untapping. By default, taps are no longer cloned as shallow clones. + Convert a shallow clone to a full clone without untapping. Taps are only cloned as shallow clones on continuous integration, or if `--shallow` was originally passed. +* `--shallow`: + Fetch tap as a shallow clone rather than a full clone. Useful for continuous integration. * `--force-auto-update`: Auto-update tap even if it is not hosted on GitHub. By default, only taps hosted on GitHub are auto-updated (for performance reasons). * `--repair`: diff --git a/manpages/brew.1 b/manpages/brew.1 index 366176d59c..49c9bf8809 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -635,7 +635,11 @@ With \fIURL\fR specified, tap a formula repository from anywhere, using any tran . .TP \fB\-\-full\fR -Convert a shallow clone to a full clone without untapping\. By default, taps are no longer cloned as shallow clones\. +Convert a shallow clone to a full clone without untapping\. Taps are only cloned as shallow clones on continuous integration, or if \fB\-\-shallow\fR was originally passed\. +. +.TP +\fB\-\-shallow\fR +Fetch tap as a shallow clone rather than a full clone\. Useful for continuous integration\. . .TP \fB\-\-force\-auto\-update\fR