summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--models/repo/pushmirror.go6
-rw-r--r--options/locale/locale_en-US.ini2
-rw-r--r--routers/web/repo/setting/setting.go37
-rw-r--r--templates/repo/settings/options.tmpl20
-rw-r--r--templates/repo/settings/push_mirror_sync_modal.tmpl32
5 files changed, 93 insertions, 4 deletions
diff --git a/models/repo/pushmirror.go b/models/repo/pushmirror.go
index f34484f638..dad9a9d388 100644
--- a/models/repo/pushmirror.go
+++ b/models/repo/pushmirror.go
@@ -85,6 +85,12 @@ func UpdatePushMirror(ctx context.Context, m *PushMirror) error {
return err
}
+// UpdatePushMirrorInterval updates the push-mirror
+func UpdatePushMirrorInterval(ctx context.Context, m *PushMirror) error {
+ _, err := db.GetEngine(ctx).ID(m.ID).Cols("interval").Update(m)
+ return err
+}
+
func DeletePushMirrors(ctx context.Context, opts PushMirrorOptions) error {
if opts.RepoID > 0 {
_, err := db.GetEngine(ctx).Where(opts.toConds()).Delete(&PushMirror{})
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 3256d2ba91..6cb830b6d0 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -1966,6 +1966,8 @@ settings.mirror_settings.last_update = Last update
settings.mirror_settings.push_mirror.none = No push mirrors configured
settings.mirror_settings.push_mirror.remote_url = Git Remote Repository URL
settings.mirror_settings.push_mirror.add = Add Push Mirror
+settings.mirror_settings.push_mirror.edit_sync_time = Edit mirror sync interval
+
settings.sync_mirror = Synchronize Now
settings.mirror_sync_in_progress = Mirror synchronization is in progress. Check back in a minute.
settings.site = Website
diff --git a/routers/web/repo/setting/setting.go b/routers/web/repo/setting/setting.go
index b33660ffc9..71c1939f29 100644
--- a/routers/web/repo/setting/setting.go
+++ b/routers/web/repo/setting/setting.go
@@ -299,6 +299,43 @@ func SettingsPost(ctx *context.Context) {
ctx.Flash.Info(ctx.Tr("repo.settings.mirror_sync_in_progress"))
ctx.Redirect(repo.Link() + "/settings")
+ case "push-mirror-update":
+ if !setting.Mirror.Enabled {
+ ctx.NotFound("", nil)
+ return
+ }
+
+ // This section doesn't require repo_name/RepoName to be set in the form, don't show it
+ // as an error on the UI for this action
+ ctx.Data["Err_RepoName"] = nil
+
+ interval, err := time.ParseDuration(form.PushMirrorInterval)
+ if err != nil || (interval != 0 && interval < setting.Mirror.MinInterval) {
+ ctx.RenderWithErr(ctx.Tr("repo.mirror_interval_invalid"), tplSettingsOptions, &forms.RepoSettingForm{})
+ return
+ }
+
+ id, err := strconv.ParseInt(form.PushMirrorID, 10, 64)
+ if err != nil {
+ ctx.ServerError("UpdatePushMirrorIntervalPushMirrorID", err)
+ return
+ }
+ m := &repo_model.PushMirror{
+ ID: id,
+ Interval: interval,
+ }
+ if err := repo_model.UpdatePushMirrorInterval(ctx, m); err != nil {
+ ctx.ServerError("UpdatePushMirrorInterval", err)
+ return
+ }
+ // Background why we are adding it to Queue
+ // If we observed its implementation in the context of `push-mirror-sync` where it
+ // is evident that pushing to the queue is necessary for updates.
+ // So, there are updates within the given interval, it is necessary to update the queue accordingly.
+ mirror_module.AddPushMirrorToQueue(m.ID)
+ ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success"))
+ ctx.Redirect(repo.Link() + "/settings")
+
case "push-mirror-remove":
if !setting.Mirror.Enabled {
ctx.NotFound("", nil)
diff --git a/templates/repo/settings/options.tmpl b/templates/repo/settings/options.tmpl
index f0b030dc54..569a576ce6 100644
--- a/templates/repo/settings/options.tmpl
+++ b/templates/repo/settings/options.tmpl
@@ -203,17 +203,27 @@
<td>{{$.locale.Tr "repo.settings.mirror_settings.direction.push"}}</td>
<td>{{if .LastUpdateUnix}}{{DateTime "full" .LastUpdateUnix}}{{else}}{{$.locale.Tr "never"}}{{end}} {{if .LastError}}<div class="ui red label" data-tooltip-content="{{.LastError}}">{{$.locale.Tr "error"}}</div>{{end}}</td>
<td class="right aligned">
+ <button
+ class="ui tiny button show-modal"
+ data-modal="#push-mirror-edit-modal"
+ data-tooltip-content="{{$.locale.Tr "repo.settings.mirror_settings.push_mirror.edit_sync_time"}}"
+ data-modal-push-mirror-edit-id="{{.ID}}"
+ data-modal-push-mirror-edit-interval="{{.Interval}}"
+ data-modal-push-mirror-edit-address="{{$address.Address}}"
+ >
+ {{svg "octicon-pencil" 14}}
+ </button>
<form method="post" class="gt-dib">
{{$.CsrfTokenHtml}}
- <input type="hidden" name="action" value="push-mirror-remove">
+ <input type="hidden" name="action" value="push-mirror-sync">
<input type="hidden" name="push_mirror_id" value="{{.ID}}">
- <button class="ui basic red tiny button inline text-thin">{{$.locale.Tr "remove"}}</button>
+ <button class="ui primary tiny button" data-tooltip-content="{{$.locale.Tr "repo.settings.sync_mirror"}}">{{svg "octicon-sync" 14}}</button>
</form>
<form method="post" class="gt-dib">
{{$.CsrfTokenHtml}}
- <input type="hidden" name="action" value="push-mirror-sync">
+ <input type="hidden" name="action" value="push-mirror-remove">
<input type="hidden" name="push_mirror_id" value="{{.ID}}">
- <button class="ui primary tiny button inline text-thin">{{$.locale.Tr "repo.settings.sync_mirror"}}</button>
+ <button class="ui basic red tiny button" data-tooltip-content="{{$.locale.Tr "remove"}}">{{svg "octicon-trash" 14}}</button>
</form>
</td>
</tr>
@@ -980,3 +990,5 @@
</div>
{{end}}
{{end}}
+
+{{template "repo/settings/push_mirror_sync_modal" .}}
diff --git a/templates/repo/settings/push_mirror_sync_modal.tmpl b/templates/repo/settings/push_mirror_sync_modal.tmpl
new file mode 100644
index 0000000000..a04574add5
--- /dev/null
+++ b/templates/repo/settings/push_mirror_sync_modal.tmpl
@@ -0,0 +1,32 @@
+<div class="ui small modal" id="push-mirror-edit-modal">
+ <div class="header">
+ {{$.locale.Tr "repo.settings.mirror_settings.push_mirror.edit_sync_time"}}
+ </div>
+ <div class="content">
+ <form class="ui form ignore-dirty" method="post">
+ {{.CsrfTokenHtml}}
+ <input type="hidden" name="action" value="push-mirror-update">
+ <input type="hidden" name="push_mirror_id" id="push-mirror-edit-id">
+ <div class="field">
+ <label for="name">{{$.locale.Tr "repo.settings.mirror_settings.mirrored_repository"}}</label>
+ <div class="ui small input">
+ <input id="push-mirror-edit-address" readonly>
+ </div>
+ </div>
+ <div class="inline field">
+ <label for="push-mirror-edit-interval">{{.locale.Tr "repo.mirror_interval" .MinimumMirrorInterval}}</label>
+ <input id="push-mirror-edit-interval" name="push_mirror_interval" autofocus>
+ </div>
+ <div class="actions">
+ <button class="ui small basic cancel button">
+ {{svg "octicon-x"}}
+ {{.locale.Tr "cancel"}}
+ </button>
+ <button class="ui primary small approve button">
+ {{svg "fontawesome-save"}}
+ {{.locale.Tr "save"}}
+ </button>
+ </div>
+ </form>
+ </div>
+</div>