diff options
| -rw-r--r-- | Library/Homebrew/formula_installer.rb | 22 | ||||
| -rw-r--r-- | completions/bash/brew | 168 | 
2 files changed, 179 insertions, 11 deletions
| diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index a0b67f04d..48109310e 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -553,18 +553,18 @@ class FormulaInstaller      end      fi = FormulaInstaller.new(df) -    fi.options           |= tab.used_options -    fi.options           |= Tab.remap_deprecated_options(df.deprecated_options, dep.options) -    fi.options           |= inherited_options -    fi.options           &= df.options -    fi.build_from_source  = ARGV.build_formula_from_source?(df) -    fi.force_bottle       = false -    fi.verbose            = verbose? -    fi.quieter            = quieter? -    fi.debug              = debug? -    fi.link_keg           = keg_was_linked if keg_had_linked_keg +    fi.options                |= tab.used_options +    fi.options                |= Tab.remap_deprecated_options(df.deprecated_options, dep.options) +    fi.options                |= inherited_options +    fi.options                &= df.options +    fi.build_from_source       = ARGV.build_formula_from_source?(df) +    fi.force_bottle            = false +    fi.verbose                 = verbose? +    fi.quieter                 = quieter? +    fi.debug                   = debug? +    fi.link_keg                = keg_was_linked if keg_had_linked_keg      fi.installed_as_dependency = true -    fi.installed_on_request = false +    fi.installed_on_request    = df.any_version_installed? && tab.installed_on_request      fi.prelude      oh1 "Installing #{formula.full_name} dependency: #{Formatter.identifier(dep.name)}"      fi.install diff --git a/completions/bash/brew b/completions/bash/brew index 26adef37d..3bde8f926 100644 --- a/completions/bash/brew +++ b/completions/bash/brew @@ -545,6 +545,173 @@ _brew_uses() {    __brew_complete_formulae  } +__brew_caskcomp_words_include () +{ +    local i=1 +    while [[ $i -lt $COMP_CWORD ]]; do +        if [[ "${COMP_WORDS[i]}" = "$1" ]]; then +            return 0 +        fi +        i=$((++i)) +    done +    return 1 +} + +# Find the previous non-switch word +__brew_caskcomp_prev () +{ +    local idx=$((COMP_CWORD - 1)) +    local prv="${COMP_WORDS[idx]}" +    while [[ $prv == -* ]]; do +        idx=$((--idx)) +        prv="${COMP_WORDS[idx]}" +    done +    echo "$prv" +} + +__brew_caskcomp () +{ +    # break $1 on space, tab, and newline characters, +    # and turn it into a newline separated list of words +    local list s sep=$'\n' IFS=$' '$'\t'$'\n' +    local cur="${COMP_WORDS[COMP_CWORD]}" + +    for s in $1; do +        __brew_caskcomp_words_include "$s" && continue +        list="$list$s$sep" +    done + +    IFS=$sep +    COMPREPLY=($(compgen -W "$list" -- "$cur")) +} + +# Don't use __brew_caskcomp() in any of the __brew_cask_complete_foo functions, as +# it is too slow and is not worth it just for duplicate elimination. +__brew_cask_complete_formulae () +{ +    local cur="${COMP_WORDS[COMP_CWORD]}" +    local lib=$(brew --repository)/Library +    local taps=${lib}/Taps +    local casks=${lib}/Taps/caskroom/homebrew-cask/Casks +    local ff=$(\ls ${casks} 2>/dev/null | sed 's/\.rb//g') + +    COMPREPLY=($(compgen -W "$ff" -- "$cur")) +} + +__brew_cask_complete_installed () +{ +    local cur="${COMP_WORDS[COMP_CWORD]}" +    local inst=$(brew cask list -1) +    COMPREPLY=($(compgen -W "$inst" -- "$cur")) +} + +__brew_cask_complete_caskroom () +{ +    local cur="${COMP_WORDS[COMP_CWORD]}" +    local caskroom_dir=/opt/homebrew-cask/Caskroom/ +    local files=$(\ls ${caskroom_dir} 2>/dev/null) +    COMPREPLY=($(compgen -W "$files" -- "$cur")) +} + +_brew_cask_cleanup () +{ +    local cur="${COMP_WORDS[COMP_CWORD]}" +    case "$cur" in +    -*) +        __brew_caskcomp "--force" +        return +        ;; +    esac +    __brew_cask_complete_installed +} + +_brew_cask_fetch () +{ +    local cur="${COMP_WORDS[COMP_CWORD]}" +    local prv=$(__brew_caskcomp_prev) +    case "$cur" in +    -*) +        __brew_caskcomp "--force" +        return +        ;; +    esac +    __brew_cask_complete_formulae +} + +_brew_cask_list () +{ +    local cur="${COMP_WORDS[COMP_CWORD]}" + +    case "$cur" in +    -*) +        __brew_caskcomp "-1 -l --versions" +        return +        ;; +    esac + +    __brew_cask_complete_installed +} + +_brew_cask_uninstall () +{ +    local cur="${COMP_WORDS[COMP_CWORD]}" +    case "$cur" in +    -*) +        __brew_caskcomp "--force" +        return +        ;; +    esac +    __brew_cask_complete_installed +} + +_brew_cask () +{ +    local i=1 cmd + +    # find the subcommand +    while [[ $i -lt $COMP_CWORD ]]; do +        local s="${COMP_WORDS[i]}" +        case "$s" in +        --*) +            cmd="$s" +            break +            ;; +        -*) +            ;; +        cask) +            ;; +        *) +            cmd="$s" +            break +            ;; +        esac +        i=$((++i)) +    done + +    if [[ $i -eq $COMP_CWORD ]]; then +        __brew_caskcomp "abv audit cat cleanup create doctor edit fetch home info install list ls remove rm search uninstall zap -S --force --caskroom --verbose --appdir --colorpickerdir --prefpanedir --qlplugindir --fontdir --servicedir --input_methoddir --internet_plugindir --screen_saverdir --no-binaries --binarydir --debug" +        return +    fi + +    # subcommands have their own completion functions +    case "$cmd" in +      audit)                  __brew_cask_complete_formulae ;; +      cat)                    __brew_cask_complete_formulae ;; +      cleanup)                _brew_cask_cleanup ;; +      doctor)                 ;; +      edit)                   __brew_cask_complete_formulae ;; +      fetch)                  _brew_cask_fetch ;; +      home)                   __brew_cask_complete_formulae ;; +      info|abv)               __brew_cask_complete_formulae ;; +      install|instal)         __brew_cask_complete_formulae ;; +      list|ls)                _brew_cask_list ;; +      search)                 ;; +      uninstall|remove|rm)    _brew_cask_uninstall ;; +      zap)                    __brew_cask_complete_caskroom ;; +      *)                      ;; +    esac +} +  _brew() {    local i=1 cmd @@ -584,6 +751,7 @@ _brew() {      analytics)                  _brew_analytics ;;      audit)                      __brew_complete_formulae ;;      bottle)                     _brew_bottle ;; +    cask)                       _brew_cask ;;      cat)                        __brew_complete_formulae ;;      cleanup)                    _brew_cleanup ;;      create)                     _brew_create ;; | 
