mirror of
https://github.com/DaoCloud/public-image-mirror.git
synced 2025-08-08 20:22:14 +08:00
Refactory
This commit is contained in:
74
hack/diff.sh
Executable file
74
hack/diff.sh
Executable file
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
source "$(dirname "${BASH_SOURCE}")/helper.sh"
|
||||
cd "${ROOT}"
|
||||
|
||||
DEBUG="${DEBUG:-}"
|
||||
INCREMENTAL="${INCREMENTAL:-}"
|
||||
QUICKLY="${QUICKLY:-}"
|
||||
SYNC="${SYNC:-}"
|
||||
PARALLET="${PARALLET:-0}"
|
||||
PARALLET_JOBS="${PARALLET_JOBS:-4}"
|
||||
EXCLUDE="$(helper::exclude)"
|
||||
|
||||
declare -A DOMAIN_MAP=()
|
||||
|
||||
function wait_jobs() {
|
||||
local job_num=${1:-3}
|
||||
local perc=$(jobs -p | wc -l)
|
||||
while [ "${perc}" -gt "${job_num}" ]; do
|
||||
sleep 1
|
||||
perc=$(jobs -p | wc -l)
|
||||
done
|
||||
}
|
||||
|
||||
function sync_with_domain() {
|
||||
local domain="${1}"
|
||||
|
||||
local list=$(echo ${DOMAIN_MAP[${domain}]} | tr ' ' '\n' | shuf)
|
||||
for image in ${list}; do
|
||||
regex="${DEFAULT_REGEX}"
|
||||
if [[ "${image#*/}" =~ ":" ]]; then
|
||||
regex="${image##*:}"
|
||||
image="${image%:*}"
|
||||
fi
|
||||
local to="$(helper::replace_domain "${domain}/${image}")"
|
||||
|
||||
local logfile="${to//\//_}_sync.log"
|
||||
echo >"${logfile}"
|
||||
|
||||
DEBUG="${DEBUG}" SYNC="${SYNC}" QUICKLY="${QUICKLY}" INCREMENTAL="${INCREMENTAL}" PARALLET="${PARALLET}" FOCUS="${regex}" SKIP="${EXCLUDE}" ./hack/diff-image.sh "${domain}/${image}" "${to}" 2>&1 | tee -a "${logfile}" || {
|
||||
echo "Error: diff image ${domain}/${image} $(helper::replace_domain "${domain}/${image}")"
|
||||
}
|
||||
done
|
||||
}
|
||||
|
||||
function main() {
|
||||
|
||||
for image in $(helper::get_source); do
|
||||
key="${image%%/*}"
|
||||
val="${image#*/}"
|
||||
if [[ -v "DOMAIN_MAP[${key}]" ]]; then
|
||||
DOMAIN_MAP["${key}"]+=" ${val}"
|
||||
else
|
||||
DOMAIN_MAP["${key}"]="${val}"
|
||||
fi
|
||||
done
|
||||
|
||||
for domain in "${!DOMAIN_MAP[@]}"; do
|
||||
if [[ "${PARALLET_JOBS}" -eq 0 ]]; then
|
||||
sync_with_domain "${domain}"
|
||||
else
|
||||
wait_jobs "${PARALLET_JOBS}"
|
||||
sync_with_domain "${domain}" &
|
||||
fi
|
||||
done
|
||||
|
||||
wait
|
||||
}
|
||||
|
||||
main
|
Reference in New Issue
Block a user