You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

repo_redirect.go 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Copyright 2017 The Gitea 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 models
  5. import (
  6. "strings"
  7. "code.gitea.io/gitea/models/db"
  8. )
  9. // RepoRedirect represents that a repo name should be redirected to another
  10. type RepoRedirect struct {
  11. ID int64 `xorm:"pk autoincr"`
  12. OwnerID int64 `xorm:"UNIQUE(s)"`
  13. LowerName string `xorm:"UNIQUE(s) INDEX NOT NULL"`
  14. RedirectRepoID int64 // repoID to redirect to
  15. }
  16. func init() {
  17. db.RegisterModel(new(RepoRedirect))
  18. }
  19. // LookupRepoRedirect look up if a repository has a redirect name
  20. func LookupRepoRedirect(ownerID int64, repoName string) (int64, error) {
  21. repoName = strings.ToLower(repoName)
  22. redirect := &RepoRedirect{OwnerID: ownerID, LowerName: repoName}
  23. if has, err := db.GetEngine(db.DefaultContext).Get(redirect); err != nil {
  24. return 0, err
  25. } else if !has {
  26. return 0, ErrRepoRedirectNotExist{OwnerID: ownerID, RepoName: repoName}
  27. }
  28. return redirect.RedirectRepoID, nil
  29. }
  30. // newRepoRedirect create a new repo redirect
  31. func newRepoRedirect(e db.Engine, ownerID, repoID int64, oldRepoName, newRepoName string) error {
  32. oldRepoName = strings.ToLower(oldRepoName)
  33. newRepoName = strings.ToLower(newRepoName)
  34. if err := deleteRepoRedirect(e, ownerID, newRepoName); err != nil {
  35. return err
  36. }
  37. if _, err := e.Insert(&RepoRedirect{
  38. OwnerID: ownerID,
  39. LowerName: oldRepoName,
  40. RedirectRepoID: repoID,
  41. }); err != nil {
  42. return err
  43. }
  44. return nil
  45. }
  46. // deleteRepoRedirect delete any redirect from the specified repo name to
  47. // anything else
  48. func deleteRepoRedirect(e db.Engine, ownerID int64, repoName string) error {
  49. repoName = strings.ToLower(repoName)
  50. _, err := e.Delete(&RepoRedirect{OwnerID: ownerID, LowerName: repoName})
  51. return err
  52. }