From 9dcaf14a148fdf748c41afc7e0aa2e6b3b273fd8 Mon Sep 17 00:00:00 2001
From: Chongyi Zheng <harry@harryzheng.com>
Date: Fri, 30 Dec 2022 06:22:51 -0500
Subject: [PATCH] Add `sync_on_commit` option for push mirrors api (#22271)

Push mirrors `sync_on_commit` option was added to the web interface in
v1.18.0. However, it's not added to the API. This PR updates the API
endpoint.

Fixes #22267

Also, I think this should be backported to 1.18
---
 modules/structs/mirror.go      | 2 ++
 routers/api/v1/repo/mirror.go  | 9 +++++----
 templates/swagger/v1_json.tmpl | 8 ++++++++
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/modules/structs/mirror.go b/modules/structs/mirror.go
index 21e7751f76..55cd133a4f 100644
--- a/modules/structs/mirror.go
+++ b/modules/structs/mirror.go
@@ -9,6 +9,7 @@ type CreatePushMirrorOption struct {
 	RemoteUsername string `json:"remote_username"`
 	RemotePassword string `json:"remote_password"`
 	Interval       string `json:"interval"`
+	SyncOnCommit   bool   `json:"sync_on_commit"`
 }
 
 // PushMirror represents information of a push mirror
@@ -21,4 +22,5 @@ type PushMirror struct {
 	LastUpdateUnix string `json:"last_update"`
 	LastError      string `json:"last_error"`
 	Interval       string `json:"interval"`
+	SyncOnCommit   bool   `json:"sync_on_commit"`
 }
diff --git a/routers/api/v1/repo/mirror.go b/routers/api/v1/repo/mirror.go
index 5fce5a4a80..06bfabe3d2 100644
--- a/routers/api/v1/repo/mirror.go
+++ b/routers/api/v1/repo/mirror.go
@@ -345,10 +345,11 @@ func CreatePushMirror(ctx *context.APIContext, mirrorOption *api.CreatePushMirro
 	}
 
 	pushMirror := &repo_model.PushMirror{
-		RepoID:     repo.ID,
-		Repo:       repo,
-		RemoteName: fmt.Sprintf("remote_mirror_%s", remoteSuffix),
-		Interval:   interval,
+		RepoID:       repo.ID,
+		Repo:         repo,
+		RemoteName:   fmt.Sprintf("remote_mirror_%s", remoteSuffix),
+		Interval:     interval,
+		SyncOnCommit: mirrorOption.SyncOnCommit,
 	}
 
 	if err = repo_model.InsertPushMirror(ctx, pushMirror); err != nil {
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index c86c6744de..c223282596 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -15376,6 +15376,10 @@
         "remote_username": {
           "type": "string",
           "x-go-name": "RemoteUsername"
+        },
+        "sync_on_commit": {
+          "type": "boolean",
+          "x-go-name": "SyncOnCommit"
         }
       },
       "x-go-package": "code.gitea.io/gitea/modules/structs"
@@ -18576,6 +18580,10 @@
         "repo_name": {
           "type": "string",
           "x-go-name": "RepoName"
+        },
+        "sync_on_commit": {
+          "type": "boolean",
+          "x-go-name": "SyncOnCommit"
         }
       },
       "x-go-package": "code.gitea.io/gitea/modules/structs"