The pruning for the synchronized mirrors is a option now. Default value: enable_prune = true (#3246)

Executed go fmt

getEngine() not handles DB parameters (#2972) (#2974)

Uses .AllCols() for Update in updateMirror()

Spanish traslation removed

Fixed a wrong way to ommit the --prune option in process.ExecDir() for MirrorUpdate function
This commit is contained in:
Pablo Saavedra 2016-07-09 07:22:28 +02:00 committed by 无闻
parent 467d7dacb6
commit 98b152030d
9 changed files with 41 additions and 19 deletions

View File

@ -58,3 +58,4 @@ Vladimir Jigulin mogaika AT yandex DOT ru
Vladimir Vissoultchev <wqweto AT gmail DOT com> Vladimir Vissoultchev <wqweto AT gmail DOT com>
YJSoft <yjsoft AT yjsoft DOT pe DOT kr> YJSoft <yjsoft AT yjsoft DOT pe DOT kr>
Łukasz Jan Niemier <lukasz AT niemier DOT pl> Łukasz Jan Niemier <lukasz AT niemier DOT pl>
Pablo Saavedra <psaavedra AT igalia DOT com>

View File

@ -353,6 +353,8 @@ default_branch = Default Branch
mirror_interval = Mirror Interval (hour) mirror_interval = Mirror Interval (hour)
mirror_address = Mirror Address mirror_address = Mirror Address
mirror_address_desc = Please include necessary user credentials in the address. mirror_address_desc = Please include necessary user credentials in the address.
mirror_enable_prune = Remove all objects references remotely removed in the mirror
mirror_prune = Prune
watchers = Watchers watchers = Watchers
stargazers = Stargazers stargazers = Stargazers
forks = Forks forks = Forks

View File

@ -558,6 +558,8 @@ type Mirror struct {
NextUpdateUnix int64 NextUpdateUnix int64
address string `xorm:"-"` address string `xorm:"-"`
EnablePrune bool `xorm:"NOT NULL DEFAULT true"`
} }
func (m *Mirror) BeforeInsert() { func (m *Mirror) BeforeInsert() {
@ -656,7 +658,7 @@ func GetMirror(repoId int64) (*Mirror, error) {
} }
func updateMirror(e Engine, m *Mirror) error { func updateMirror(e Engine, m *Mirror) error {
_, err := e.Id(m.ID).Update(m) _, err := e.Id(m.ID).AllCols().Update(m)
return err return err
} }
@ -748,6 +750,7 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
if _, err = x.InsertOne(&Mirror{ if _, err = x.InsertOne(&Mirror{
RepoID: repo.ID, RepoID: repo.ID,
Interval: 24, Interval: 24,
EnablePrune: true,
NextUpdate: time.Now().Add(24 * time.Hour), NextUpdate: time.Now().Add(24 * time.Hour),
}); err != nil { }); err != nil {
return repo, fmt.Errorf("InsertOne: %v", err) return repo, fmt.Errorf("InsertOne: %v", err)
@ -1680,10 +1683,16 @@ func MirrorUpdate() {
} }
repoPath := m.Repo.RepoPath() repoPath := m.Repo.RepoPath()
var gitArgs = []string{"remote", "update"}
if m.EnablePrune {
gitArgs = []string{"remote", "update", "--prune"}
}
if _, stderr, err := process.ExecDir( if _, stderr, err := process.ExecDir(
time.Duration(setting.Git.Timeout.Mirror)*time.Second, time.Duration(setting.Git.Timeout.Mirror)*time.Second,
repoPath, fmt.Sprintf("MirrorUpdate: %s", repoPath), repoPath, fmt.Sprintf("MirrorUpdate: %s", repoPath),
"git", "remote", "update", "--prune"); err != nil { "git", gitArgs...); err != nil {
desc := fmt.Sprintf("Fail to update mirror repository(%s): %s", repoPath, stderr) desc := fmt.Sprintf("Fail to update mirror repository(%s): %s", repoPath, stderr)
log.Error(4, desc) log.Error(4, desc)
if err = CreateRepositoryNotice(desc); err != nil { if err = CreateRepositoryNotice(desc); err != nil {

View File

@ -1,27 +1,27 @@
package models_test package models_test
import ( import (
"testing"
. "github.com/smartystreets/goconvey/convey"
. "github.com/gogits/gogs/models" . "github.com/gogits/gogs/models"
. "github.com/smartystreets/goconvey/convey"
"testing"
"github.com/gogits/gogs/modules/markdown" "github.com/gogits/gogs/modules/markdown"
) )
func TestRepo(t *testing.T) { func TestRepo(t *testing.T) {
Convey("The metas map", t, func () { Convey("The metas map", t, func() {
var repo = new(Repository) var repo = new(Repository)
repo.Name = "testrepo" repo.Name = "testrepo"
repo.Owner = new(User) repo.Owner = new(User)
repo.Owner.Name = "testuser" repo.Owner.Name = "testuser"
repo.ExternalTrackerFormat = "https://someurl.com/{user}/{repo}/{issue}" repo.ExternalTrackerFormat = "https://someurl.com/{user}/{repo}/{issue}"
Convey("When no external tracker is configured", func () { Convey("When no external tracker is configured", func() {
Convey("It should be nil", func () { Convey("It should be nil", func() {
repo.EnableExternalTracker = false repo.EnableExternalTracker = false
So(repo.ComposeMetas(), ShouldEqual, map[string]string(nil)) So(repo.ComposeMetas(), ShouldEqual, map[string]string(nil))
}) })
Convey("It should be nil even if other settings are present", func () { Convey("It should be nil even if other settings are present", func() {
repo.EnableExternalTracker = false repo.EnableExternalTracker = false
repo.ExternalTrackerFormat = "http://someurl.com/{user}/{repo}/{issue}" repo.ExternalTrackerFormat = "http://someurl.com/{user}/{repo}/{issue}"
repo.ExternalTrackerStyle = markdown.ISSUE_NAME_STYLE_NUMERIC repo.ExternalTrackerStyle = markdown.ISSUE_NAME_STYLE_NUMERIC
@ -29,31 +29,31 @@ func TestRepo(t *testing.T) {
}) })
}) })
Convey("When an external issue tracker is configured", func () { Convey("When an external issue tracker is configured", func() {
repo.EnableExternalTracker = true repo.EnableExternalTracker = true
Convey("It should default to numeric issue style", func () { Convey("It should default to numeric issue style", func() {
metas := repo.ComposeMetas() metas := repo.ComposeMetas()
So(metas["style"], ShouldEqual, markdown.ISSUE_NAME_STYLE_NUMERIC) So(metas["style"], ShouldEqual, markdown.ISSUE_NAME_STYLE_NUMERIC)
}) })
Convey("It should pass through numeric issue style setting", func () { Convey("It should pass through numeric issue style setting", func() {
repo.ExternalTrackerStyle = markdown.ISSUE_NAME_STYLE_NUMERIC repo.ExternalTrackerStyle = markdown.ISSUE_NAME_STYLE_NUMERIC
metas := repo.ComposeMetas() metas := repo.ComposeMetas()
So(metas["style"], ShouldEqual, markdown.ISSUE_NAME_STYLE_NUMERIC) So(metas["style"], ShouldEqual, markdown.ISSUE_NAME_STYLE_NUMERIC)
}) })
Convey("It should pass through alphanumeric issue style setting", func () { Convey("It should pass through alphanumeric issue style setting", func() {
repo.ExternalTrackerStyle = markdown.ISSUE_NAME_STYLE_ALPHANUMERIC repo.ExternalTrackerStyle = markdown.ISSUE_NAME_STYLE_ALPHANUMERIC
metas := repo.ComposeMetas() metas := repo.ComposeMetas()
So(metas["style"], ShouldEqual, markdown.ISSUE_NAME_STYLE_ALPHANUMERIC) So(metas["style"], ShouldEqual, markdown.ISSUE_NAME_STYLE_ALPHANUMERIC)
}) })
Convey("It should contain the user name", func () { Convey("It should contain the user name", func() {
metas := repo.ComposeMetas() metas := repo.ComposeMetas()
So(metas["user"], ShouldEqual, "testuser") So(metas["user"], ShouldEqual, "testuser")
}) })
Convey("It should contain the repo name", func () { Convey("It should contain the repo name", func() {
metas := repo.ComposeMetas() metas := repo.ComposeMetas()
So(metas["repo"], ShouldEqual, "testrepo") So(metas["repo"], ShouldEqual, "testrepo")
}) })
Convey("It should contain the URL format", func () { Convey("It should contain the URL format", func() {
metas := repo.ComposeMetas() metas := repo.ComposeMetas()
So(metas["format"], ShouldEqual, "https://someurl.com/{user}/{repo}/{issue}") So(metas["format"], ShouldEqual, "https://someurl.com/{user}/{repo}/{issue}")
}) })

View File

@ -88,6 +88,7 @@ type RepoSettingForm struct {
Interval int Interval int
MirrorAddress string MirrorAddress string
Private bool Private bool
EnablePrune bool
// Advanced settings // Advanced settings
EnableWiki bool EnableWiki bool

View File

@ -160,6 +160,7 @@ func RepoAssignment(args ...bool) macaron.Handler {
ctx.Handle(500, "GetMirror", err) ctx.Handle(500, "GetMirror", err)
return return
} }
ctx.Data["MirrorEnablePrune"] = ctx.Repo.Mirror.EnablePrune
ctx.Data["MirrorInterval"] = ctx.Repo.Mirror.Interval ctx.Data["MirrorInterval"] = ctx.Repo.Mirror.Interval
ctx.Data["Mirror"] = ctx.Repo.Mirror ctx.Data["Mirror"] = ctx.Repo.Mirror
} }

View File

@ -107,6 +107,7 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) {
if repo.IsMirror { if repo.IsMirror {
if form.Interval > 0 { if form.Interval > 0 {
ctx.Repo.Mirror.EnablePrune = form.EnablePrune
ctx.Repo.Mirror.Interval = form.Interval ctx.Repo.Mirror.Interval = form.Interval
ctx.Repo.Mirror.NextUpdate = time.Now().Add(time.Duration(form.Interval) * time.Hour) ctx.Repo.Mirror.NextUpdate = time.Now().Add(time.Duration(form.Interval) * time.Hour)
if err := models.UpdateMirror(ctx.Repo.Mirror); err != nil { if err := models.UpdateMirror(ctx.Repo.Mirror); err != nil {

View File

@ -51,6 +51,13 @@
</div> </div>
{{end}} {{end}}
{{if .Repository.IsMirror}} {{if .Repository.IsMirror}}
<div class="inline field {{if .Err_EnablePrune}}error{{end}}">
<label>{{.i18n.Tr "repo.mirror_prune"}}</label>
<div class="ui checkbox">
<input id="enable_prune" name="enable_prune" type="checkbox" {{if .MirrorEnablePrune}}checked{{end}}>
<label>{{.i18n.Tr "repo.mirror_enable_prune"}}</label>
</div>
</div>
<div class="inline field {{if .Err_Interval}}error{{end}}"> <div class="inline field {{if .Err_Interval}}error{{end}}">
<label for="interval">{{.i18n.Tr "repo.mirror_interval"}}</label> <label for="interval">{{.i18n.Tr "repo.mirror_interval"}}</label>
<input id="interval" name="interval" type="number" value="{{.MirrorInterval}}"> <input id="interval" name="interval" type="number" value="{{.MirrorInterval}}">