summaryrefslogtreecommitdiff
path: root/bin/mkrc
diff options
context:
space:
mode:
authorGravatar Pablo Olmos de Aguilera Corradini and Mike Burns <pablo@glatelier.org>2013-10-27 17:16:30 -0300
committerGravatar Mike Burns <mike@mike-burns.com>2014-02-18 16:57:01 +0100
commit3700be9ce6802653df30c413179d93316bf0b291 (patch)
tree5e78da946c28e12b4a5fb760779d8e8689c02540 /bin/mkrc
parent83c4875e23bb7595689ddd228a9825264b15f318 (diff)
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.
Diffstat (limited to 'bin/mkrc')
-rwxr-xr-xbin/mkrc14
1 files changed, 12 insertions, 2 deletions
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..."