#!/bin/sh : ${RCM_LIB:=$(dirname "$0")/../share/rcm} . "$RCM_LIB/rcm.sh" remove_link() { local dest="$1" local original="$2" local sigil="$3" if [ "x$dest" = "x/" ]; then $VERBOSE "not a symlink, skipping: $original" elif [ -L "$dest" -o "x$sigil" = "xX" ]; then $RM -rf "$dest" rmdir -p "$(dirname "$original")" 2>/dev/null else remove_link "$(dirname "$dest")" "$original" fi } show_help() { local exit_code=${1:-0} $PRINT "Usage: rcdn [-Vqvh] [-I EXCL_PAT] [-x EXCL_PAT] [-t TAG] [-d DOT_DIR]" $PRINT "see rcdn(1) and rcm(5) for more details" exit $exit_code } handle_command_line() { local arg_tags= local verbosity=0 local version=0 local run_hooks=0 local dotfiles_dirs= local files= local excludes= local includes= local symlink_dirs= while getopts VqvhI:x:S:t:d: opt; do case "$opt" in h) show_help ;; I) includes="$includes $OPTARG";; k) run_hooks=1 ;; K) run_hooks=0 ;; t) arg_tags="$arg_tags $OPTARG" ;; S) symlink_dirs="$symlink_dirs $OPTARG";; v) verbosity=$(($verbosity + 1));; q) verbosity=$(($verbosity - 1));; d) dotfiles_dirs="$dotfiles_dirs $OPTARG" ;; V) version=1 ;; x) excludes="$excludes $OPTARG" ;; esac done shift $(($OPTIND-1)) handle_common_flags rcup $version $verbosity tags="${arg_tags:-$TAGS}" dotfiles_dirs="${dotfiles_dirs:-$DOTFILES_DIRS}" files="$@" RUN_HOOKS=$run_hooks for tag in $tags; do LS_ARGS="$LS_ARGS -t $tag" done for dotfiles_dir in $dotfiles_dirs; do LS_ARGS="$LS_ARGS -d $dotfiles_dir" done for exclude in $excludes; do LS_ARGS="$LS_ARGS -x $exclude" done for include in $includes; do LS_ARGS="$LS_ARGS -I $include" done for symlink_dir in $symlink_dirs; do LS_ARGS="$LS_ARGS -S $symlink_dir" done LS_ARGS="$LS_ARGS $files" $DEBUG "LS_ARGS: $LS_ARGS" } LS_ARGS=-F handle_command_line "$@" : ${DOTFILES_DIRS:=$DOTFILES_DIRS $DEFAULT_DOTFILES_DIR} run_hooks pre down for dest_and_src in $(lsrc $LS_ARGS); do saved_ifs=$IFS IFS=: set $dest_and_src IFS=$saved_ifs dest="$1" sigil="$3" remove_link "$dest" "$dest" "$sigil" done run_hooks post down