From 3700be9ce6802653df30c413179d93316bf0b291 Mon Sep 17 00:00:00 2001 From: Pablo Olmos de Aguilera Corradini and Mike Burns Date: Sun, 27 Oct 2013 17:16:30 -0300 Subject: Force some directories to be symlinks Typically a directory structure is copied instead of symlinked, while files are symlinked. However, some cases require symlinked dirs: git submodules, vim plugins, and so on. This introduces a `SYMLINK_DIRS` option for rcrc(5) that takes a space-separated list of "exclude patterns". Any directory matching these patterns is symlinked. This also introduces a `-S` argument for lsrc(1), rcup(1), and rcdn(1). This argument takes a pattern, for one-off directory symlinking. It can be repeated. This also introduces `-S` and `-s` for mkrc(1). `-S` will re-install the files as symlinks, and `-s` will not. This does work with `-C`, though perhaps unintuitively - we don't know what the user means in this case. However, it will not crash. Bug: `-s` does not work right if `SYMLINK_DIRS` is set. Bug #36 addresses this. --- bin/mkrc | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'bin/mkrc') diff --git a/bin/mkrc b/bin/mkrc index c78d10b..f44cadb 100755 --- a/bin/mkrc +++ b/bin/mkrc @@ -40,8 +40,9 @@ verbosity=0 in_host=0 version=0 always_copy=0 +force_symlink=0 -while getopts ChVvqot:d: opt; do +while getopts ChSsVvqot:d: opt; do case "$opt" in C) always_copy=1 ;; h) show_help ;; @@ -51,6 +52,8 @@ while getopts ChVvqot:d: opt; do o) in_host=1 ;; d) DOTFILES_DIR=$OPTARG ;; V) version=1 ;; + S) force_symlink=1 ;; + s) force_symlink=0 ;; esac done shift $(($OPTIND-1)) @@ -67,8 +70,15 @@ fi files=$@ +if [ $force_symlink -eq 1 ]; then + for file in $files; do + dedotted=`de_dot $file` + INSTALL="$INSTALL -S $dedotted" + done +fi + for file in $files; do - dotless=`echo $file | sed -e "s|$DEST_DIR/||" | sed -e 's/^\.//'` + dotless=`de_dot $file` dest=`destination $DOTFILES_DIR $dotless $in_host $tag` mkdir -p $dest/`dirname $dotless` $PRINT "Moving..." -- cgit v1.2.3