repos.go 1000 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. // Copyright 2020 The Gogs Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package db
  5. import (
  6. "strings"
  7. "github.com/jinzhu/gorm"
  8. )
  9. // ReposStore is the persistent interface for repositories.
  10. //
  11. // NOTE: All methods are sorted in alphabetical order.
  12. type ReposStore interface {
  13. // GetByName returns the repository with given owner and name.
  14. // It returns ErrRepoNotExist when not found.
  15. GetByName(ownerID int64, name string) (*Repository, error)
  16. }
  17. var Repos ReposStore
  18. type repos struct {
  19. *gorm.DB
  20. }
  21. func (db *repos) GetByName(ownerID int64, name string) (*Repository, error) {
  22. repo := new(Repository)
  23. err := db.Where("owner_id = ? AND lower_name = ?", ownerID, strings.ToLower(name)).First(repo).Error
  24. if err != nil {
  25. if gorm.IsRecordNotFoundError(err) {
  26. return nil, ErrRepoNotExist{args: map[string]interface{}{"ownerID": ownerID, "name": name}}
  27. }
  28. return nil, err
  29. }
  30. return repo, nil
  31. }