#!/usr/bin/env zsh # Description: # Remove repositories which are no longer managed local repo filter local is_force="" is_select=false local -a repos remove_repos local -A tags local -i ret=0 while (( $# > 0 )) do arg="$1" case "$arg" in --force) is_force=true ;; --select) is_select=true ;; -*|--*) __zplug::core::options::unknown "$arg" return $status ;; "") # Invalid return 1 ;; */*) repos+=( "${arg:gs:@::}" ) ;; *) return 1 ;; esac shift done if $is_select; then __zplug::utils::shell::search_commands \ "$ZPLUG_FILTER" \ | read filter if [[ -z $filter ]]; then __zplug::io::print::f \ --die \ --zplug \ --error \ --func \ "There is no available filter in ZPLUG_FILTER\n" return 1 fi repos=( ${(@f)"$(echo "${(Fk)zplugs[@]}" | eval "$filter")"} ) # Cace of type Ctrl-C if (( $#repos == 0 )); then return 0 fi fi if (( $#repos == 0 )); then # If no argument is given: # search the repositories that have not been already managed by zplug repos=( "$ZPLUG_REPOS"/*/*(N-/) ) for repo in "${repos[@]}" do if ! __zplug::base::base::zpluged "${repo:h:t}/${repo:t}"; then remove_repos+=("$repo") fi done else # If the arguments are given or selected by the filter for repo in "${repos[@]}" do tags[dir]="$( __zplug::core::core::run_interfaces \ 'dir' \ "$repo" \ 2> >(__zplug::log::capture::error) )" if [[ -d $tags[dir] ]]; then case "$tags[from]" in "oh-my-zsh") remove_repos+=( "${tags[dir]:F[2]h}" ) ;; *) remove_repos+=( "$tags[dir]" ) ;; esac else __zplug::io::print::f \ --die \ --zplug \ --func \ "$repo: no such package\n" ret=1 fi done fi # Remove packages from $ZPLUG_REPOS for repo in "${remove_repos[@]}" do __zplug::io::print::put \ "${${is_force:+"Removed"}:-"Remove? (y/N)"} ${(qq)repo} " if ${(z)is_force:-"read -q"}; then # Remove directories rm -rf "$repo" rmdir "${repo:h}" # Clear cache __zplug::core::core::run_interfaces 'clear' fi \ 2> >(__zplug::log::capture::error) >/dev/null __zplug::io::print::put "\n" done # Remove packages from $zplugs repos=( $(__zplug::core::core::run_interfaces 'check' '--debug') ) for repo in "${repos[@]}" do unset "zplugs[$repo]" done # Remove broken symlinks __zplug::utils::shell::remove_deadlinks "$ZPLUG_HOME/bin"/*(@N) return $ret