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_archiver.go 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // Copyright 2021 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. "context"
  7. "fmt"
  8. "code.gitea.io/gitea/models/db"
  9. "code.gitea.io/gitea/modules/git"
  10. "code.gitea.io/gitea/modules/timeutil"
  11. )
  12. // RepoArchiverStatus represents repo archive status
  13. type RepoArchiverStatus int
  14. // enumerate all repo archive statuses
  15. const (
  16. RepoArchiverGenerating = iota // the archiver is generating
  17. RepoArchiverReady // it's ready
  18. )
  19. // RepoArchiver represents all archivers
  20. type RepoArchiver struct {
  21. ID int64 `xorm:"pk autoincr"`
  22. RepoID int64 `xorm:"index unique(s)"`
  23. Repo *Repository `xorm:"-"`
  24. Type git.ArchiveType `xorm:"unique(s)"`
  25. Status RepoArchiverStatus
  26. CommitID string `xorm:"VARCHAR(40) unique(s)"`
  27. CreatedUnix timeutil.TimeStamp `xorm:"INDEX NOT NULL created"`
  28. }
  29. func init() {
  30. db.RegisterModel(new(RepoArchiver))
  31. }
  32. // LoadRepo loads repository
  33. func (archiver *RepoArchiver) LoadRepo() (*Repository, error) {
  34. if archiver.Repo != nil {
  35. return archiver.Repo, nil
  36. }
  37. var repo Repository
  38. has, err := db.GetEngine(db.DefaultContext).ID(archiver.RepoID).Get(&repo)
  39. if err != nil {
  40. return nil, err
  41. }
  42. if !has {
  43. return nil, ErrRepoNotExist{
  44. ID: archiver.RepoID,
  45. }
  46. }
  47. return &repo, nil
  48. }
  49. // RelativePath returns relative path
  50. func (archiver *RepoArchiver) RelativePath() (string, error) {
  51. return fmt.Sprintf("%d/%s/%s.%s", archiver.RepoID, archiver.CommitID[:2], archiver.CommitID, archiver.Type.String()), nil
  52. }
  53. // GetRepoArchiver get an archiver
  54. func GetRepoArchiver(ctx context.Context, repoID int64, tp git.ArchiveType, commitID string) (*RepoArchiver, error) {
  55. var archiver RepoArchiver
  56. has, err := db.GetEngine(ctx).Where("repo_id=?", repoID).And("`type`=?", tp).And("commit_id=?", commitID).Get(&archiver)
  57. if err != nil {
  58. return nil, err
  59. }
  60. if has {
  61. return &archiver, nil
  62. }
  63. return nil, nil
  64. }
  65. // AddRepoArchiver adds an archiver
  66. func AddRepoArchiver(ctx context.Context, archiver *RepoArchiver) error {
  67. _, err := db.GetEngine(ctx).Insert(archiver)
  68. return err
  69. }
  70. // UpdateRepoArchiverStatus updates archiver's status
  71. func UpdateRepoArchiverStatus(ctx context.Context, archiver *RepoArchiver) error {
  72. _, err := db.GetEngine(ctx).ID(archiver.ID).Cols("status").Update(archiver)
  73. return err
  74. }
  75. // DeleteAllRepoArchives deletes all repo archives records
  76. func DeleteAllRepoArchives() error {
  77. _, err := db.GetEngine(db.DefaultContext).Where("1=1").Delete(new(RepoArchiver))
  78. return err
  79. }