git mirror - github.com/owenewans/holy - branch master
clone: https://src.holypkg.eu/holy/

file tools/image-source-stage.sh

#!/bin/sh
set -eu
test "$#" -eq 4 || exit 2
bin=$1
root=$2
out=$3
inputs=$4
record="$out/build.record"
work="$out/work"
test -f "$inputs/sources.conf" && test -f "$inputs/aliases" || exit 6
cp "$inputs/sources.conf" "$out/inputs/sources.conf"
cp "$inputs/aliases" "$out/inputs/source-aliases"
sha256sum "$out/inputs/sources.conf" "$out/inputs/source-aliases" >> "$record"
"$bin" source plan --config "$out/inputs/sources.conf" --root "$root" > "$out/source.plan"
source_plan=$(sha256sum "$out/source.plan")
source_plan=${source_plan%% *}
printf 'source-plan %s\n' "$source_plan" >> "$record"
"$bin" source apply "$out/source.plan" --sha256 "$source_plan" --root "$root"
"$bin" source list --root "$root" > "$work/source-list"
mkdir "$out/mirrors"
while IFS= read -r alias; do
    case "$alias" in ''|*[!a-zA-Z0-9_-]*) exit 2 ;; esac
    index=$(cat "$inputs/$alias.index")
    case "$index" in *[!0-9a-f]*|'') exit 2 ;; esac
    test "${#index}" -eq 64 || exit 2
    commit=
    if test -f "$inputs/$alias.commit"; then
        commit=$(cat "$inputs/$alias.commit")
        case "$commit" in *[!0-9a-f]*|'') exit 2 ;; esac
        case "${#commit}" in 40|64) ;; *) exit 2 ;; esac
    fi
    source_id=$(awk -v name="\"$alias\"" \
        '$1 == "source" && $3 == name && $4 == "active" {print $2}' "$work/source-list")
    test "${#source_id}" -eq 64 || exit 6
    if test -f "$inputs/$alias.mirror"; then
        mirror=$(cat "$inputs/$alias.mirror")
        test "$(cat "$mirror/current")" = "sha256 $index" || exit 4
        cp -R "$mirror" "$out/mirrors/$alias"
        test "$(cat "$out/mirrors/$alias/current")" = "sha256 $index" || exit 4
        printf 'source-mirror %s imported\n' "$alias" >> "$record"
    else
        set -- "$bin" sync "$alias" --root "$root" --sha256 "$index" \
            --output "$out/mirrors/$alias"
        if test -n "$commit"; then set -- "$@" --commit "$commit"; fi
        if test -f "$inputs/$alias.ca"; then
            ca_file=$(cat "$inputs/$alias.ca")
            sha256sum "$ca_file" >> "$record"
            set -- "$@" --ca-file "$ca_file"
        fi
        "$@"
        printf 'source-mirror %s downloaded\n' "$alias" >> "$record"
    fi
    if test -f "$inputs/$alias.embed"; then
        test "$(cat "$inputs/$alias.embed")" = yes || exit 2
        mkdir -p "$root/var/cache/holypkg/image-mirrors"
        cp -R "$out/mirrors/$alias" "$root/var/cache/holypkg/image-mirrors/$alias"
        "$bin" source catalog bind "$alias" \
            "$root/var/cache/holypkg/image-mirrors/$alias" --root "$root"
        printf 'source-embedded %s full-catalog\n' "$alias" >> "$record"
    fi
    printf 'source %s %s index %s\n' "$alias" "$source_id" "$index" >> "$record"
    if test -n "$commit"; then printf 'source-commit %s %s\n' "$alias" "$commit" >> "$record"; fi
done < "$out/inputs/source-aliases"