From c5abbade34fa1a74e373f34d1a78883daa74a8f6 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 16 Dec 2015 18:25:16 +0000 Subject: [PATCH] Cope with directories --- infra/makelinks | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/infra/makelinks b/infra/makelinks index 0fd38dc..ac907f7 100755 --- a/infra/makelinks +++ b/infra/makelinks @@ -9,7 +9,7 @@ set -e -o posix -o pipefail badusage () { - echo >&2 "usage: $0 [-n|-v] list|setup|import|clean" + echo >&2 "usage: $0 [-n|-v] list|setup|dirimport|dirmove|clean" exit 18 } @@ -27,13 +27,13 @@ while true; do done case "$#.$1" in -1.list|1.setup|1.import|1.clean) ;; +1.list|1.setup|1.import|1.dirimport|1.clean) ;; *) badusage ;; esac mode=$1; shift -dots=$( find dot -type f -name '[0-9a-zA-Z]*[0-9a-zA-Z]' ) +dots=$( find dot -maxdepth 1 -name '[0-9a-zA-Z]*[0-9a-zA-Z]' ) basepath=$(pwd) basepath=${basepath#$HOME/} @@ -84,22 +84,33 @@ for dot in $dots; do elif ! [ -e "$inhome" ]; then needs setup "absent here" $act ln -s "$basepath/$dot" "$inhome" - elif [ -f "$inhome" ] && cmp -s "$dot" "$inhome"; then - needs setup "identical here but not yet symlinked" - $act rm -f "$inhome"~ + elif [ -f "$inhome" ] && [ -f "$dot" ]; then + if cmp -s "$dot" "$inhome"; then + needs setup "identical here but not yet symlinked" + $act rm -f "$inhome"~ + $act ln -s "$basepath/$dot" "$inhome"~ + $act mv -f "$inhome"~ "$inhome" + else + needs import "modified here" + $act rm -f "$dot"~ + $act cp "$inhome" "$dot"~ + $act mv -f "$dot"~ "$dot" + fi + elif [ -d "$inhome" ] && [ -d "$dot" ]; then + needs dirimport "directory here not yet symlinked" + $act mv "$dot" "$dot~" $act ln -s "$basepath/$dot" "$inhome"~ - $act mv -f "$inhome"~ "$inhome" + $act mv "$inhome" "$dot" + $act mv "$inhome~" "$inhome" + $act rm -rf "$dot~" else - needs import "modified here" - $act rm -f "$dot"~ - $act cp "$inhome" "$dot"~ - $act mv -f "$dot"~ "$dot" + bad "mismatched file types" fi done brokens=$( cd $HOME - find -L .[0-9a-zA-Z]* -xdev -type l -lname "$basepath/dot/*" + find -L .[0-9a-zA-Z]* -maxdepth 0 -xdev -type l -lname "$basepath/dot/*" ) for underhome in $brokens; do inhome="$HOME/$underhome" -- 2.30.2