[PATCH cygport] git.cygclass: Suppress the depth option

Brian Inglis Brian.Inglis@Shaw.ca
Sun Dec 3 21:53:33 GMT 2023


On 2023-12-03 13:34, Jon Turney via Cygwin-apps wrote:
> On 30/11/2023 12:17, Daisuke Fujimura via Cygwin-apps wrote:
>> Implementations that conditionally branch on variables are simple.
>>
>> The proposed retry implementation complicates git.cygclass, but I
>> think it reduces the maintainer's effort.
>>
>> I have created a patch for a retry implementation.
>> Could you review it?
> 
> Thanks very much.
> 
> Sure.
> 
>> diff --git a/cygclass/git.cygclass b/cygclass/git.cygclass
>> index e53a7985..1e26ab37 100644
>> --- a/cygclass/git.cygclass
>> +++ b/cygclass/git.cygclass
>> @@ -76,19 +76,33 @@ git_fetch() {
>>    # (not allowed for a hash, unless remote is configured to permit
>>    # it with allow*SHA1InWant).
>>    _depth="--depth 1"
>> + _branch=""
> 
> I think this is not necessary, as expanding an undefined variable is permitted 
> and has the equivalent empty value.
> 
>>    if defined GIT_TAG
>>    then
>> - _depth+=" --branch ${GIT_TAG}"
>> + _depth=" --branch ${GIT_TAG}"
> 
> I think this wants to be _branch, as otherwise that used but never defined?
> 
>>    elif defined GIT_BRANCH
>>    then
>> - _depth+=" --branch ${GIT_BRANCH}"
>> + _depth=" --branch ${GIT_BRANCH}"
> 
> Likewise.
> 
>>    fi
>>    fi
>>
>>    # T likely doesn't exist at this point, so create it first
>>    mkdir -p ${T}
>>    cd ${T}
>> - verbose git clone ${_depth} --no-checkout ${GIT_URI} ${GIT_MODULE}
>> || error "git clone failed"
>> + _gitlog=${T}/git.$$.log
>> + verbose git clone ${_depth} ${_branch} --no-checkout ${GIT_URI}
>> ${GIT_MODULE} |& tee ${_gitlog}
>> + if [ ${PIPESTATUS[0]} != 0 ]
>> + then
>> + grep "fatal: dumb http transport does not support shallow
>> capabilities" ${_gitlog} >& /dev/null
> 
> Can't this just use 'grep -q' ?
> 
> I wonder if there's a locale issue here (i.e. will git produce a localized error 
> message if LANG etc. is defined?)
> 
> Maybe depending on the precise string is too fragile, and we should just 
> unconditionally retry to see if things get better?
> 
>> + if [ $? = 0 ]
>> + then
>> + warning "git clone failed, retry without --depth option"
>> + verbose git clone ${_branch} --no-checkout ${GIT_URI} ${GIT_MODULE}
>> || error "git clone failed"
>> + else
> 
> In this case, the clone failed for a different reason, but we've eaten the 
> output from git, so maybe there's no indication given as to why?
> 
> Do we want to do something like "cat ${_gitlog}" here?
> 
>> + error "git clone failed"
>> + fi
>> + fi
>>    cd ${T}/${GIT_MODULE}
>>
>>   #****v* git.cygclass/GIT_BRANCH
>>
>>
>> On Mon, Nov 20, 2023 at 11:23 PM Jon Turney <jon.turney@dronecode.org.uk> wrote:
>>>
>>> On 19/11/2023 02:11, Daisuke Fujimura via Cygwin-apps wrote:
>>>> Some git providers do not support smart transport, so specifying the
>>>> depth option will result in an error.
>>>
>>> Right. This is a bug and needs fixing.
>>>
>>> Thanks for the patch.
>>>
>>>> ```
>>>> Cloning into 'xxxx'...
>>>> fatal: dumb http transport does not support shallow capabilities
>>>> ```
>>>>
> [...]
>>>
>>> But I wonder if wouldn't just be better to try with --depth and then
>>> fallback to without it, if that fails (especially if we can tell it
>>> failed for that reason).
>>>
> 
> Attached is the patch after my edits.

Looks like straight curl HEAD -I tells you about smart transport if you want a 
quick check rather than a dry run:

$ time curl -ILSs https://repo.or.cz/r/git.git/info/refs?service=git-upload-pack 
| grep -qi '^content-type:\sapplication/x-git-upload-pack'; echo $?

real    0m0.630s
user    0m0.077s
sys     0m0.123s
0
$ time curl -ILSs 
https://github.com/BrianInglis/apt-cyg.git/info/refs?service=git-upload-pack  | 
grep -qi '^content-type:\sapplication/x-git-upload-pack'; echo $?

real    0m0.440s
user    0m0.061s
sys     0m0.184s
1

-- 
Take care. Thanks, Brian Inglis              Calgary, Alberta, Canada

La perfection est atteinte                   Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter  not when there is no more to add
mais lorsqu'il n'y a plus rien à retirer     but when there is no more to cut
                                 -- Antoine de Saint-Exupéry


More information about the Cygwin-apps mailing list