Use relative symlinks for alt (#100)

* Fix broken support for .config/yadm/alt
* Removes dependence on external basename / dirname
This commit is contained in:
Tim Byrne 2019-11-17 13:07:29 -06:00
parent 98392b9a9c
commit 61576a6ae1
No known key found for this signature in database
GPG Key ID: 14DB4FC2465A4B12
1 changed files with 12 additions and 15 deletions

27
yadm
View File

@ -422,7 +422,12 @@ function alt() {
local IFS=$'\n' local IFS=$'\n'
for possible_alt in "${tracked_files[@]}" "${ENCRYPT_INCLUDE_FILES[@]}"; do for possible_alt in "${tracked_files[@]}" "${ENCRYPT_INCLUDE_FILES[@]}"; do
if [[ $possible_alt =~ .\#\#. ]]; then if [[ $possible_alt =~ .\#\#. ]]; then
possible_alts+=("$YADM_WORK/${possible_alt%%##*}") base_alt="${possible_alt%%##*}"
yadm_alt="${YADM_WORK}/${base_alt}"
if [ "${yadm_alt#$YADM_ALT/}" != "${yadm_alt}" ]; then
base_alt="${yadm_alt#$YADM_ALT/}"
fi
possible_alts+=("$YADM_WORK/${base_alt}")
fi fi
done done
local alt_linked local alt_linked
@ -449,7 +454,6 @@ function remove_stale_links() {
if [ -n "$link_target" ]; then if [ -n "$link_target" ]; then
for review_link in "${alt_linked[@]}"; do for review_link in "${alt_linked[@]}"; do
[ "$link_target" = "$review_link" ] && continue 2 [ "$link_target" = "$review_link" ] && continue 2
[ "$link_target" = "$(basename "$review_link")" ] && continue 2
done done
rm -f "$stale_candidate" rm -f "$stale_candidate"
fi fi
@ -527,7 +531,6 @@ function alt_future_linking() {
cp -f "$target" "$filename" cp -f "$target" "$filename"
else else
alt_ln "$target" "$filename" alt_ln "$target" "$filename"
alt_linked+=("$target")
fi fi
fi fi
done done
@ -571,7 +574,6 @@ function alt_past_linking() {
cp -f "$alt_path" "$new_link" cp -f "$alt_path" "$new_link"
else else
alt_ln "$alt_path" "$new_link" alt_ln "$alt_path" "$new_link"
alt_linked+=("$alt_path")
fi fi
last_linked="$alt_path" last_linked="$alt_path"
fi fi
@ -608,17 +610,12 @@ function alt_past_linking() {
} }
function alt_ln() { function alt_ln() {
local alt_dir alt_base new_base local full_link base
full_link="$2"
alt_dir="$(dirname "$1")" base="${full_link%/*}"
alt_base="$(basename "$1")" rel_source=$(relative_path "$base" "$1")
new_base="$(basename "$2")" ln -nfs "$rel_source" "$full_link"
if pushd "$alt_dir" >/dev/null ; then alt_linked+=("$rel_source")
ln -nfs "$alt_base" "$new_base"
popd &>/dev/null
else
ln -nfs "$1" "$2"
fi
} }
function bootstrap() { function bootstrap() {