mirror of https://github.com/go-gitea/gitea.git
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.
115 lines
3.5 KiB
115 lines
3.5 KiB
// Copyright 2021 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package repo |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"time" |
|
|
|
"code.gitea.io/gitea/models/db" |
|
"code.gitea.io/gitea/modules/util" |
|
) |
|
|
|
// UpdateRepositoryOwnerNames updates repository owner_names (this should only be used when the ownerName has changed case) |
|
func UpdateRepositoryOwnerNames(ctx context.Context, ownerID int64, ownerName string) error { |
|
if ownerID == 0 { |
|
return nil |
|
} |
|
|
|
if _, err := db.GetEngine(ctx).Where("owner_id = ?", ownerID).Cols("owner_name").NoAutoTime().Update(&Repository{ |
|
OwnerName: ownerName, |
|
}); err != nil { |
|
return err |
|
} |
|
|
|
return nil |
|
} |
|
|
|
// UpdateRepositoryUpdatedTime updates a repository's updated time |
|
func UpdateRepositoryUpdatedTime(ctx context.Context, repoID int64, updateTime time.Time) error { |
|
_, err := db.GetEngine(ctx).Exec("UPDATE repository SET updated_unix = ? WHERE id = ?", updateTime.Unix(), repoID) |
|
return err |
|
} |
|
|
|
// UpdateRepositoryColsWithAutoTime updates repository's columns and the timestamp fields automatically |
|
func UpdateRepositoryColsWithAutoTime(ctx context.Context, repo *Repository, colName string, moreColNames ...string) error { |
|
_, err := db.GetEngine(ctx).ID(repo.ID).Cols(append([]string{colName}, moreColNames...)...).Update(repo) |
|
return err |
|
} |
|
|
|
// UpdateRepositoryColsNoAutoTime updates repository's columns, doesn't change timestamp field automatically |
|
func UpdateRepositoryColsNoAutoTime(ctx context.Context, repo *Repository, colName string, moreColNames ...string) error { |
|
_, err := db.GetEngine(ctx).ID(repo.ID).Cols(append([]string{colName}, moreColNames...)...).NoAutoTime().Update(repo) |
|
return err |
|
} |
|
|
|
// ErrReachLimitOfRepo represents a "ReachLimitOfRepo" kind of error. |
|
type ErrReachLimitOfRepo struct { |
|
Limit int |
|
} |
|
|
|
// IsErrReachLimitOfRepo checks if an error is a ErrReachLimitOfRepo. |
|
func IsErrReachLimitOfRepo(err error) bool { |
|
_, ok := err.(ErrReachLimitOfRepo) |
|
return ok |
|
} |
|
|
|
func (err ErrReachLimitOfRepo) Error() string { |
|
return fmt.Sprintf("user has reached maximum limit of repositories [limit: %d]", err.Limit) |
|
} |
|
|
|
func (err ErrReachLimitOfRepo) Unwrap() error { |
|
return util.ErrPermissionDenied |
|
} |
|
|
|
// ErrRepoAlreadyExist represents a "RepoAlreadyExist" kind of error. |
|
type ErrRepoAlreadyExist struct { |
|
Uname string |
|
Name string |
|
} |
|
|
|
// IsErrRepoAlreadyExist checks if an error is a ErrRepoAlreadyExist. |
|
func IsErrRepoAlreadyExist(err error) bool { |
|
_, ok := err.(ErrRepoAlreadyExist) |
|
return ok |
|
} |
|
|
|
func (err ErrRepoAlreadyExist) Error() string { |
|
return fmt.Sprintf("repository already exists [uname: %s, name: %s]", err.Uname, err.Name) |
|
} |
|
|
|
func (err ErrRepoAlreadyExist) Unwrap() error { |
|
return util.ErrAlreadyExist |
|
} |
|
|
|
// ErrRepoFilesAlreadyExist represents a "RepoFilesAlreadyExist" kind of error. |
|
type ErrRepoFilesAlreadyExist struct { |
|
Uname string |
|
Name string |
|
} |
|
|
|
// IsErrRepoFilesAlreadyExist checks if an error is a ErrRepoAlreadyExist. |
|
func IsErrRepoFilesAlreadyExist(err error) bool { |
|
_, ok := err.(ErrRepoFilesAlreadyExist) |
|
return ok |
|
} |
|
|
|
func (err ErrRepoFilesAlreadyExist) Error() string { |
|
return fmt.Sprintf("repository files already exist [uname: %s, name: %s]", err.Uname, err.Name) |
|
} |
|
|
|
func (err ErrRepoFilesAlreadyExist) Unwrap() error { |
|
return util.ErrAlreadyExist |
|
} |
|
|
|
// UpdateRepoSize updates the repository size, calculating it using getDirectorySize |
|
func UpdateRepoSize(ctx context.Context, repoID, gitSize, lfsSize int64) error { |
|
_, err := db.GetEngine(ctx).ID(repoID).Cols("size", "git_size", "lfs_size").NoAutoTime().Update(&Repository{ |
|
Size: gitSize + lfsSize, |
|
GitSize: gitSize, |
|
LFSSize: lfsSize, |
|
}) |
|
return err |
|
}
|
|
|