X-Git-Url: https://iankelling.org/git/?p=distro-setup;a=blobdiff_plain;f=conflink;h=0ae24c332cce236812b3d2521bd332edd8f96934;hp=fdd3bd6072e07c25d802e132f0a828abb9605230;hb=79b274fcd8bfa556133ab13270e84b40aebe8468;hpb=3f878090bcbab55fb07cca8cc840b4817c6eb7c5 diff --git a/conflink b/conflink index fdd3bd6..0ae24c3 100755 --- a/conflink +++ b/conflink @@ -24,14 +24,27 @@ m() { s() { sudo "$@"; } lnf() { /a/exe/lnf "$@"; } +now=$(date +%s) + +# error prone +#f=~/.local/conflink +# fast=false +# if [[ -e $f ]] && (( $(stat -c %Y $f) > $now - 60*60*24 )); then +# fast=true +# fi if [[ $1 == -f ]]; then # f for fast - lnf() { ln -sf "$@"; } + fast=true + shift elif [[ $1 ]]; then echo "error: unrecognized arguments" >&2 exit 0 fi +if $fast; then + lnf() { ln -sf "$@"; } +fi + shopt -s nullglob shopt -s extglob shopt -s dotglob @@ -66,13 +79,19 @@ subdir-link-r() { } - common-file-setup() { - local dir fs x f + local dir fs x f systemd_reload + systemd_reload=false for dir in "$@"; do fs=$dir/filesystem if [[ -e $fs && $user =~ ^iank?$ ]]; then + # this could be done with rsync, something like this, + # but I haven't looked at the symlinks. + # s rsync -n -ahviSAXPH --specials --devices --chown=root:root --chmod=g-s $fs / # note, symlinks get resolved, not copied. + if s tar --mode=g-s --owner=0 --group=0 -cz -C $fs . | s tar -dz -C / | grep /etc/systemd &>/dev/null; then + systemd_reload=true + fi s tar --mode=g-s --owner=0 --group=0 -cz -C $fs . | s tar -xz -C / fi @@ -83,6 +102,9 @@ common-file-setup() { (( ${#x[@]} >= 1 )) || continue m lnf ${x[@]} ~ done + if $systemd_reload; then + m s systemctl daemon-reload + fi } user=$(id -un) @@ -155,4 +177,3 @@ case $user in echo "$0: error: unexpected user"; exit 1 ;; esac -