#!@SHELL@ : ${RCM_LIB:=$(dirname "$0")/../share/rcm} . "$RCM_LIB/rcm.sh" remove_link() { local dest="$1" local original="$2" local sigil="$3" $DEBUG "remove_link $1 $2 $3" if [ "x$dest" = "x/" -o "x$dest" = "x$DEST_DIR" ]; then $VERBOSE "not a symlink, skipping: $original" elif [ -L "$dest" -o "x$sigil" = "xX" ]; then rm_v -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 [-hqVv] [-B HOSTNAME] [-d DOT_DIR] [-I EXCL_PAT] [-S EXCL_PAT] [-s EXCL_PAT] [-t TAG] [-U EXCL_PAT] [-u EXCL_PAT] [-x EXCL_PAT]" $PRINT "see rcdn(1) and rcm(7) for more details" exit $exit_code } handle_command_line() { local arg_tags= local verbosity=0 local version=0 local run_hooks=1 local dotfiles_dirs= local files= local excludes= local includes= local symlink_dirs= local never_symlink_dirs= local undotted= local never_undotted= local hostname= while getopts :VqvhIKk:x:S:s:U:u:t:d:B: opt; do case "$opt" in h) show_help ;; B) hostname="$OPTARG" ;; I) includes="$includes $OPTARG";; k) run_hooks=1 ;; K) run_hooks=0 ;; t) arg_tags="$arg_tags $OPTARG" ;; S) symlink_dirs="$symlink_dirs $OPTARG";; s) never_symlink_dirs="$never_symlink_dirs $OPTARG";; U) undotted="$undotted $OPTARG";; u) never_undotted="$never_undotted $OPTARG";; v) verbosity=$(($verbosity + 1));; q) verbosity=$(($verbosity - 1));; d) dotfiles_dirs="$dotfiles_dirs $OPTARG" ;; V) version=1 ;; x) excludes="$excludes $OPTARG" ;; ?) show_help 64 ;; esac done shift $(($OPTIND-1)) handle_common_flags rcup $version $verbosity hostname="$(determine_hostname "$hostname")" 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 for never_symlink_dir in $symlink_dirs; do LS_ARGS="$LS_ARGS -s $never_symlink_dir" done for undot in $undotted; do LS_ARGS="$LS_ARGS -U $undot" done for never_undot in $never_undotted; do LS_ARGS="$LS_ARGS -u $never_undot" done LS_ARGS="$LS_ARGS -B $hostname $files" $DEBUG "LS_ARGS: $LS_ARGS" } LS_ARGS=-F handle_command_line "$@" : ${DOTFILES_DIRS:=$DOTFILES_DIRS $DEFAULT_DOTFILES_DIR} run_hooks pre down dests_and_srcs="$(lsrc $LS_ARGS)" saved_ifs="$IFS" IFS=' ' for dest_and_src in $dests_and_srcs; do IFS=: set -- $dest_and_src IFS="$saved_ifs" dest="$1" sigil="$3" remove_link "$dest" "$dest" "$sigil" done IFS="$saved_ifs" run_hooks post down