summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorMohamed Sekour <mohamed.sekour@exfo.com>2022-07-30 18:45:59 +0200
committerGitHub <noreply@github.com>2022-07-30 18:45:59 +0200
commit0e61a74e5a3fc14ff26d1c85065ba336d3f3994b (patch)
tree63282d44a77c410f33595e000d5fef7a9e700a35 /modules
parente819da083734ddbf30afbc62afd48e9d0e8f3d48 (diff)
downloadgitea-0e61a74e5a3fc14ff26d1c85065ba336d3f3994b.tar.gz
gitea-0e61a74e5a3fc14ff26d1c85065ba336d3f3994b.zip
Add new API endpoints for push mirrors management (#19841)
- Add a new push mirror to specific repository - Sync now ( send all the changes to the configured push mirrors ) - Get list of all push mirrors of a repository - Get a push mirror by ID - Delete push mirror by ID Signed-off-by: Mohamed Sekour <mohamed.sekour@exfo.com> Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: zeripath <art27@cantab.net>
Diffstat (limited to 'modules')
-rw-r--r--modules/context/repo.go2
-rw-r--r--modules/convert/mirror.go39
-rw-r--r--modules/structs/mirror.go25
3 files changed, 65 insertions, 1 deletions
diff --git a/modules/context/repo.go b/modules/context/repo.go
index 1d9f98158e..ea40542069 100644
--- a/modules/context/repo.go
+++ b/modules/context/repo.go
@@ -393,7 +393,7 @@ func repoAssignment(ctx *Context, repo *repo_model.Repository) {
}
}
- pushMirrors, err := repo_model.GetPushMirrorsByRepoID(repo.ID)
+ pushMirrors, _, err := repo_model.GetPushMirrorsByRepoID(ctx, repo.ID, db.ListOptions{})
if err != nil {
ctx.ServerError("GetPushMirrorsByRepoID", err)
return
diff --git a/modules/convert/mirror.go b/modules/convert/mirror.go
new file mode 100644
index 0000000000..b2414f4677
--- /dev/null
+++ b/modules/convert/mirror.go
@@ -0,0 +1,39 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package convert
+
+import (
+ repo_model "code.gitea.io/gitea/models/repo"
+ "code.gitea.io/gitea/modules/git"
+ api "code.gitea.io/gitea/modules/structs"
+)
+
+// ToPushMirror convert from repo_model.PushMirror and remoteAddress to api.TopicResponse
+func ToPushMirror(pm *repo_model.PushMirror) (*api.PushMirror, error) {
+ repo := pm.GetRepository()
+ remoteAddress, err := getRemoteAddress(repo, pm.RemoteName)
+ if err != nil {
+ return nil, err
+ }
+ return &api.PushMirror{
+ RepoName: repo.Name,
+ RemoteName: pm.RemoteName,
+ RemoteAddress: remoteAddress,
+ CreatedUnix: pm.CreatedUnix.FormatLong(),
+ LastUpdateUnix: pm.LastUpdateUnix.FormatLong(),
+ LastError: pm.LastError,
+ Interval: pm.Interval.String(),
+ }, nil
+}
+
+func getRemoteAddress(repo *repo_model.Repository, remoteName string) (string, error) {
+ url, err := git.GetRemoteURL(git.DefaultContext, repo.RepoPath(), remoteName)
+ if err != nil {
+ return "", err
+ }
+ // remove confidential information
+ url.User = nil
+ return url.String(), nil
+}
diff --git a/modules/structs/mirror.go b/modules/structs/mirror.go
new file mode 100644
index 0000000000..8e8a8a2705
--- /dev/null
+++ b/modules/structs/mirror.go
@@ -0,0 +1,25 @@
+// Copyright 2021 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package structs
+
+// CreatePushMirrorOption represents need information to create a push mirror of a repository.
+type CreatePushMirrorOption struct {
+ RemoteAddress string `json:"remote_address"`
+ RemoteUsername string `json:"remote_username"`
+ RemotePassword string `json:"remote_password"`
+ Interval string `json:"interval"`
+}
+
+// PushMirror represents information of a push mirror
+// swagger:model
+type PushMirror struct {
+ RepoName string `json:"repo_name"`
+ RemoteName string `json:"remote_name"`
+ RemoteAddress string `json:"remote_address"`
+ CreatedUnix string `json:"created"`
+ LastUpdateUnix string `json:"last_update"`
+ LastError string `json:"last_error"`
+ Interval string `json:"interval"`
+}