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 functiontags/v0.9.99
@@ -58,3 +58,4 @@ Vladimir Jigulin mogaika AT yandex DOT ru | |||
Vladimir Vissoultchev <wqweto AT gmail DOT com> | |||
YJSoft <yjsoft AT yjsoft DOT pe DOT kr> | |||
Łukasz Jan Niemier <lukasz AT niemier DOT pl> | |||
Pablo Saavedra <psaavedra AT igalia DOT com> |
@@ -353,6 +353,8 @@ default_branch = Default Branch | |||
mirror_interval = Mirror Interval (hour) | |||
mirror_address = Mirror 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 | |||
stargazers = Stargazers | |||
forks = Forks |
@@ -558,6 +558,8 @@ type Mirror struct { | |||
NextUpdateUnix int64 | |||
address string `xorm:"-"` | |||
EnablePrune bool `xorm:"NOT NULL DEFAULT true"` | |||
} | |||
func (m *Mirror) BeforeInsert() { | |||
@@ -656,7 +658,7 @@ func GetMirror(repoId int64) (*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 | |||
} | |||
@@ -746,9 +748,10 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) { | |||
if opts.IsMirror { | |||
if _, err = x.InsertOne(&Mirror{ | |||
RepoID: repo.ID, | |||
Interval: 24, | |||
NextUpdate: time.Now().Add(24 * time.Hour), | |||
RepoID: repo.ID, | |||
Interval: 24, | |||
EnablePrune: true, | |||
NextUpdate: time.Now().Add(24 * time.Hour), | |||
}); err != nil { | |||
return repo, fmt.Errorf("InsertOne: %v", err) | |||
} | |||
@@ -1680,10 +1683,16 @@ func MirrorUpdate() { | |||
} | |||
repoPath := m.Repo.RepoPath() | |||
var gitArgs = []string{"remote", "update"} | |||
if m.EnablePrune { | |||
gitArgs = []string{"remote", "update", "--prune"} | |||
} | |||
if _, stderr, err := process.ExecDir( | |||
time.Duration(setting.Git.Timeout.Mirror)*time.Second, | |||
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) | |||
log.Error(4, desc) | |||
if err = CreateRepositoryNotice(desc); err != nil { |
@@ -1,27 +1,27 @@ | |||
package models_test | |||
import ( | |||
"testing" | |||
. "github.com/smartystreets/goconvey/convey" | |||
. "github.com/gogits/gogs/models" | |||
. "github.com/smartystreets/goconvey/convey" | |||
"testing" | |||
"github.com/gogits/gogs/modules/markdown" | |||
) | |||
func TestRepo(t *testing.T) { | |||
Convey("The metas map", t, func () { | |||
Convey("The metas map", t, func() { | |||
var repo = new(Repository) | |||
repo.Name = "testrepo" | |||
repo.Owner = new(User) | |||
repo.Owner.Name = "testuser" | |||
repo.ExternalTrackerFormat = "https://someurl.com/{user}/{repo}/{issue}" | |||
Convey("When no external tracker is configured", func () { | |||
Convey("It should be nil", func () { | |||
Convey("When no external tracker is configured", func() { | |||
Convey("It should be nil", func() { | |||
repo.EnableExternalTracker = false | |||
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.ExternalTrackerFormat = "http://someurl.com/{user}/{repo}/{issue}" | |||
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 | |||
Convey("It should default to numeric issue style", func () { | |||
Convey("It should default to numeric issue style", func() { | |||
metas := repo.ComposeMetas() | |||
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 | |||
metas := repo.ComposeMetas() | |||
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 | |||
metas := repo.ComposeMetas() | |||
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() | |||
So(metas["user"], ShouldEqual, "testuser") | |||
}) | |||
Convey("It should contain the repo name", func () { | |||
Convey("It should contain the repo name", func() { | |||
metas := repo.ComposeMetas() | |||
So(metas["repo"], ShouldEqual, "testrepo") | |||
}) | |||
Convey("It should contain the URL format", func () { | |||
Convey("It should contain the URL format", func() { | |||
metas := repo.ComposeMetas() | |||
So(metas["format"], ShouldEqual, "https://someurl.com/{user}/{repo}/{issue}") | |||
}) |
@@ -88,6 +88,7 @@ type RepoSettingForm struct { | |||
Interval int | |||
MirrorAddress string | |||
Private bool | |||
EnablePrune bool | |||
// Advanced settings | |||
EnableWiki bool |
@@ -160,6 +160,7 @@ func RepoAssignment(args ...bool) macaron.Handler { | |||
ctx.Handle(500, "GetMirror", err) | |||
return | |||
} | |||
ctx.Data["MirrorEnablePrune"] = ctx.Repo.Mirror.EnablePrune | |||
ctx.Data["MirrorInterval"] = ctx.Repo.Mirror.Interval | |||
ctx.Data["Mirror"] = ctx.Repo.Mirror | |||
} |
@@ -5,7 +5,7 @@ | |||
package user | |||
import ( | |||
"os" | |||
"os" | |||
) | |||
func CurrentUsername() string { |
@@ -107,6 +107,7 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) { | |||
if repo.IsMirror { | |||
if form.Interval > 0 { | |||
ctx.Repo.Mirror.EnablePrune = form.EnablePrune | |||
ctx.Repo.Mirror.Interval = form.Interval | |||
ctx.Repo.Mirror.NextUpdate = time.Now().Add(time.Duration(form.Interval) * time.Hour) | |||
if err := models.UpdateMirror(ctx.Repo.Mirror); err != nil { |
@@ -51,6 +51,13 @@ | |||
</div> | |||
{{end}} | |||
{{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}}"> | |||
<label for="interval">{{.i18n.Tr "repo.mirror_interval"}}</label> | |||
<input id="interval" name="interval" type="number" value="{{.MirrorInterval}}"> |