grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] bootstrap: When a commit hash is specified, do a shallow fet


From: Daniel Kiper
Subject: Re: [PATCH] bootstrap: When a commit hash is specified, do a shallow fetch if possible
Date: Mon, 25 Oct 2021 23:35:06 +0200
User-agent: NeoMutt/20170113 (1.7.2)

On Fri, Oct 22, 2021 at 04:26:41PM -0500, Glenn Washburn wrote:
> On Fri, 22 Oct 2021 18:44:15 +0200
> Daniel Kiper <daniel.kiper@oracle.com> wrote:
>
> > On Thu, Oct 21, 2021 at 12:49:19PM -0500, Glenn Washburn wrote:
> > > The gnulib sources are large but more importantly have lots of changes. So
> > > initial checkout of the repository can take a long time when network or
> > > cpu resources are limited. The later is especially acute in a non-KVM QEMU
> > > virtual machine (which can take 40+ minutes compared to <30 seconds with
> > > this change[1]). The problem is specific to how GRUB uses gnulib, which is
> > > by pegging the desired checkout to a specific git revision. In this case,
> > > git can not do a shallow clone by using the --depth option because git 
> > > does
> > > not know ahead of time how deep the revision is from the tip. So git must
> > > clone the whole repository.
> > >
> > > However, there is an alternate method that requires support from the git
> > > server[2], namely by asking for a specific commit on fetch. Refactor to 
> > > use
> > > fetch and fallback to fetching the entire repository if fetching by commit
> > > hash fails.
> > >
> > > Currently the git server hosting the official gnulib git repository does 
> > > not
> > > support fetch by commit hash[3]. However, there are mirrors which do 
> > > support
> > > this[4], and can be specified by setting the $GNULIB_URL.
>
> This paragraph is now out of date, the git server configuration change
> happened much more quickly than I expected. So before committing it
> should be removed along with the last two references.
>
> > >
> > > [1] https://savannah.nongnu.org/support/index.php?110553#comment1
> > > [2] https://stackoverflow.com/a/3489576/2108011
> > > [3] https://savannah.nongnu.org/support/index.php?110553
> > > [4] https://github.com/coreutils/gnulib
> > >
> > > Signed-off-by: Glenn Washburn <development@efficientek.com>
> > > ---
> > >  bootstrap | 16 ++++++++++++++--
> > >  1 file changed, 14 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/bootstrap b/bootstrap
> > > index 5b08e7e2d..914f911f8 100755
> > > --- a/bootstrap
> > > +++ b/bootstrap
> > > @@ -665,9 +665,21 @@ if $use_gnulib; then
> > >        shallow=
> > >        if test -z "$GNULIB_REVISION"; then
> > >          git clone -h 2>&1 | grep -- --depth > /dev/null && 
> > > shallow='--depth 2'
> > > +        git clone $shallow ${GNULIB_URL:-$default_gnulib_url} 
> > > "$gnulib_path" \
> > > +          || cleanup_gnulib
> > > +      else
> > > +        git fetch -h 2>&1 | grep -- --depth > /dev/null && 
> > > shallow='--depth 2'
> > > +        mkdir -p "$gnulib_path"
> > > +        git -C "$gnulib_path" init
> > > +        git -C "$gnulib_path" remote add origin 
> > > ${GNULIB_URL:-$default_gnulib_url}
> > > +        # Can not do a shallow fetch if fetch by commit hash fails 
> > > because we
> > > +        # do not know how the to go to get to $GNULIB_REVISION, so we 
> > > must get
> > > +        # all commits.
> > > +        git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION" \
> > > +          || git -C "$gnulib_path" fetch origin \
> > > +          || cleanup_gnulib
> > > +        git -C "$gnulib_path" reset --hard FETCH_HEAD
> >
> > Is this hunk from gnulib upstream? If not I would prefer if you upstream
> > it into gnulib. We should avoid custom patches for imported code as much
> > as possible.
>
> I agree in general. As mentioned in a follow up reply to this patch, I
> did submit the patch upstream[1]. The only difference is the commit

Oh, sorry, I missed this somehow.

> message. It has not been responded to yet. However, even once accepted
> upstream we'll have to cherry-pick it to the GRUB repo. Are you
> thinking we'd need to get all changes to bootstrap at that time? It
> doesn't look like there's anything that would be that useful (except
> maybe using the https repo url). I'm curious how you'd like to handle
> this.

I want to bump the gnulib version to the latest one. Though first of all
we have to upstream a few gnulib issues discovered by the Coverity.
Darren, CC-ed, is working on it.

> I don't think the issue of a custom patch in this instance is a problem
> though. Bootstrap very rarely changes, even in upstream (<10 changes in
> the last 2 years). So there I'm not concerned about having to maintain
> a lot of custom patches on top of it (like the situation of many
> distros vis-a-vis GRUB). So I think if its not accepted upstream (I
> don't see why it wouldn't be), I think we should use in GRUB because it
> provides significant reduction in bandwith and a drastic reduction in
> time to checkout on a qemu VM (but also significant not on a VM, 5min
> vs 1min) depending on the CPU resources available. This is especially
> useful for a CI/testing system that is frequently run.

If gnulib upstream folks reject it then I can consider taking this patch
into the GRUB.

> I'm fine with waiting a few weeks and see what happens upstream.

Sounds like a plan.

Daniel

> Glenn
>
> [1] https://lists.gnu.org/archive/html/bug-gnulib/2021-10/msg00052.html



reply via email to

[Prev in Thread] Current Thread [Next in Thread]