def _clone(self, shallowClone):
        """Retry if clone failed"""

        command = ['clone']
        switchToBranch = False
        if self.supportsBranch and self.branch != 'HEAD':
            if self.branch.startswith('refs/'):
                # we can't choose this branch from 'git clone' directly; we
                # must do so after the clone
                switchToBranch = True
                command += ['--no-checkout']
            else:
                command += ['--branch', self.branch]
        if shallowClone:
            command += ['--depth', str(int(shallowClone))]
        if self.reference:
            command += ['--reference', self.reference]
        if self.origin:
            command += ['--origin', self.origin]
        command += [self.repourl, '.']

        if self.prog:
            command.append('--progress')
        if self.retry:
            abandonOnFailure = (self.retry[1] <= 0)
        else:
            abandonOnFailure = True
        # If it's a shallow clone abort build step
        res = yield self._dovccmd(command, abandonOnFailure=(abandonOnFailure and shallowClone))

        if switchToBranch:
            res = yield self._fetch(None)

        done = self.stopped or res == RC_SUCCESS  # or shallow clone??
        if self.retry and not done:
            delay, repeats = self.retry
            if repeats > 0:
                log.msg("Checkout failed, trying %d more times after %d seconds"
                        % (repeats, delay))
                self.retry = (delay, repeats - 1)

                df = defer.Deferred()
                df.addCallback(lambda _: self._doClobber())
                df.addCallback(lambda _: self._clone(shallowClone))
                reactor.callLater(delay, df.callback, None)
                res = yield df

        return res
def _clone ( self , shallowClone ) : command = [ 'clone' ] switchToBranch = False if self . supportsBranch and self . branch != 'HEAD' : if self . branch . startswith ( 'refs/' ) : switchToBranch = True command += [ '--no-checkout' ] else : command += [ '--branch' , self . branch ] if shallowClone : command += [ '--depth' , str ( int ( shallowClone ) ) ] if self . reference : command += [ '--reference' , self . reference ] if self . origin : command += [ '--origin' , self . origin ] command += [ self . repourl , '.' ] if self . prog : command . append ( '--progress' ) if self . retry : abandonOnFailure = ( self . retry [ 1 ] <= 0 ) else : abandonOnFailure = True res = yield self . _dovccmd ( command , abandonOnFailure = ( abandonOnFailure and shallowClone ) ) if switchToBranch : res = yield self . _fetch ( None ) done = self . stopped or res == RC_SUCCESS if self . retry and not done : delay , repeats = self . retry if repeats > 0 : log . msg ( "Checkout failed, trying %d more times after %d seconds" % ( repeats , delay ) ) self . retry = ( delay , repeats - 1 ) df = defer . Deferred ( ) df . addCallback ( lambda _ : self . _doClobber ( ) ) df . addCallback ( lambda _ : self . _clone ( shallowClone ) ) reactor . callLater ( delay , df . callback , None ) res = yield df return res
Retry if clone failed