summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2020-02-15 22:18:28 +0100
committerMarc Vertes <mvertes@free.fr>2020-02-15 22:18:28 +0100
commit11c7eb57d446d634c55c39e0ad17287d36aab446 (patch)
treedaaace86d73d4e7d014ef5d9daa9491e1f5c9efa /bin
parent141502a84b8258095463becc4da6b2e19c311d8d (diff)
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.
Diffstat (limited to 'bin')
-rwxr-xr-xbin/lt72
1 files changed, 72 insertions, 0 deletions
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