docs: 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