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:
		
							parent
							
								
									467d7dacb6
								
							
						
					
					
						commit
						98b152030d
					
				
					 9 changed files with 41 additions and 19 deletions
				
			
		|  | @ -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}}"> | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue