fix ordered domain #11
1 changed files with 28 additions and 1 deletions
|
|
@ -250,15 +250,21 @@ declare -a ORDERED_DOMS=()
|
|||
|
||||
for dom in $(printf '%s\n' "${!EXPANDED[@]}" | sort -u); do
|
||||
[[ "${SOURCES[$dom]:-}" == "related" ]] && continue
|
||||
# Базовый домен мог быть добавлен как related другим базовым доменом раньше по
|
||||
# алфавиту — пропускаем, чтобы не дублировать запись в конфиге.
|
||||
[[ -n "${WRITTEN[$dom]:-}" ]] && continue
|
||||
|
||||
# Собираем ещё не записанные связанные домены.
|
||||
# while выполняется в subshell — читает снимок WRITTEN, что корректно исключает
|
||||
# домены, уже занятые предыдущим базовым доменом.
|
||||
# Базовые домены (SOURCES==base) пропускаем — у них будет своя секция.
|
||||
mapfile -t base_related < <(
|
||||
if [[ -n "${SITE_RELATED[$dom]:-}" ]]; then
|
||||
tr ' ' '\n' <<< "${SITE_RELATED[$dom]}" | grep -v '^$' | sort -u | \
|
||||
while IFS= read -r rd; do
|
||||
[[ -z "${WRITTEN[$rd]:-}" ]] && printf '%s\n' "$rd"
|
||||
[[ -n "${WRITTEN[$rd]:-}" ]] && continue
|
||||
[[ "${SOURCES[$rd]:-}" == "base" ]] && continue
|
||||
printf '%s\n' "$rd"
|
||||
done
|
||||
fi
|
||||
)
|
||||
|
|
@ -281,6 +287,27 @@ done
|
|||
|
||||
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
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue