[Buildroot] [PATCH 2/2 v2] support/download: be more conservative about git special refs

Ricardo Martincoski ricardo.martincoski at datacom.ind.br
Wed Aug 24 13:32:38 UTC 2016


Yann,

----- Original Message -----
> From: "Yann E. MORIN" <yann.morin.1998 at free.fr>
> To: buildroot at buildroot.org
> Cc: "Yann E. MORIN" <yann.morin.1998 at free.fr>
> Sent: Sunday, July 31, 2016 7:35:56 PM
> Subject: [Buildroot] [PATCH 2/2 v2] support/download: be more conservative
>	about git special refs
> The git special refs (e.g. Github PRs, Gerrit changes...) are not
> retrieved on non-bare clones; we need to fetch them manually.
> 
> However, we need not fetch any cset that is not such a special ref; it
> only generates warning messages that are *really* confusing.
> 
> Instead, we now check if we have the cset we need, and only when it is
> missing do we explicitly request it.
> 
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>
> Cc Vivien Didelot <vivien.didelot at savoirfairelinux.com>
> ---
> support/download/git | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/support/download/git b/support/download/git
> index e3be2e1..1c08c17 100755
> --- a/support/download/git
> +++ b/support/download/git
> @@ -66,8 +66,12 @@ pushd "${basename}" >/dev/null
> # below, if there is an issue anyway. Since most of the cset we're gonna
> # have to clone are not such special refs, consign the output to oblivion
> # so as not to alarm unsuspecting users, but still trace it as a warning.
> -if ! _git fetch origin "'${cset}:${cset}'" >/dev/null 2>&1; then
> -    printf "Could not fetch special ref '%s'; assuming it is not special.\n"
> "${cset}"
> +#
> +# Only try to fetch such a special ref if we do not already have the
> +# cset we need locally.
> +#
> +if ! _git rev-parse -q --verify "'${cset}^{commit}'" >/dev/null; then
> +    _git fetch origin "'${cset}:${cset}'"

A question more related to 13c89c2f than to this patch, but anyway...
13c89c2f support/download/git: do not use bare clones

When cset is a special ref, e.g. refs/changes/80/22580/2, this 'git fetch' works
fine.
But when cset is a sha1 of a special ref, since 13c89c2f the checkout fails
AFAIK because git server using default configuration does not upload
unreachable sha1.

Maybe we could translate the sha1 to a named ref when we assume we are about to
ask for a special ref. Something like this...

if ! _git rev-parse -q --verify "'${cset}^{commit}'" >/dev/null; then
    named_ref=$(_git ls-remote "'${repo}'" 2>&1 | grep "^${cset}" | cut -f2)
    if [ -n "$named_ref" ]; then
        _git fetch origin "'${named_ref}:${named_ref}'"
    else
        _git fetch origin "'${cset}:${cset}'"
    fi
fi

What do you think?

> fi
> 
> # Checkout the required changeset, so that we can update the required
> --
> 2.7.4

Regards,
Ricardo Martincoski


More information about the buildroot mailing list