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/rcdn | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'bin/rcdn') diff --git a/bin/rcdn b/bin/rcdn index ebd5dea..064a541 100755 --- a/bin/rcdn +++ b/bin/rcdn @@ -36,14 +36,16 @@ handle_command_line() { local files= local excludes= local includes= + local symlink_dirs= - while getopts VqvhI:x:t:d: opt; do + 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" ;; @@ -72,6 +74,9 @@ handle_command_line() { 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" -- cgit v1.2.3