Skip to content

Commit 824fac3

Browse files
committed
Move some errors to their own sub packages
1 parent f9f62b4 commit 824fac3

File tree

20 files changed

+124
-125
lines changed

20 files changed

+124
-125
lines changed

models/error.go

Lines changed: 0 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -12,66 +12,6 @@ import (
1212
"code.gitea.io/gitea/modules/util"
1313
)
1414

15-
// ErrUserOwnRepos represents a "UserOwnRepos" kind of error.
16-
type ErrUserOwnRepos struct {
17-
UID int64
18-
}
19-
20-
// IsErrUserOwnRepos checks if an error is a ErrUserOwnRepos.
21-
func IsErrUserOwnRepos(err error) bool {
22-
_, ok := err.(ErrUserOwnRepos)
23-
return ok
24-
}
25-
26-
func (err ErrUserOwnRepos) Error() string {
27-
return fmt.Sprintf("user still has ownership of repositories [uid: %d]", err.UID)
28-
}
29-
30-
// ErrUserHasOrgs represents a "UserHasOrgs" kind of error.
31-
type ErrUserHasOrgs struct {
32-
UID int64
33-
}
34-
35-
// IsErrUserHasOrgs checks if an error is a ErrUserHasOrgs.
36-
func IsErrUserHasOrgs(err error) bool {
37-
_, ok := err.(ErrUserHasOrgs)
38-
return ok
39-
}
40-
41-
func (err ErrUserHasOrgs) Error() string {
42-
return fmt.Sprintf("user still has membership of organizations [uid: %d]", err.UID)
43-
}
44-
45-
// ErrUserOwnPackages notifies that the user (still) owns the packages.
46-
type ErrUserOwnPackages struct {
47-
UID int64
48-
}
49-
50-
// IsErrUserOwnPackages checks if an error is an ErrUserOwnPackages.
51-
func IsErrUserOwnPackages(err error) bool {
52-
_, ok := err.(ErrUserOwnPackages)
53-
return ok
54-
}
55-
56-
func (err ErrUserOwnPackages) Error() string {
57-
return fmt.Sprintf("user still has ownership of packages [uid: %d]", err.UID)
58-
}
59-
60-
// ErrDeleteLastAdminUser represents a "DeleteLastAdminUser" kind of error.
61-
type ErrDeleteLastAdminUser struct {
62-
UID int64
63-
}
64-
65-
// IsErrDeleteLastAdminUser checks if an error is a ErrDeleteLastAdminUser.
66-
func IsErrDeleteLastAdminUser(err error) bool {
67-
_, ok := err.(ErrDeleteLastAdminUser)
68-
return ok
69-
}
70-
71-
func (err ErrDeleteLastAdminUser) Error() string {
72-
return fmt.Sprintf("can not delete the last admin user [uid: %d]", err.UID)
73-
}
74-
7515
// ErrInvalidCloneAddr represents a "InvalidCloneAddr" kind of error.
7616
type ErrInvalidCloneAddr struct {
7717
Host string
@@ -205,25 +145,6 @@ func (err ErrRepoFileDoesNotExist) Unwrap() error {
205145
return util.ErrNotExist
206146
}
207147

208-
// ErrFilenameInvalid represents a "FilenameInvalid" kind of error.
209-
type ErrFilenameInvalid struct {
210-
Path string
211-
}
212-
213-
// IsErrFilenameInvalid checks if an error is an ErrFilenameInvalid.
214-
func IsErrFilenameInvalid(err error) bool {
215-
_, ok := err.(ErrFilenameInvalid)
216-
return ok
217-
}
218-
219-
func (err ErrFilenameInvalid) Error() string {
220-
return fmt.Sprintf("path contains a malformed path component [path: %s]", err.Path)
221-
}
222-
223-
func (err ErrFilenameInvalid) Unwrap() error {
224-
return util.ErrInvalidArgument
225-
}
226-
227148
// ErrUserCannotCommit represents "UserCannotCommit" kind of error.
228149
type ErrUserCannotCommit struct {
229150
UserName string

models/organization/org_user.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,21 @@ func init() {
3636
db.RegisterModel(new(OrgUser))
3737
}
3838

39+
// ErrUserHasOrgs represents a "UserHasOrgs" kind of error.
40+
type ErrUserHasOrgs struct {
41+
UID int64
42+
}
43+
44+
// IsErrUserHasOrgs checks if an error is a ErrUserHasOrgs.
45+
func IsErrUserHasOrgs(err error) bool {
46+
_, ok := err.(ErrUserHasOrgs)
47+
return ok
48+
}
49+
50+
func (err ErrUserHasOrgs) Error() string {
51+
return fmt.Sprintf("user still has membership of organizations [uid: %d]", err.UID)
52+
}
53+
3954
// GetOrganizationCount returns count of membership of organization of the user.
4055
func GetOrganizationCount(ctx context.Context, u *user_model.User) (int64, error) {
4156
return db.GetEngine(ctx).

models/packages/package.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,21 @@ func FindUnreferencedPackages(ctx context.Context) ([]*Package, error) {
301301
Find(&ps)
302302
}
303303

304+
// ErrUserOwnPackages notifies that the user (still) owns the packages.
305+
type ErrUserOwnPackages struct {
306+
UID int64
307+
}
308+
309+
// IsErrUserOwnPackages checks if an error is an ErrUserOwnPackages.
310+
func IsErrUserOwnPackages(err error) bool {
311+
_, ok := err.(ErrUserOwnPackages)
312+
return ok
313+
}
314+
315+
func (err ErrUserOwnPackages) Error() string {
316+
return fmt.Sprintf("user still has ownership of packages [uid: %d]", err.UID)
317+
}
318+
304319
// HasOwnerPackages tests if a user/org has accessible packages
305320
func HasOwnerPackages(ctx context.Context, ownerID int64) (bool, error) {
306321
return db.GetEngine(ctx).

models/repo/repo.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,21 @@ func (repo *Repository) TemplateRepo(ctx context.Context) *Repository {
866866
return repo
867867
}
868868

869+
// ErrUserOwnRepos represents a "UserOwnRepos" kind of error.
870+
type ErrUserOwnRepos struct {
871+
UID int64
872+
}
873+
874+
// IsErrUserOwnRepos checks if an error is a ErrUserOwnRepos.
875+
func IsErrUserOwnRepos(err error) bool {
876+
_, ok := err.(ErrUserOwnRepos)
877+
return ok
878+
}
879+
880+
func (err ErrUserOwnRepos) Error() string {
881+
return fmt.Sprintf("user still has ownership of repositories [uid: %d]", err.UID)
882+
}
883+
869884
type CountRepositoryOptions struct {
870885
OwnerID int64
871886
Private optional.Option[bool]

models/user/user.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,21 @@ func createUser(ctx context.Context, u *User, meta *Meta, createdByAdmin bool, o
788788
return committer.Commit()
789789
}
790790

791+
// ErrDeleteLastAdminUser represents a "DeleteLastAdminUser" kind of error.
792+
type ErrDeleteLastAdminUser struct {
793+
UID int64
794+
}
795+
796+
// IsErrDeleteLastAdminUser checks if an error is a ErrDeleteLastAdminUser.
797+
func IsErrDeleteLastAdminUser(err error) bool {
798+
_, ok := err.(ErrDeleteLastAdminUser)
799+
return ok
800+
}
801+
802+
func (err ErrDeleteLastAdminUser) Error() string {
803+
return fmt.Sprintf("can not delete the last admin user [uid: %d]", err.UID)
804+
}
805+
791806
// IsLastAdminUser check whether user is the last admin
792807
func IsLastAdminUser(ctx context.Context, user *User) bool {
793808
if user.IsAdmin && CountUsers(ctx, &CountUserFilter{IsAdmin: optional.Some(true)}) <= 1 {

routers/api/v1/admin/user.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ import (
99
"fmt"
1010
"net/http"
1111

12-
"code.gitea.io/gitea/models"
1312
asymkey_model "code.gitea.io/gitea/models/asymkey"
1413
"code.gitea.io/gitea/models/auth"
1514
"code.gitea.io/gitea/models/db"
15+
org_model "code.gitea.io/gitea/models/organization"
16+
packages_model "code.gitea.io/gitea/models/packages"
17+
repo_model "code.gitea.io/gitea/models/repo"
1618
user_model "code.gitea.io/gitea/models/user"
1719
"code.gitea.io/gitea/modules/auth/password"
1820
"code.gitea.io/gitea/modules/log"
@@ -247,7 +249,7 @@ func EditUser(ctx *context.APIContext) {
247249
}
248250

249251
if err := user_service.UpdateUser(ctx, ctx.ContextUser, opts); err != nil {
250-
if models.IsErrDeleteLastAdminUser(err) {
252+
if user_model.IsErrDeleteLastAdminUser(err) {
251253
ctx.Error(http.StatusBadRequest, "LastAdmin", err)
252254
} else {
253255
ctx.Error(http.StatusInternalServerError, "UpdateUser", err)
@@ -299,10 +301,10 @@ func DeleteUser(ctx *context.APIContext) {
299301
}
300302

301303
if err := user_service.DeleteUser(ctx, ctx.ContextUser, ctx.FormBool("purge")); err != nil {
302-
if models.IsErrUserOwnRepos(err) ||
303-
models.IsErrUserHasOrgs(err) ||
304-
models.IsErrUserOwnPackages(err) ||
305-
models.IsErrDeleteLastAdminUser(err) {
304+
if repo_model.IsErrUserOwnRepos(err) ||
305+
org_model.IsErrUserHasOrgs(err) ||
306+
packages_model.IsErrUserOwnPackages(err) ||
307+
user_model.IsErrDeleteLastAdminUser(err) {
306308
ctx.Error(http.StatusUnprocessableEntity, "", err)
307309
} else {
308310
ctx.Error(http.StatusInternalServerError, "DeleteUser", err)

routers/api/v1/repo/file.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -740,7 +740,7 @@ func handleCreateOrUpdateFileError(ctx *context.APIContext, err error) {
740740
ctx.Error(http.StatusForbidden, "Access", err)
741741
return
742742
}
743-
if git_model.IsErrBranchAlreadyExists(err) || models.IsErrFilenameInvalid(err) || models.IsErrSHADoesNotMatch(err) ||
743+
if git_model.IsErrBranchAlreadyExists(err) || files_service.IsErrFilenameInvalid(err) || models.IsErrSHADoesNotMatch(err) ||
744744
models.IsErrFilePathInvalid(err) || models.IsErrRepoFileAlreadyExists(err) {
745745
ctx.Error(http.StatusUnprocessableEntity, "Invalid", err)
746746
return
@@ -891,7 +891,7 @@ func DeleteFile(ctx *context.APIContext) {
891891
ctx.Error(http.StatusNotFound, "DeleteFile", err)
892892
return
893893
} else if git_model.IsErrBranchAlreadyExists(err) ||
894-
models.IsErrFilenameInvalid(err) ||
894+
files_service.IsErrFilenameInvalid(err) ||
895895
models.IsErrSHADoesNotMatch(err) ||
896896
models.IsErrCommitIDDoesNotMatch(err) ||
897897
models.IsErrSHAOrCommitIDNotProvided(err) {

routers/api/v1/repo/patch.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func ApplyDiffPatch(ctx *context.APIContext) {
9696
ctx.Error(http.StatusForbidden, "Access", err)
9797
return
9898
}
99-
if git_model.IsErrBranchAlreadyExists(err) || models.IsErrFilenameInvalid(err) || models.IsErrSHADoesNotMatch(err) ||
99+
if git_model.IsErrBranchAlreadyExists(err) || files.IsErrFilenameInvalid(err) || models.IsErrSHADoesNotMatch(err) ||
100100
models.IsErrFilePathInvalid(err) || models.IsErrRepoFileAlreadyExists(err) {
101101
ctx.Error(http.StatusUnprocessableEntity, "Invalid", err)
102102
return

routers/web/admin/users.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ import (
1111
"strconv"
1212
"strings"
1313

14-
"code.gitea.io/gitea/models"
1514
"code.gitea.io/gitea/models/auth"
1615
"code.gitea.io/gitea/models/db"
1716
org_model "code.gitea.io/gitea/models/organization"
17+
packages_model "code.gitea.io/gitea/models/packages"
1818
repo_model "code.gitea.io/gitea/models/repo"
1919
user_model "code.gitea.io/gitea/models/user"
2020
"code.gitea.io/gitea/modules/auth/password"
@@ -446,7 +446,7 @@ func EditUserPost(ctx *context.Context) {
446446
}
447447

448448
if err := user_service.UpdateUser(ctx, u, opts); err != nil {
449-
if models.IsErrDeleteLastAdminUser(err) {
449+
if user_model.IsErrDeleteLastAdminUser(err) {
450450
ctx.RenderWithErr(ctx.Tr("auth.last_admin"), tplUserEdit, &form)
451451
} else {
452452
ctx.ServerError("UpdateUser", err)
@@ -501,16 +501,16 @@ func DeleteUser(ctx *context.Context) {
501501

502502
if err = user_service.DeleteUser(ctx, u, ctx.FormBool("purge")); err != nil {
503503
switch {
504-
case models.IsErrUserOwnRepos(err):
504+
case repo_model.IsErrUserOwnRepos(err):
505505
ctx.Flash.Error(ctx.Tr("admin.users.still_own_repo"))
506506
ctx.Redirect(setting.AppSubURL + "/-/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
507-
case models.IsErrUserHasOrgs(err):
507+
case org_model.IsErrUserHasOrgs(err):
508508
ctx.Flash.Error(ctx.Tr("admin.users.still_has_org"))
509509
ctx.Redirect(setting.AppSubURL + "/-/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
510-
case models.IsErrUserOwnPackages(err):
510+
case packages_model.IsErrUserOwnPackages(err):
511511
ctx.Flash.Error(ctx.Tr("admin.users.still_own_packages"))
512512
ctx.Redirect(setting.AppSubURL + "/-/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
513-
case models.IsErrDeleteLastAdminUser(err):
513+
case user_model.IsErrDeleteLastAdminUser(err):
514514
ctx.Flash.Error(ctx.Tr("auth.last_admin"))
515515
ctx.Redirect(setting.AppSubURL + "/-/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
516516
default:

routers/web/org/setting.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import (
88
"net/http"
99
"net/url"
1010

11-
"code.gitea.io/gitea/models"
1211
"code.gitea.io/gitea/models/db"
12+
packages_model "code.gitea.io/gitea/models/packages"
1313
repo_model "code.gitea.io/gitea/models/repo"
1414
user_model "code.gitea.io/gitea/models/user"
1515
"code.gitea.io/gitea/models/webhook"
@@ -178,10 +178,10 @@ func SettingsDelete(ctx *context.Context) {
178178
}
179179

180180
if err := org_service.DeleteOrganization(ctx, ctx.Org.Organization, false); err != nil {
181-
if models.IsErrUserOwnRepos(err) {
181+
if repo_model.IsErrUserOwnRepos(err) {
182182
ctx.Flash.Error(ctx.Tr("form.org_still_own_repo"))
183183
ctx.Redirect(ctx.Org.OrgLink + "/settings/delete")
184-
} else if models.IsErrUserOwnPackages(err) {
184+
} else if packages_model.IsErrUserOwnPackages(err) {
185185
ctx.Flash.Error(ctx.Tr("form.org_still_own_packages"))
186186
ctx.Redirect(ctx.Org.OrgLink + "/settings/delete")
187187
} else {

routers/web/repo/editor.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ func editFilePost(ctx *context.Context, form forms.EditRepoFileForm, isNewFile b
303303
} else if git_model.IsErrLFSFileLocked(err) {
304304
ctx.Data["Err_TreePath"] = true
305305
ctx.RenderWithErr(ctx.Tr("repo.editor.upload_file_is_locked", err.(git_model.ErrLFSFileLocked).Path, err.(git_model.ErrLFSFileLocked).UserName), tplEditFile, &form)
306-
} else if models.IsErrFilenameInvalid(err) {
306+
} else if files_service.IsErrFilenameInvalid(err) {
307307
ctx.Data["Err_TreePath"] = true
308308
ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_invalid", form.TreePath), tplEditFile, &form)
309309
} else if models.IsErrFilePathInvalid(err) {
@@ -508,7 +508,7 @@ func DeleteFilePost(ctx *context.Context) {
508508
// This is where we handle all the errors thrown by repofiles.DeleteRepoFile
509509
if git.IsErrNotExist(err) || models.IsErrRepoFileDoesNotExist(err) {
510510
ctx.RenderWithErr(ctx.Tr("repo.editor.file_deleting_no_longer_exists", ctx.Repo.TreePath), tplDeleteFile, &form)
511-
} else if models.IsErrFilenameInvalid(err) {
511+
} else if files_service.IsErrFilenameInvalid(err) {
512512
ctx.Data["Err_TreePath"] = true
513513
ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_invalid", ctx.Repo.TreePath), tplDeleteFile, &form)
514514
} else if models.IsErrFilePathInvalid(err) {
@@ -715,7 +715,7 @@ func UploadFilePost(ctx *context.Context) {
715715
if git_model.IsErrLFSFileLocked(err) {
716716
ctx.Data["Err_TreePath"] = true
717717
ctx.RenderWithErr(ctx.Tr("repo.editor.upload_file_is_locked", err.(git_model.ErrLFSFileLocked).Path, err.(git_model.ErrLFSFileLocked).UserName), tplUploadFile, &form)
718-
} else if models.IsErrFilenameInvalid(err) {
718+
} else if files_service.IsErrFilenameInvalid(err) {
719719
ctx.Data["Err_TreePath"] = true
720720
ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_invalid", form.TreePath), tplUploadFile, &form)
721721
} else if models.IsErrFilePathInvalid(err) {

routers/web/user/setting/account.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import (
1010
"net/http"
1111
"time"
1212

13-
"code.gitea.io/gitea/models"
13+
org_model "code.gitea.io/gitea/models/organization"
14+
packages_model "code.gitea.io/gitea/models/packages"
15+
repo_model "code.gitea.io/gitea/models/repo"
1416
user_model "code.gitea.io/gitea/models/user"
1517
"code.gitea.io/gitea/modules/auth/password"
1618
"code.gitea.io/gitea/modules/base"
@@ -301,16 +303,16 @@ func DeleteAccount(ctx *context.Context) {
301303

302304
if err := user.DeleteUser(ctx, ctx.Doer, false); err != nil {
303305
switch {
304-
case models.IsErrUserOwnRepos(err):
306+
case repo_model.IsErrUserOwnRepos(err):
305307
ctx.Flash.Error(ctx.Tr("form.still_own_repo"))
306308
ctx.Redirect(setting.AppSubURL + "/user/settings/account")
307-
case models.IsErrUserHasOrgs(err):
309+
case org_model.IsErrUserHasOrgs(err):
308310
ctx.Flash.Error(ctx.Tr("form.still_has_org"))
309311
ctx.Redirect(setting.AppSubURL + "/user/settings/account")
310-
case models.IsErrUserOwnPackages(err):
312+
case packages_model.IsErrUserOwnPackages(err):
311313
ctx.Flash.Error(ctx.Tr("form.still_own_packages"))
312314
ctx.Redirect(setting.AppSubURL + "/user/settings/account")
313-
case models.IsErrDeleteLastAdminUser(err):
315+
case user_model.IsErrDeleteLastAdminUser(err):
314316
ctx.Flash.Error(ctx.Tr("auth.last_admin"))
315317
ctx.Redirect(setting.AppSubURL + "/user/settings/account")
316318
default:

services/org/org.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"context"
88
"fmt"
99

10-
"code.gitea.io/gitea/models"
1110
actions_model "code.gitea.io/gitea/models/actions"
1211
"code.gitea.io/gitea/models/db"
1312
org_model "code.gitea.io/gitea/models/organization"
@@ -67,14 +66,14 @@ func DeleteOrganization(ctx context.Context, org *org_model.Organization, purge
6766
if err != nil {
6867
return fmt.Errorf("GetRepositoryCount: %w", err)
6968
} else if count > 0 {
70-
return models.ErrUserOwnRepos{UID: org.ID}
69+
return repo_model.ErrUserOwnRepos{UID: org.ID}
7170
}
7271

7372
// Check ownership of packages.
7473
if ownsPackages, err := packages_model.HasOwnerPackages(ctx, org.ID); err != nil {
7574
return fmt.Errorf("HasOwnerPackages: %w", err)
7675
} else if ownsPackages {
77-
return models.ErrUserOwnPackages{UID: org.ID}
76+
return packages_model.ErrUserOwnPackages{UID: org.ID}
7877
}
7978

8079
if err := deleteOrganization(ctx, org); err != nil {

0 commit comments

Comments
 (0)