Эх сурвалжийг харах

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
Pablo Saavedra 8 жил өмнө
parent
commit
98b152030d

+ 1 - 0
conf/locale/TRANSLATORS

@@ -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>

+ 2 - 0
conf/locale/locale_en-US.ini

@@ -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

+ 14 - 5
models/repo.go

@@ -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 {

+ 13 - 13
models/repo_test.go

@@ -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}")
 			})

+ 1 - 0
modules/auth/repo_form.go

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

+ 1 - 0
modules/context/repo.go

@@ -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
 		}

+ 1 - 1
modules/user/user.go

@@ -5,7 +5,7 @@
 package user
 
 import (
-       "os"
+	"os"
 )
 
 func CurrentUsername() string {

+ 1 - 0
routers/repo/setting.go

@@ -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 {

+ 7 - 0
templates/repo/settings/options.tmpl

@@ -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}}">