From 11c7eb57d446d634c55c39e0ad17287d36aab446 Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Sat, 15 Feb 2020 22:18:28 +0100 Subject: feat: make install using lt First working version of lt, Added a makefile (not installed). Could get rid of ~/.git which was interfering with rg, fzf. --- bin/lt | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100755 bin/lt (limited to 'bin') diff --git a/bin/lt b/bin/lt new file mode 100755 index 0000000..21afaf0 --- /dev/null +++ b/bin/lt @@ -0,0 +1,72 @@ +#!/bin/sh + +# link tree + +lt_version='lt-0.1' +unset CDPATH +export LC_ALL=C IFS=' +' + +# ca returns the common ancestor between 2 paths +# ca /h/u/a/b /h/u/c/d => /h/u +ca() { + ca_p1=${1#/} ca_p2=${2#/} ca_r1= ca_r2= R1=/ + while true; do + [ "$ca_p1" ] || [ "$ca_p2" ] || break + ca_r1=$ca_r1/${ca_p1%%/*} ca_p1=${ca_p1#*/} + ca_r2=$ca_r2/${ca_p2%%/*} ca_p2=${ca_p2#*/} + [ "$ca_r1" != "$ca_r2" ] && break + R1=$ca_r1 + done +} + +#echo ca $1 $2 && ca $1 $2 && echo "$R1" + +# bp returns the relative path from source to base +bp() { + bp_s=$1 bp_b=$2 R1= + while true; do + [ "$bp_b" = "$bp_s" ] && break + bp_s=${bp_s%/*} + [ "$R1" ] && R1=$R1/.. || R1=.. + done +} + +#echo bp /h/u/a /h/u && bp /h/u/a /h/u && echo "$R1" + +# rp returns the relative path between src and base +# rp /h/u/a/b/f /h/u/b/f [/h/u] ../a/b/f +rp() { + rp_s=$1 rp_d=$2 rp_c=$3 + ! [ "$rp_c" ] && ca "$1" "$2" && rp_c=$R1 + rp_bd=${rp_d#$rp_c/} + rp_bs=${rp_s#$rp_c/} + bp "$rp_d" "$rp_c" && R1=$R1/$rp_bs && R1=${R1#../} +} + +#rp /h/u/a/b /h/u/b && echo $R1 + +skip=".git .gitignore .*.swp Makefile" + +# link tree src dest +lt() { + d=$(mkdir -p "$2" && cd "$2" && pwd) + cd "$1" && s=$PWD + find . ! -type d -print | { + cd "$d" + while read f; do + for k in $skip; do + case $f in (./$k|./$k/*) continue 2;; esac + done + f=${f#./} + fd=$d/$f; fd=${fd%/*} + test -d "$fd" || $trace mkdir -p "$fd" + rp "$s/$f" "$d/$f" && $trace ln -sf "$R1" "$d/$f" + done + } +} + +#trace=echo +lt "$1" "$2" + +#echo $1 $2 $3 && $1 $2 $3 && echo $R1 -- cgit v1.2.3