The archive-source script appended everything directly on the tar root making it unusable for creating nix overlays; nix expects all files to be under a directory in the tarbal.
Add a "-d|--dir" argument that places all files under a custom root. Behaviour is unchanged when the argument is not given. Signed-off-by: Joel Granados <joel.grana...@kernel.org> --- scripts/archive-source.sh | 78 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 63 insertions(+), 15 deletions(-) diff --git a/scripts/archive-source.sh b/scripts/archive-source.sh index a469a5e2dec4b05e51474f0a1af190c1ccf23c7e..7143aaefc1133fe991b329df3c78e6ed7726322f 100755 --- a/scripts/archive-source.sh +++ b/scripts/archive-source.sh @@ -9,19 +9,6 @@ # This code is licensed under the GPL version 2 or later. See # the COPYING file in the top-level directory. -error() { - printf %s\\n "$*" >&2 - exit 1 -} - -if test $# -lt 1; then - error "Usage: $0 <output tarball>" -fi - -tar_file=$(realpath "$1") -sub_tdir=$(mktemp -d "${tar_file%.tar}.sub.XXXXXXXX") -sub_file="${sub_tdir}/submodule.tar" - # We want a predictable list of submodules for builds, that is # independent of what the developer currently has initialized # in their checkout, because the build environment is completely @@ -32,6 +19,61 @@ subprojects="keycodemapdb libvfio-user berkeley-softfloat-3 proc-macro-error-1-rs proc-macro-error-attr-1-rs quote-1-rs syn-2-rs unicode-ident-1-rs" sub_deinit="" +git_archive_prefix="" +tar_transform="" + +BASENAME="$(basename "${BASH_SOURCE[0]}")" +USAGE="Usage: ${BASENAME} [OPTIONS] <tarball> + <tarball> Resulting tarball name + + OPTIONS: + -d, --dir <DIR> Files will be placed into DIR inside the tarball +" + +error() { + printf %s\\n "$*" >&2 + exit 1 +} + +get_opts() { + local short="d:" + local long="dir:" + + if ! tmp=$(getopt -o "$short" --long "$long" -n "$BASENAME" -- "$@"); then + exit 1 + fi + eval set -- "$tmp" + unset tmp + + while true; do + case "$1" in + '-d' | '--dir' ) + local tar_dir_name=$"$2/"; shift 2 + git_archive_prefix="--prefix ${tar_dir_name}" + tar_transform="--transform=s|^|${tar_dir_name}|" + ;; + + '--' ) + shift 1 + ;; + + * ) + tar_file_name="$1"; shift + break + ;; + + esac + done + + if [ $# -gt 0 ]; then + echo "Superfluous args: $@" + error "${USAGE}" + fi + + tar_file=$(realpath "$tar_file_name") + sub_tdir=$(mktemp -d "${tar_file%.tar}.sub.XXXXXXXX") + sub_file="${sub_tdir}/submodule.tar" +} function cleanup() { local status=$? @@ -73,13 +115,19 @@ function subproject_dir() { echo "${dir:-$1}" } -git archive --format tar "$(tree_ish)" > "$tar_file" +get_opts "$@" + +git archive --format tar ${git_archive_prefix} "$(tree_ish)" > "$tar_file" test $? -ne 0 && error "failed to archive qemu" for sp in $subprojects; do meson subprojects download $sp test $? -ne 0 && error "failed to download subproject $sp" - tar --append --file "$tar_file" --exclude=.git subprojects/"$(subproject_dir $sp)" + tar --append \ + --file "$tar_file" \ + --exclude=.git \ + ${tar_transform} \ + subprojects/"$(subproject_dir $sp)" test $? -ne 0 && error "failed to append subproject $sp to $tar_file" done exit 0 -- 2.44.1