diff options
Diffstat (limited to 'plugins/pip')
| -rw-r--r-- | plugins/pip/_pip | 15 | ||||
| -rw-r--r-- | plugins/pip/pip.plugin.zsh | 78 | 
2 files changed, 90 insertions, 3 deletions
| diff --git a/plugins/pip/_pip b/plugins/pip/_pip index df53ba5ce..7c1238db7 100644 --- a/plugins/pip/_pip +++ b/plugins/pip/_pip @@ -6,8 +6,8 @@  _pip_all() {    # we cache the list of packages (originally from the macports plugin)    if (( ! $+piplist )); then -    echo -n " (caching package index...)" -	piplist=($(pip search * | cut -d ' ' -f 1 | tr '[A-Z]' '[a-z]')) +      zsh-pip-cache-packages +      piplist=($(cat $ZSH_PIP_CACHE_FILE))    fi  } @@ -20,6 +20,7 @@ _1st_arguments=(    'bundle:create pybundles (archives containing multiple packages)'    'freeze:output all currently installed packages (exact versions) to stdout'    'help:show available commands' +  'show:show information about installed packages'    'install:install packages'    'search:search PyPI'    'uninstall:uninstall packages' @@ -62,8 +63,13 @@ case "$words[1]" in        '(--no-install)--no-install[only download packages]' \        '(--no-download)--no-download[only install downloaded packages]' \        '(--install-option)--install-option[extra arguments to be supplied to the setup.py]' \ +      '(--single-version-externally-managed)--single-version-externally-managed[do not download/install dependencies. requires --record or --root]'\ +      '(--root)--root[treat this path as a fake chroot, installing into it. implies --single-version-externally-managed]'\ +      '(--record)--record[file to record all installed files to.]'\ +      '(-r --requirement)'{-r,--requirement}'[requirements file]: :_files'\ +      '(-e --editable)'{-e,--editable}'[path of or url to source to link to instead of installing.]: :_files -/'\        '1: :->packages' &&  return 0 -      +        if [[ "$state" == packages ]]; then          _pip_all          _wanted piplist expl 'packages' compadd -a piplist @@ -71,4 +77,7 @@ case "$words[1]" in    uninstall)      _pip_installed      _wanted installed_pkgs expl 'installed packages' compadd -a installed_pkgs ;; +  show) +    _pip_installed +    _wanted installed_pkgs expl 'installed packages' compadd -a installed_pkgs ;;  esac diff --git a/plugins/pip/pip.plugin.zsh b/plugins/pip/pip.plugin.zsh new file mode 100644 index 000000000..b5433ae9d --- /dev/null +++ b/plugins/pip/pip.plugin.zsh @@ -0,0 +1,78 @@ +# Usage: +# Just add pip to your installed plugins. + +# If you would like to change the cheeseshops used for autocomplete set +# ZSH_PIP_INDEXES in your zshrc. If one of your indexes are bogus you won't get +# any kind of error message, pip will just not autocomplete from them. Double +# check! +# +# If you would like to clear your cache, go ahead and do a +# "zsh-pip-clear-cache". + +ZSH_PIP_CACHE_FILE=~/.pip/zsh-cache +ZSH_PIP_INDEXES=(https://pypi.python.org/simple/) + +zsh-pip-clear-cache() { +  rm $ZSH_PIP_CACHE_FILE +  unset piplist +} + +zsh-pip-clean-packages() { +    sed -n '/<a href/ s/.*>\([^<]\{1,\}\).*/\1/p' +} + +zsh-pip-cache-packages() { +  if [[ ! -d ${ZSH_PIP_CACHE_FILE:h} ]]; then +      mkdir -p ${ZSH_PIP_CACHE_FILE:h} +  fi + +  if [[ ! -f $ZSH_PIP_CACHE_FILE ]]; then +      echo -n "(...caching package index...)" +      tmp_cache=/tmp/zsh_tmp_cache +      for index in $ZSH_PIP_INDEXES ; do +          # well... I've already got two problems +          curl $index 2>/dev/null | \ +              zsh-pip-clean-packages \ +               >> $tmp_cache +      done +      sort $tmp_cache | uniq | tr '\n' ' ' > $ZSH_PIP_CACHE_FILE +      rm $tmp_cache +  fi +} + +# A test function that validates the regex against known forms of the simple +# index. If you modify the regex to make it work for you, you should add a test +# case in here and make sure that your changes don't break things for someone +# else. +zsh-pip-test-clean-packages() { +    local expected +    local actual +    expected="0x10c-asm +1009558_nester" + +    actual=$(echo -n "<html><head><title>Simple Index</title><meta name=\"api-version\" value=\"2\" /></head><body> +<a href='0x10c-asm'>0x10c-asm</a><br/> +<a href='1009558_nester'>1009558_nester</a><br/> +</body></html>" | zsh-pip-clean-packages) + +    if [[ $actual != $expected ]] ; then +        echo -e "python's simple index is broken:\n$actual\n  !=\n$expected" +    else +        echo "python's simple index is fine" +    fi + +    actual=$(echo -n '<html> +  <head> +    <title>Simple Package Index</title> +  </head> +  <body> +    <a href="0x10c-asm">0x10c-asm</a><br/> +    <a href="1009558_nester">1009558_nester</a><br/> +</body></html>' | zsh-pip-clean-packages) + +    if [[ $actual != $expected ]] ; then +        echo -e "the djangopypi2 index is broken:\n$actual\n  !=\n$expected" +    else +        echo "the djangopypi2 index is fine" +    fi +} | 
