mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	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:
		@@ -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>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -746,9 +748,10 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if opts.IsMirror {
 | 
						if opts.IsMirror {
 | 
				
			||||||
		if _, err = x.InsertOne(&Mirror{
 | 
							if _, err = x.InsertOne(&Mirror{
 | 
				
			||||||
			RepoID:     repo.ID,
 | 
								RepoID:      repo.ID,
 | 
				
			||||||
			Interval:   24,
 | 
								Interval:    24,
 | 
				
			||||||
			NextUpdate: time.Now().Add(24 * time.Hour),
 | 
								EnablePrune: true,
 | 
				
			||||||
 | 
								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 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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}")
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
package user
 | 
					package user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
       "os"
 | 
						"os"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func CurrentUsername() string {
 | 
					func CurrentUsername() string {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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}}">
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user