Compare commits
2 commits
01d6bf5cd8
...
7e2bd241fb
| Author | SHA1 | Date | |
|---|---|---|---|
| 7e2bd241fb | |||
| c3a30da18f |
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
|
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
|
||||||
[[ -z "${WRITTEN[$rd]:-}" ]] && printf '%s\n' "$rd"
|
[[ -n "${WRITTEN[$rd]:-}" ]] && continue
|
||||||
|
[[ "${SOURCES[$rd]:-}" == "base" ]] && continue
|
||||||
|
printf '%s\n' "$rd"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
)
|
)
|
||||||
|
|
@ -281,6 +287,27 @@ 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
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue