efi-boot-shim/make-archive
2023-01-22 13:05:10 +00:00

105 lines
2.6 KiB
Bash
Executable File

#!/bin/sh
set -e
usage() {
status="${1}"
if [ "${status}" -eq 0 ] ; then
out=/dev/stdout
else
out=/dev/stderr
fi
{
echo "usage: make-archive [--origin ORIGIN] \\"
echo " [--test VERSION [GNUEFI_GIT_TAG]"
echo " |--release VERSION SHIM_GIT_TAG GNUEFI_GIT_TAG]"
} >>"${out}"
exit "${status}"
}
main() {
VERSION=""
SHIM_GIT_TAG=""
GNUEFI_GIT_TAG=""
ORIGIN="origin"
while [ $# -ne 0 ] ; do
case "$1" in
--help|--usage|-h|"-?")
usage 0
;;
--origin)
if [ $# -lt 2 ] ; then
echo "error: missing origin" >>/dev/stderr
usage 1
fi
ORIGIN="${2}"
shift
;;
--test)
if [ $# -lt 2 ] ; then
echo "error: missing version" >>/dev/stderr
usage 1
fi
VERSION="${2}"
if [ $# -gt 2 ] ; then
GNUEFI_GIT_TAG="${3}"
shift
fi
shift
;;
--release)
if [ $# -lt 2 ] ; then
echo "error: missing version" >>/dev/stderr
usage 1
fi
if [ $# -lt 3 ] ; then
echo "error: missing shim git tag" >>/dev/stderr
usage 1
fi
if [ $# -lt 4 ] ; then
echo "error: missing gnuefi git tag" >>/dev/stderr
usage 1
fi
VERSION="${2}"
SHIM_GIT_TAG="${3}"
GNUEFI_GIT_TAG="${4}"
shift
shift
shift
;;
*)
echo unknown argument "\"$1\"" >>/dev/stderr
usage 1
;;
esac
shift
done
ARCHIVE_DIR="$(mktemp -d)"
rm -rf "${ARCHIVE_DIR}/shim-${VERSION}" "${ARCHIVE_DIR}/shim-${VERSION}"
mkdir -p "${ARCHIVE_DIR}/shim-${VERSION}/gnu-efi"
cd gnu-efi || exit 1
if [ "x" = "x${GNUEFI_GIT_TAG}" ] ; then
git archive --format=tar "$(git log -1 --pretty=format:%h)" | ( cd "${ARCHIVE_DIR}/shim-${VERSION}/gnu-efi" ; tar x )
else
git archive --format=tar "${ORIGIN}/${GNUEFI_GIT_TAG}" | ( cd "${ARCHIVE_DIR}/shim-${VERSION}/gnu-efi" ; tar x )
fi
cd ..
if [ "x" = "x${SHIM_GIT_TAG}" ] ; then
git archive --format=tar "$(git log -1 --pretty=format:%h)" | ( cd "${ARCHIVE_DIR}/shim-${VERSION}" ; tar x )
TIMESTAMP=0
else
# ORIGIN doesn't yet have this tag
git archive --format=tar "${SHIM_GIT_TAG}" | ( cd "${ARCHIVE_DIR}/shim-${VERSION}" ; tar x )
TIMESTAMP=$(git log -1 --pretty=%ct "${SHIM_GIT_TAG}")
fi
git log -1 --pretty=format:%H > "${ARCHIVE_DIR}/shim-${VERSION}/commit"
DIR="$PWD"
cd "${ARCHIVE_DIR}"
tar -c --sort=name --mtime="@${TIMESTAMP}" --owner=0 --group=0 --numeric-owner --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime --bzip2 -f "${DIR}/shim-${VERSION}.tar.bz2" "shim-${VERSION}"
rm -rf "${ARCHIVE_DIR}"
echo "The archive is in shim-${VERSION}.tar.bz2"
exit 0
}
main "${@}"