#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.."&&pwd)";REPOSITORY="$(git -C "${ROOT}" rev-parse --show-toplevel)";COMMIT="$(git -C "${REPOSITORY}" rev-parse "${1:-HEAD}^{commit}")";OUTPUT="${ROOT}/results/clean-export";TEMPORARY="$(mktemp -d)";readonly ROOT REPOSITORY COMMIT OUTPUT TEMPORARY;trap 'rm -rf "${TEMPORARY}"' EXIT;mkdir -p "${OUTPUT}";printf 'git archive %q editorial/reproductions/svc-04 | tar -x\n' "${COMMIT}" >"${OUTPUT}/command.txt";git -C "${REPOSITORY}" archive "${COMMIT}" editorial/reproductions/svc-04|tar -x -C "${TEMPORARY}";EXPORTED="${TEMPORARY}/editorial/reproductions/svc-04";readonly EXPORTED;"${EXPORTED}/run.sh" >"${OUTPUT}/output.txt.tmp" 2>&1
compare(){ local relative="$1" label="$2" left right;left="$(sha256sum "${EXPORTED}/${relative}"|cut -d' ' -f1)";right="$(sha256sum "${ROOT}/${relative}"|cut -d' ' -f1)";[[ "${left}" == "${right}" ]]||exit 1;printf '%s_sha256=%s\n' "${label}" "${left}";}
record(){ local relative="$1" label="$2" hash;hash="$(sha256sum "${EXPORTED}/${relative}"|cut -d' ' -f1)";printf '%s_sha256=%s\n' "${label}" "${hash}";}
{ printf 'resolved_commit=%s\n' "${COMMIT}";compare results/verification/results/output.txt verifier;compare results/analysis/evidence/output.txt evidence;compare results/analysis/comparison/output.txt comparison;record results/sources/primary/output.txt clean_primary_sources;compare results/provenance/manifest/output.txt source_manifest;compare results/diffs/MUT-13/output.txt composition_diff;compare results/diffs/MUT-17/output.txt universal_diff;printf 'exit_code=0\n';}>"${OUTPUT}/metadata.txt";sed -E -e 's/[[:space:]]+$//' -e '${/^$/d;}' "${OUTPUT}/output.txt.tmp">"${OUTPUT}/output.txt";rm "${OUTPUT}/output.txt.tmp";echo "Clean export verified at ${COMMIT}"
