Compare commits

..

No commits in common. "7e2bd241fbab97190a00626b7382b317c3921cc8" and "01d6bf5cd8b434ce43f1c77a8aeea2bdfa3659d2" have entirely different histories.

View file

@ -250,21 +250,15 @@ declare -a ORDERED_DOMS=()
for dom in $(printf '%s\n' "${!EXPANDED[@]}" | sort -u); do for dom in $(printf '%s\n' "${!EXPANDED[@]}" | sort -u); do
[[ "${SOURCES[$dom]:-}" == "related" ]] && continue [[ "${SOURCES[$dom]:-}" == "related" ]] && continue
# Базовый домен мог быть добавлен как related другим базовым доменом раньше по
# алфавиту — пропускаем, чтобы не дублировать запись в конфиге.
[[ -n "${WRITTEN[$dom]:-}" ]] && continue
# Собираем ещё не записанные связанные домены. # Собираем ещё не записанные связанные домены.
# while выполняется в subshell — читает снимок WRITTEN, что корректно исключает # while выполняется в subshell — читает снимок WRITTEN, что корректно исключает
# домены, уже занятые предыдущим базовым доменом. # домены, уже занятые предыдущим базовым доменом.
# Базовые домены (SOURCES==base) пропускаем — у них будет своя секция.
mapfile -t base_related < <( mapfile -t base_related < <(
if [[ -n "${SITE_RELATED[$dom]:-}" ]]; then if [[ -n "${SITE_RELATED[$dom]:-}" ]]; then
tr ' ' '\n' <<< "${SITE_RELATED[$dom]}" | grep -v '^$' | sort -u | \ tr ' ' '\n' <<< "${SITE_RELATED[$dom]}" | grep -v '^$' | sort -u | \
while IFS= read -r rd; do while IFS= read -r rd; do
[[ -n "${WRITTEN[$rd]:-}" ]] && continue [[ -z "${WRITTEN[$rd]:-}" ]] && printf '%s\n' "$rd"
[[ "${SOURCES[$rd]:-}" == "base" ]] && continue
printf '%s\n' "$rd"
done done
fi fi
) )
@ -287,27 +281,6 @@ done
mapfile -t ALL_DOMAINS < <(printf "%s\n" "${!EXPANDED[@]}" | sort -u) mapfile -t ALL_DOMAINS < <(printf "%s\n" "${!EXPANDED[@]}" | sort -u)
# ==============================
# Проверка уникальности ORDERED_DOMS перед записью
# ==============================
declare -A _seen=()
declare -a _dups=()
for _d in "${ORDERED_DOMS[@]}"; do
if [[ -n "${_seen[$_d]:-}" ]]; then
_dups+=("$_d")
fi
_seen["$_d"]=1
done
unset _seen
if [[ ${#_dups[@]} -gt 0 ]]; then
err "BUG: ${#_dups[@]} duplicate domain(s) found in output list — config NOT written"
for _d in "${_dups[@]}"; do
err " duplicate: $_d"
done
exit 5
fi
# Записываем конфиги одним батчем (не по одной строке через >>) # Записываем конфиги одним батчем (не по одной строке через >>)
if ! $DRY_RUN; then if ! $DRY_RUN; then
{ {