Skip to content

Commit a645049

Browse files
authored
Fix unclear IsRepositoryExist logic (#24374)
There was only one `IsRepositoryExist` function, it did: `has && isDir` However it's not right, and it would cause 500 error when creating a new repository if the dir exists. Then, it was changed to `has || isDir`, it is still incorrect, it affects the "adopt repo" logic. To make the logic clear: * IsRepositoryModelOrDirExist * IsRepositoryModelExist
1 parent 572af21 commit a645049

File tree

8 files changed

+20
-16
lines changed

8 files changed

+20
-16
lines changed

models/repo/repo.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -726,19 +726,23 @@ func GetRepositoriesMapByIDs(ids []int64) (map[int64]*Repository, error) {
726726
return repos, db.GetEngine(db.DefaultContext).In("id", ids).Find(&repos)
727727
}
728728

729-
// IsRepositoryExist returns true if the repository with given name under user has already existed.
730-
func IsRepositoryExist(ctx context.Context, u *user_model.User, repoName string) (bool, error) {
731-
has, err := db.GetEngine(ctx).Get(&Repository{
732-
OwnerID: u.ID,
733-
LowerName: strings.ToLower(repoName),
734-
})
729+
// IsRepositoryModelOrDirExist returns true if the repository with given name under user has already existed.
730+
func IsRepositoryModelOrDirExist(ctx context.Context, u *user_model.User, repoName string) (bool, error) {
731+
has, err := IsRepositoryModelExist(ctx, u, repoName)
735732
if err != nil {
736733
return false, err
737734
}
738735
isDir, err := util.IsDir(RepoPath(u.Name, repoName))
739736
return has || isDir, err
740737
}
741738

739+
func IsRepositoryModelExist(ctx context.Context, u *user_model.User, repoName string) (bool, error) {
740+
return db.GetEngine(ctx).Get(&Repository{
741+
OwnerID: u.ID,
742+
LowerName: strings.ToLower(repoName),
743+
})
744+
}
745+
742746
// GetTemplateRepo populates repo.TemplateRepo for a generated repository and
743747
// returns an error on failure (NOTE: no error is returned for
744748
// non-generated repositories, and TemplateRepo will be left untouched)

models/repo/update.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func CheckCreateRepository(doer, u *user_model.User, name string, overwriteOrAdo
116116
return err
117117
}
118118

119-
has, err := IsRepositoryExist(db.DefaultContext, u, name)
119+
has, err := IsRepositoryModelOrDirExist(db.DefaultContext, u, name)
120120
if err != nil {
121121
return fmt.Errorf("IsRepositoryExist: %w", err)
122122
} else if has {
@@ -147,7 +147,7 @@ func ChangeRepositoryName(doer *user_model.User, repo *Repository, newRepoName s
147147
return err
148148
}
149149

150-
has, err := IsRepositoryExist(db.DefaultContext, repo.Owner, newRepoName)
150+
has, err := IsRepositoryModelOrDirExist(db.DefaultContext, repo.Owner, newRepoName)
151151
if err != nil {
152152
return fmt.Errorf("IsRepositoryExist: %w", err)
153153
} else if has {

models/repo_transfer.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ func CreatePendingRepositoryTransfer(ctx context.Context, doer, newOwner *user_m
172172
}
173173

174174
// Check if new owner has repository with same name.
175-
if has, err := repo_model.IsRepositoryExist(ctx, newOwner, repo.Name); err != nil {
175+
if has, err := repo_model.IsRepositoryModelExist(ctx, newOwner, repo.Name); err != nil {
176176
return fmt.Errorf("IsRepositoryExist: %w", err)
177177
} else if has {
178178
return repo_model.ErrRepoAlreadyExist{
@@ -249,7 +249,7 @@ func TransferOwnership(doer *user_model.User, newOwnerName string, repo *repo_mo
249249
newOwnerName = newOwner.Name // ensure capitalisation matches
250250

251251
// Check if new owner has repository with same name.
252-
if has, err := repo_model.IsRepositoryExist(ctx, newOwner, repo.Name); err != nil {
252+
if has, err := repo_model.IsRepositoryModelOrDirExist(ctx, newOwner, repo.Name); err != nil {
253253
return fmt.Errorf("IsRepositoryExist: %w", err)
254254
} else if has {
255255
return repo_model.ErrRepoAlreadyExist{

modules/repository/create.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func CreateRepositoryByExample(ctx context.Context, doer, u *user_model.User, re
3535
return err
3636
}
3737

38-
has, err := repo_model.IsRepositoryExist(ctx, u, repo.Name)
38+
has, err := repo_model.IsRepositoryModelExist(ctx, u, repo.Name)
3939
if err != nil {
4040
return fmt.Errorf("IsRepositoryExist: %w", err)
4141
} else if has {

routers/api/v1/admin/adopt.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func AdoptRepository(ctx *context.APIContext) {
9595
}
9696

9797
// check not a repo
98-
has, err := repo_model.IsRepositoryExist(ctx, ctxUser, repoName)
98+
has, err := repo_model.IsRepositoryModelExist(ctx, ctxUser, repoName)
9999
if err != nil {
100100
ctx.InternalServerError(err)
101101
return
@@ -157,7 +157,7 @@ func DeleteUnadoptedRepository(ctx *context.APIContext) {
157157
}
158158

159159
// check not a repo
160-
has, err := repo_model.IsRepositoryExist(ctx, ctxUser, repoName)
160+
has, err := repo_model.IsRepositoryModelExist(ctx, ctxUser, repoName)
161161
if err != nil {
162162
ctx.InternalServerError(err)
163163
return

routers/web/admin/repos.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func AdoptOrDeleteRepository(ctx *context.Context) {
133133
repoName := dirSplit[1]
134134

135135
// check not a repo
136-
has, err := repo_model.IsRepositoryExist(ctx, ctxUser, repoName)
136+
has, err := repo_model.IsRepositoryModelExist(ctx, ctxUser, repoName)
137137
if err != nil {
138138
ctx.ServerError("IsRepositoryExist", err)
139139
return

routers/web/user/setting/adopt.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func AdoptOrDeleteRepository(ctx *context.Context) {
3131
root := user_model.UserPath(ctxUser.LowerName)
3232

3333
// check not a repo
34-
has, err := repo_model.IsRepositoryExist(ctx, ctxUser, dir)
34+
has, err := repo_model.IsRepositoryModelExist(ctx, ctxUser, dir)
3535
if err != nil {
3636
ctx.ServerError("IsRepositoryExist", err)
3737
return

services/repository/adopt.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ func DeleteUnadoptedRepository(ctx context.Context, doer, u *user_model.User, re
206206
}
207207
}
208208

209-
if exist, err := repo_model.IsRepositoryExist(ctx, u, repoName); err != nil {
209+
if exist, err := repo_model.IsRepositoryModelExist(ctx, u, repoName); err != nil {
210210
return err
211211
} else if exist {
212212
return repo_model.ErrRepoAlreadyExist{

0 commit comments

Comments
 (0)