forked from gitea/gitea
1
0
Fork 0

An attempt to sync a non-mirror repo must give 400 (Bad Request) (#19300)

* An attempt to sync a non-mirror repo must give 400 (Bad Request)

* add missing return statement

Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
Peter Gardfjäll 2022-04-01 20:29:57 +02:00 committed by GitHub
parent 4f27c28947
commit 43ff92e122
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 0 deletions

View File

@ -405,6 +405,27 @@ func testAPIRepoMigrateConflict(t *testing.T, u *url.URL) {
}) })
} }
// mirror-sync must fail with "400 (Bad Request)" when an attempt is made to
// sync a non-mirror repository.
func TestAPIMirrorSyncNonMirrorRepo(t *testing.T) {
defer prepareTestEnv(t)()
session := loginUser(t, "user2")
token := getTokenForLoggedInUser(t, session)
var repo api.Repository
req := NewRequest(t, "GET", "/api/v1/repos/user2/repo1")
resp := MakeRequest(t, req, http.StatusOK)
DecodeJSON(t, resp, &repo)
assert.EqualValues(t, false, repo.Mirror)
req = NewRequestf(t, "POST", "/api/v1/repos/user2/repo1/mirror-sync?token=%s", token)
resp = session.MakeRequest(t, req, http.StatusBadRequest)
errRespJSON := map[string]string{}
DecodeJSON(t, resp, &errRespJSON)
assert.Equal(t, "Repository is not a mirror", errRespJSON["message"])
}
func TestAPIOrgRepoCreate(t *testing.T) { func TestAPIOrgRepoCreate(t *testing.T) {
testCases := []struct { testCases := []struct {
ctxUserID int64 ctxUserID int64

View File

@ -5,8 +5,10 @@
package repo package repo
import ( import (
"errors"
"net/http" "net/http"
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unit" "code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
@ -48,6 +50,15 @@ func MirrorSync(ctx *context.APIContext) {
return return
} }
if _, err := repo_model.GetMirrorByRepoID(repo.ID); err != nil {
if errors.Is(err, repo_model.ErrMirrorNotExist) {
ctx.Error(http.StatusBadRequest, "MirrorSync", "Repository is not a mirror")
return
}
ctx.Error(http.StatusInternalServerError, "MirrorSync", err)
return
}
mirror_service.StartToMirror(repo.ID) mirror_service.StartToMirror(repo.ID)
ctx.Status(http.StatusOK) ctx.Status(http.StatusOK)