code: func (s *CredentialHelpers) Fill(what Creds) (Creds, error) {
  	errs := make([]string, 0, len(s.helpers))
  	for i, h := range s.helpers {
  		if s.skipped(i) {
  			continue
  		}
  
  		creds, err := h.Fill(what)
  		if err != nil {
  			if err != credHelperNoOp {
  				s.skip(i)
  				tracerx.Printf("credential fill error: %s", err)
  				errs = append(errs, err.Error())
  			}
  			continue
  		}
  
  		if creds != nil {
  			return creds, nil
  		}
  	}
  
  	if len(errs) > 0 {
  		return nil, errors.New("credential fill errors:\n" + strings.Join(errs, "\n"))
  	}
  
  	return nil, nil
  }
docs: // Fill implements CredentialHelper.Fill by asking each CredentialHelper in
  // order to fill the credentials.
  //
  // If a fill was successful, it is returned immediately, and no other
  // `CredentialHelper`s are consulted. If any CredentialHelper returns an error,
  // it is reported to tracerx, and the next one is attempted. If they all error,
  // then a collection of all the error messages is returned. Erroring credential
  // helpers are added to the skip list, and never attempted again for the
  // lifetime of the current Git LFS command.