qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

archive-source.sh (2151B)


      1 #!/bin/bash
      2 #
      3 # Author: Fam Zheng <famz@redhat.com>
      4 #
      5 # Archive source tree, including submodules. This is created for test code to
      6 # export the source files, in order to be built in a different environment,
      7 # such as in a docker instance or VM.
      8 #
      9 # This code is licensed under the GPL version 2 or later.  See
     10 # the COPYING file in the top-level directory.
     11 
     12 error() {
     13     printf %s\\n "$*" >&2
     14     exit 1
     15 }
     16 
     17 if test $# -lt 1; then
     18     error "Usage: $0 <output tarball>"
     19 fi
     20 
     21 tar_file=$(realpath "$1")
     22 sub_tdir=$(mktemp -d "${tar_file%.tar}.sub.XXXXXXXX")
     23 sub_file="${sub_tdir}/submodule.tar"
     24 
     25 # We want a predictable list of submodules for builds, that is
     26 # independent of what the developer currently has initialized
     27 # in their checkout, because the build environment is completely
     28 # different to the host OS.
     29 submodules="dtc meson ui/keycodemapdb"
     30 submodules="$submodules tests/fp/berkeley-softfloat-3 tests/fp/berkeley-testfloat-3"
     31 sub_deinit=""
     32 
     33 function cleanup() {
     34     local status=$?
     35     rm -rf "$sub_tdir"
     36     if test "$sub_deinit" != ""; then
     37         git submodule deinit $sub_deinit
     38     fi
     39     exit $status
     40 }
     41 trap "cleanup" 0 1 2 3 15
     42 
     43 function tree_ish() {
     44     local retval='HEAD'
     45     if ! git diff-index --quiet --ignore-submodules=all HEAD -- &>/dev/null
     46     then
     47         retval=$(git stash create)
     48     fi
     49     echo "$retval"
     50 }
     51 
     52 git archive --format tar "$(tree_ish)" > "$tar_file"
     53 test $? -ne 0 && error "failed to archive qemu"
     54 for sm in $submodules; do
     55     status="$(git submodule status "$sm")"
     56     smhash="${status#[ +-]}"
     57     smhash="${smhash%% *}"
     58     case "$status" in
     59         -*)
     60             sub_deinit="$sub_deinit $sm"
     61             git submodule update --init "$sm"
     62             test $? -ne 0 && error "failed to update submodule $sm"
     63             ;;
     64         +*)
     65             echo "WARNING: submodule $sm is out of sync"
     66             ;;
     67     esac
     68     (cd $sm; git archive --format tar --prefix "$sm/" $(tree_ish)) > "$sub_file"
     69     test $? -ne 0 && error "failed to archive submodule $sm ($smhash)"
     70     tar --concatenate --file "$tar_file" "$sub_file"
     71     test $? -ne 0 && error "failed append submodule $sm to $tar_file"
     72 done
     73 exit 0