From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: qemu-devel@nongnu.org, famz@redhat.com
Subject: Re: [Qemu-devel] [PATCH] scripts: use git archive in archive-source
Date: Wed, 30 Jan 2019 12:04:22 +0000 [thread overview]
Message-ID: <20190130120422.GK15904@redhat.com> (raw)
In-Reply-To: <20190130065530.6371-1-kraxel@redhat.com>
On Wed, Jan 30, 2019 at 07:55:30AM +0100, Gerd Hoffmann wrote:
> Use git archive to create tarballs of qemu and submodules instead of
> cloning the repository and the submodules. This is a order of magnitude
> faster because it doesn't fetch the submodules from the internet each
> time the script runs.
There's another patch addressing the same problem here, which takes
the approach of 'git clone' on the submodules to avoid pulling them
from the internet each time:
https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg06588.html
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> scripts/archive-source.sh | 46 ++++++++++------------------------------------
> 1 file changed, 10 insertions(+), 36 deletions(-)
>
> diff --git a/scripts/archive-source.sh b/scripts/archive-source.sh
> index 6eed2a29bd..beae968f80 100755
> --- a/scripts/archive-source.sh
> +++ b/scripts/archive-source.sh
> @@ -19,8 +19,7 @@ if test $# -lt 1; then
> fi
>
> tar_file=$(realpath "$1")
> -list_file="${tar_file}.list"
> -vroot_dir="${tar_file}.vroot"
> +sub_file=$(mktemp "${tar_file%.tar}.sub.XXXXXXXX.tar")
>
> # We want a predictable list of submodules for builds, that is
> # independent of what the developer currently has initialized
> @@ -28,7 +27,7 @@ vroot_dir="${tar_file}.vroot"
> # different to the host OS.
> submodules="dtc ui/keycodemapdb tests/fp/berkeley-softfloat-3 tests/fp/berkeley-testfloat-3"
>
> -trap "status=$?; rm -rf \"$list_file\" \"$vroot_dir\"; exit \$status" 0 1 2 3 15
> +trap "status=$?; rm -rf \"$sub_file\" ; exit \$status" 0 1 2 3 15
>
> if git diff-index --quiet HEAD -- &>/dev/null
> then
> @@ -36,38 +35,13 @@ then
> else
> HEAD=$(git stash create)
> fi
> -git clone --shared . "$vroot_dir"
> -test $? -ne 0 && error "failed to clone into '$vroot_dir'"
> -
> -cd "$vroot_dir"
> -test $? -ne 0 && error "failed to change into '$vroot_dir'"
> -
> -git checkout $HEAD
> -test $? -ne 0 && error "failed to checkout $HEAD revision"
> -
> +git archive --format tar $HEAD > "$tar_file"
> +test $? -ne 0 && error "failed to archive qemu"
> for sm in $submodules; do
> - git submodule update --init $sm
> - test $? -ne 0 && error "failed to init submodule $sm"
> + git submodule update --init "$sm"
The current archive-source.sh code is careful to not touch the
developer's current git checkout, because it runs submodule
update in a clone'd tree. The earlier patch hunk gets rid of the
clone, so now submodule update is touching the developer's master
git checkout. IMHO this is not acceptable - running tests (which
use archive-source.sh) must never alter the developer's git checkout
status in any way.
The alternate patch mentioned above does that.
Even if we keep the git clone part, we could still usefully
switch to running git archive, instead of re-inventing it
via git ls-files + tar.
> + test $? -ne 0 && error "failed to update submodule $sm"
> + (cd $sm; git archive --format tar --prefix "$sm/" HEAD) > "$sub_file"
> + test $? -ne 0 && error "failed to archive submodule $sm"
> + tar --concatenate --file "$tar_file" "$sub_file"
> + test $? -ne 0 && error "failed append submodule $sm to $tar_file"
> done
> -
> -if test -n "$submodules"; then
> - {
> - git ls-files || error "git ls-files failed"
> - for sm in $submodules; do
> - (cd $sm; git ls-files) | sed "s:^:$sm/:"
> - if test "${PIPESTATUS[*]}" != "0 0"; then
> - error "git ls-files in submodule $sm failed"
> - fi
> - done
> - } | grep -x -v $(for sm in $submodules; do echo "-e $sm"; done) > "$list_file"
> -else
> - git ls-files > "$list_file"
> -fi
> -
> -if test $? -ne 0; then
> - error "failed to generate list file"
> -fi
> -
> -tar -cf "$tar_file" -T "$list_file" || error "failed to create tar file"
> -
> -exit 0
> --
> 2.9.3
>
>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2019-01-30 12:04 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-30 6:55 [Qemu-devel] [PATCH] scripts: use git archive in archive-source Gerd Hoffmann
2019-01-30 12:04 ` Daniel P. Berrangé [this message]
2019-01-31 7:41 ` Gerd Hoffmann
2019-01-31 10:26 ` Daniel P. Berrangé
2019-01-31 18:17 ` no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190130120422.GK15904@redhat.com \
--to=berrange@redhat.com \
--cc=famz@redhat.com \
--cc=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).