summaryrefslogtreecommitdiff
path: root/src/lib/config.sync.source.sh
blob: 3d516dcdfc992436053480c01de82de5ee3ecdb0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
resolve_sync_destinations() {
    # destinations_ref is a nameref output filled by resolve_config_array.
    # shellcheck disable=SC2034
    local -n destinations_ref="$1"; shift

    # Parse SYNC_DESTINATIONS (array or scalar) via the shared config-array
    # helper. Unlike TAR_OPTS there is no default: an unset or empty value
    # simply yields an empty destinations array for callers to validate.
    # The helper returns non-zero when SYNC_DESTINATIONS was never declared;
    # we ignore that (|| true) since the already-empty array is exactly the
    # desired result, and the bare non-zero return would otherwise trip set -e.
    resolve_config_array SYNC_DESTINATIONS destinations_ref || true
}

sync_dist() {
    local destination
    local -a rsync_args=(-av)
    local -a sync_destinations=()

    resolve_sync_destinations sync_destinations

    if [ "$SYNC_DELETE" = yes ]; then
        rsync_args+=(--delete)
    fi

    for destination in "${sync_destinations[@]}"; do
        log_info "Syncing $DIST_DIR/ to $destination"
        rsync "${rsync_args[@]}" "$DIST_DIR/" "$destination"
    done
}