Support deeply nested alts
Now, as long as there is a tracked file *somewhere* under the alt directory, it will be linked correctly, instead of requiring the tracked files to be direct children of the alt dir.
This commit is contained in:
parent
76ce3defea
commit
e12172d315
2 changed files with 17 additions and 5 deletions
|
@ -12,7 +12,7 @@ ALT_DIR = "test alt/test alt dir"
|
||||||
|
|
||||||
# Directory based alternates must have a tracked contained file.
|
# Directory based alternates must have a tracked contained file.
|
||||||
# This will be the test contained file name
|
# This will be the test contained file name
|
||||||
CONTAINED = "contained_file"
|
CONTAINED = "contained_dir/contained_file"
|
||||||
|
|
||||||
# These variables are used for making include files which will be processed
|
# These variables are used for making include files which will be processed
|
||||||
# within jinja templates
|
# within jinja templates
|
||||||
|
|
20
yadm
20
yadm
|
@ -461,7 +461,7 @@ EOF
|
||||||
-v distro="$local_distro" \
|
-v distro="$local_distro" \
|
||||||
-v distro_family="$local_distro_family" \
|
-v distro_family="$local_distro_family" \
|
||||||
-v source="$input" \
|
-v source="$input" \
|
||||||
-v source_dir="$(dirname "$input")" \
|
-v source_dir="$(builtin_dirname "$input")" \
|
||||||
-v classes="$(join_string $'\n' "${local_classes[@]}")" \
|
-v classes="$(join_string $'\n' "${local_classes[@]}")" \
|
||||||
"$awk_pgm" \
|
"$awk_pgm" \
|
||||||
"$input" > "$temp_file" || rm -f "$temp_file"
|
"$input" > "$temp_file" || rm -f "$temp_file"
|
||||||
|
@ -692,9 +692,21 @@ function alt_linking() {
|
||||||
local alt_sources=()
|
local alt_sources=()
|
||||||
local alt_template_cmds=()
|
local alt_template_cmds=()
|
||||||
|
|
||||||
for alt_path in $(for tracked in "${tracked_files[@]}"; do printf "%s\n" "$tracked" "${tracked%/*}"; done | LC_ALL=C sort -u) "${ENCRYPT_INCLUDE_FILES[@]}"; do
|
for tracked_file in $(printf "%s\n" "${tracked_files[@]}" | LC_ALL=C sort -u) "${ENCRYPT_INCLUDE_FILES[@]}"; do
|
||||||
alt_path="$YADM_BASE/$alt_path"
|
tracked_file="$YADM_BASE/$tracked_file"
|
||||||
if [[ "$alt_path" =~ .\#\#. ]]; then
|
if [[ "$tracked_file" =~ .\#\#. ]]; then
|
||||||
|
local alt_path=$tracked_file
|
||||||
|
|
||||||
|
# Walk up the path until we find the last component with a ## marker;
|
||||||
|
# that will be the source of the alt symlink
|
||||||
|
while : ; do
|
||||||
|
local tmp;
|
||||||
|
tmp="$(builtin_dirname "$alt_path")"
|
||||||
|
[[ "$tmp" =~ .\#\#. ]] || break
|
||||||
|
alt_path=$tmp
|
||||||
|
done
|
||||||
|
|
||||||
|
debug "Found alt at '$alt_path'"
|
||||||
if [ -e "$alt_path" ] ; then
|
if [ -e "$alt_path" ] ; then
|
||||||
score_file "$alt_path"
|
score_file "$alt_path"
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Reference in a new issue