mirror of
				https://github.com/DaoCloud/public-image-mirror.git
				synced 2025-10-31 21:59:22 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			75 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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
 |