#!/bin/bash # Copyright (c) 2013 The CoreOS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. SCRIPT_ROOT=$(dirname $(readlink -f "$0")) . "${SCRIPT_ROOT}/common.sh" || exit 1 DEFINE_boolean dry_run ${FLAGS_FALSE} "Trial run, makes no changes." MIRROR_ROOT="${DEFAULT_BUILD_ROOT}/mirror" # Parse flags FLAGS "$@" || exit 1 eval set -- "${FLAGS_ARGV}" switch_to_strict_mode declare -A repos=( [portage-stable]="portage-stable" [coreos-overlay]="coreos" ) if [[ $# -eq 0 ]]; then set -- "${!repos[@]}" fi EXIT_CODE=0 update_local_mirror() { local repo_name="$1" local repo_mirror="${MIRROR_ROOT}/${repos[$repo_name]}" local extra_flags="" if [[ ${FLAGS_dry_run} == ${FLAGS_TRUE} ]]; then info "Pretend distfiles update for $repo_name" extra_flags+=" --dry-run " else info "Starting distfiles update for $repo_name" fi rm -rf "${repo_mirror}/log" # clear old logs mkdir -p "${repo_mirror}/"{distfiles,info,log,tmp} emirrordist --mirror --verbose $extra_flags \ --jobs=${NUM_JOBS} --repo="${repo_name}" \ --distfiles="${repo_mirror}/distfiles" \ --distfiles-local="$(portageq envvar DISTDIR)" \ --fetch-log-dir="${repo_mirror}/log" \ --failure-log="${repo_mirror}/log/failure.log" \ --success-log="${repo_mirror}/log/success.log" \ --distfiles-db="${repo_mirror}/info/distfiles.db" \ --restrict-mirror-exemptions="gentoo" \ --temp-dir="${repo_mirror}/tmp" \ --verify-existing-digest if [[ ! -s "${repo_mirror}/log/failure.log" ]]; then info "Completed distfiles update for $repo_name without error" return fi # report what went wrong :( local lastpkg pkg file error while read pkg file error; do local log="${repo_mirror}/log/${file}.log" if [[ "${pkg}" != "${lastpkg}" ]]; then error "${pkg} failed:" lastpkg="${pkg}" fi error " ${file} ${error}" [[ -s "${log}" ]] && cat "${log}" done <"${repo_mirror}/log/failure.log" EXIT_CODE=1 } for repo in "$@"; do if ! portageq get_repo_path / "$repo" >/dev/null; then die_notrace "Unknown repo name '$repo'" fi update_local_mirror "$repo" done if [[ ${FLAGS_dry_run} == ${FLAGS_TRUE} ]]; then info "Dry-run complete." exit fi command_completed exit $EXIT_CODE