* Let package git depend on setting but not opposite * private some package variablestags/v1.15.0-rc1
@@ -26,6 +26,7 @@ import ( | |||
"time" | |||
"code.gitea.io/gitea/models" | |||
gitea_git "code.gitea.io/gitea/modules/git" | |||
"code.gitea.io/gitea/modules/markup" | |||
"code.gitea.io/gitea/modules/markup/external" | |||
"code.gitea.io/gitea/modules/setting" | |||
@@ -79,7 +80,7 @@ func runPR() { | |||
setting.RunUser = curUser.Username | |||
log.Printf("[PR] Loading fixtures data ...\n") | |||
setting.CheckLFSVersion() | |||
gitea_git.CheckLFSVersion() | |||
//models.LoadConfigs() | |||
/* | |||
setting.Database.Type = "sqlite3" |
@@ -143,7 +143,7 @@ func standardCommitAndPushTest(t *testing.T, dstPath string) (little, big string | |||
func lfsCommitAndPushTest(t *testing.T, dstPath string) (littleLFS, bigLFS string) { | |||
t.Run("LFS", func(t *testing.T) { | |||
defer PrintCurrentTest(t)() | |||
setting.CheckLFSVersion() | |||
git.CheckLFSVersion() | |||
if !setting.LFS.StartServer { | |||
t.Skip() | |||
return | |||
@@ -213,7 +213,7 @@ func rawTest(t *testing.T, ctx *APITestContext, little, big, littleLFS, bigLFS s | |||
resp := session.MakeRequestNilResponseRecorder(t, req, http.StatusOK) | |||
assert.Equal(t, littleSize, resp.Length) | |||
setting.CheckLFSVersion() | |||
git.CheckLFSVersion() | |||
if setting.LFS.StartServer { | |||
req = NewRequest(t, "GET", path.Join("/", username, reponame, "/raw/branch/master/", littleLFS)) | |||
resp := session.MakeRequest(t, req, http.StatusOK) | |||
@@ -255,7 +255,7 @@ func mediaTest(t *testing.T, ctx *APITestContext, little, big, littleLFS, bigLFS | |||
resp := session.MakeRequestNilResponseRecorder(t, req, http.StatusOK) | |||
assert.Equal(t, littleSize, resp.Length) | |||
setting.CheckLFSVersion() | |||
git.CheckLFSVersion() | |||
if setting.LFS.StartServer { | |||
req = NewRequest(t, "GET", path.Join("/", username, reponame, "/media/branch/master/", littleLFS)) | |||
resp = session.MakeRequestNilResponseRecorder(t, req, http.StatusOK) |
@@ -26,6 +26,7 @@ import ( | |||
"code.gitea.io/gitea/models" | |||
"code.gitea.io/gitea/modules/base" | |||
"code.gitea.io/gitea/modules/git" | |||
"code.gitea.io/gitea/modules/graceful" | |||
"code.gitea.io/gitea/modules/log" | |||
"code.gitea.io/gitea/modules/queue" | |||
@@ -162,7 +163,7 @@ func initIntegrationTest() { | |||
setting.SetCustomPathAndConf("", "", "") | |||
setting.NewContext() | |||
util.RemoveAll(models.LocalCopyPath()) | |||
setting.CheckLFSVersion() | |||
git.CheckLFSVersion() | |||
setting.InitDBConfig() | |||
if err := storage.Init(); err != nil { | |||
fmt.Printf("Init storage failed: %v", err) |
@@ -13,6 +13,7 @@ import ( | |||
"testing" | |||
"code.gitea.io/gitea/models" | |||
"code.gitea.io/gitea/modules/git" | |||
"code.gitea.io/gitea/modules/lfs" | |||
"code.gitea.io/gitea/modules/setting" | |||
"code.gitea.io/gitea/routers/web" | |||
@@ -81,7 +82,7 @@ func checkResponseTestContentEncoding(t *testing.T, content *[]byte, resp *httpt | |||
func TestGetLFSSmall(t *testing.T) { | |||
defer prepareTestEnv(t)() | |||
setting.CheckLFSVersion() | |||
git.CheckLFSVersion() | |||
if !setting.LFS.StartServer { | |||
t.Skip() | |||
return | |||
@@ -94,7 +95,7 @@ func TestGetLFSSmall(t *testing.T) { | |||
func TestGetLFSLarge(t *testing.T) { | |||
defer prepareTestEnv(t)() | |||
setting.CheckLFSVersion() | |||
git.CheckLFSVersion() | |||
if !setting.LFS.StartServer { | |||
t.Skip() | |||
return | |||
@@ -110,7 +111,7 @@ func TestGetLFSLarge(t *testing.T) { | |||
func TestGetLFSGzip(t *testing.T) { | |||
defer prepareTestEnv(t)() | |||
setting.CheckLFSVersion() | |||
git.CheckLFSVersion() | |||
if !setting.LFS.StartServer { | |||
t.Skip() | |||
return | |||
@@ -131,7 +132,7 @@ func TestGetLFSGzip(t *testing.T) { | |||
func TestGetLFSZip(t *testing.T) { | |||
defer prepareTestEnv(t)() | |||
setting.CheckLFSVersion() | |||
git.CheckLFSVersion() | |||
if !setting.LFS.StartServer { | |||
t.Skip() | |||
return | |||
@@ -154,7 +155,7 @@ func TestGetLFSZip(t *testing.T) { | |||
func TestGetLFSRangeNo(t *testing.T) { | |||
defer prepareTestEnv(t)() | |||
setting.CheckLFSVersion() | |||
git.CheckLFSVersion() | |||
if !setting.LFS.StartServer { | |||
t.Skip() | |||
return | |||
@@ -167,7 +168,7 @@ func TestGetLFSRangeNo(t *testing.T) { | |||
func TestGetLFSRange(t *testing.T) { | |||
defer prepareTestEnv(t)() | |||
setting.CheckLFSVersion() | |||
git.CheckLFSVersion() | |||
if !setting.LFS.StartServer { | |||
t.Skip() | |||
return |
@@ -23,6 +23,7 @@ import ( | |||
"code.gitea.io/gitea/models/migrations" | |||
"code.gitea.io/gitea/modules/base" | |||
"code.gitea.io/gitea/modules/charset" | |||
"code.gitea.io/gitea/modules/git" | |||
"code.gitea.io/gitea/modules/setting" | |||
"code.gitea.io/gitea/modules/util" | |||
@@ -61,7 +62,7 @@ func initMigrationTest(t *testing.T) func() { | |||
assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) | |||
assert.NoError(t, util.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), setting.RepoRootPath)) | |||
setting.CheckLFSVersion() | |||
git.CheckLFSVersion() | |||
setting.InitDBConfig() | |||
setting.NewLogServices(true) | |||
return deferFn |
@@ -16,6 +16,7 @@ import ( | |||
"code.gitea.io/gitea/models" | |||
"code.gitea.io/gitea/modules/base" | |||
"code.gitea.io/gitea/modules/git" | |||
"code.gitea.io/gitea/modules/setting" | |||
"code.gitea.io/gitea/modules/timeutil" | |||
"code.gitea.io/gitea/modules/util" | |||
@@ -55,7 +56,7 @@ func TestMain(m *testing.M) { | |||
setting.SetCustomPathAndConf("", "", "") | |||
setting.NewContext() | |||
setting.CheckLFSVersion() | |||
git.CheckLFSVersion() | |||
setting.InitDBConfig() | |||
setting.NewLogServices(true) | |||
@@ -23,8 +23,8 @@ var ( | |||
// GlobalCommandArgs global command args for external package setting | |||
GlobalCommandArgs []string | |||
// DefaultCommandExecutionTimeout default command execution timeout duration | |||
DefaultCommandExecutionTimeout = 360 * time.Second | |||
// defaultCommandExecutionTimeout default command execution timeout duration | |||
defaultCommandExecutionTimeout = 360 * time.Second | |||
) | |||
// DefaultLocale is the default LC_ALL to run git commands in. | |||
@@ -111,7 +111,7 @@ func (c *Command) RunInDirTimeoutEnvFullPipeline(env []string, timeout time.Dura | |||
// it pipes stdout and stderr to given io.Writer and passes in an io.Reader as stdin. Between cmd.Start and cmd.Wait the passed in function is run. | |||
func (c *Command) RunInDirTimeoutEnvFullPipelineFunc(env []string, timeout time.Duration, dir string, stdout, stderr io.Writer, stdin io.Reader, fn func(context.Context, context.CancelFunc) error) error { | |||
if timeout == -1 { | |||
timeout = DefaultCommandExecutionTimeout | |||
timeout = defaultCommandExecutionTimeout | |||
} | |||
if len(dir) == 0 { |
@@ -14,6 +14,7 @@ import ( | |||
"time" | |||
"code.gitea.io/gitea/modules/process" | |||
"code.gitea.io/gitea/modules/setting" | |||
"github.com/hashicorp/go-version" | |||
) | |||
@@ -106,10 +107,42 @@ func SetExecutablePath(path string) error { | |||
return nil | |||
} | |||
// VersionInfo returns git version information | |||
func VersionInfo() string { | |||
var format = "Git Version: %s" | |||
var args = []interface{}{gitVersion.Original()} | |||
// Since git wire protocol has been released from git v2.18 | |||
if setting.Git.EnableAutoGitWireProtocol && CheckGitVersionAtLeast("2.18") == nil { | |||
format += ", Wire Protocol %s Enabled" | |||
args = append(args, "Version 2") // for focus color | |||
} | |||
return fmt.Sprintf(format, args...) | |||
} | |||
// Init initializes git module | |||
func Init(ctx context.Context) error { | |||
DefaultContext = ctx | |||
defaultCommandExecutionTimeout = time.Duration(setting.Git.Timeout.Default) * time.Second | |||
if err := SetExecutablePath(setting.Git.Path); err != nil { | |||
return err | |||
} | |||
// force cleanup args | |||
GlobalCommandArgs = []string{} | |||
if CheckGitVersionAtLeast("2.9") == nil { | |||
// Explicitly disable credential helper, otherwise Git credentials might leak | |||
GlobalCommandArgs = append(GlobalCommandArgs, "-c", "credential.helper=") | |||
} | |||
// Since git wire protocol has been released from git v2.18 | |||
if setting.Git.EnableAutoGitWireProtocol && CheckGitVersionAtLeast("2.18") == nil { | |||
GlobalCommandArgs = append(GlobalCommandArgs, "-c", "protocol.version=2") | |||
} | |||
// Save current git version on init to gitVersion otherwise it would require an RWMutex | |||
if err := LoadGitVersion(); err != nil { | |||
return err |
@@ -0,0 +1,37 @@ | |||
// Copyright 2021 The Gitea Authors. All rights reserved. | |||
// Use of this source code is governed by a MIT-style | |||
// license that can be found in the LICENSE file. | |||
package git | |||
import ( | |||
"sync" | |||
logger "code.gitea.io/gitea/modules/log" | |||
"code.gitea.io/gitea/modules/setting" | |||
) | |||
var once sync.Once | |||
// CheckLFSVersion will check lfs version, if not satisfied, then disable it. | |||
func CheckLFSVersion() { | |||
if setting.LFS.StartServer { | |||
//Disable LFS client hooks if installed for the current OS user | |||
//Needs at least git v2.1.2 | |||
err := LoadGitVersion() | |||
if err != nil { | |||
logger.Fatal("Error retrieving git version: %v", err) | |||
} | |||
if CheckGitVersionAtLeast("2.1.2") != nil { | |||
setting.LFS.StartServer = false | |||
logger.Error("LFS server support needs at least Git v2.1.2") | |||
} else { | |||
once.Do(func() { | |||
GlobalCommandArgs = append(GlobalCommandArgs, "-c", "filter.lfs.required=", | |||
"-c", "filter.lfs.smudge=", "-c", "filter.lfs.clean=") | |||
}) | |||
} | |||
} | |||
} |
@@ -12,6 +12,8 @@ import ( | |||
"io/ioutil" | |||
"strconv" | |||
"strings" | |||
"code.gitea.io/gitea/modules/setting" | |||
) | |||
// GetBranchCommitID returns last commit ID string of given branch. | |||
@@ -85,12 +87,6 @@ func (repo *Repository) GetCommitByPath(relpath string) (*Commit, error) { | |||
return commits.Front().Value.(*Commit), nil | |||
} | |||
// CommitsRangeSize the default commits range size | |||
var CommitsRangeSize = 50 | |||
// BranchesRangeSize the default branches range size | |||
var BranchesRangeSize = 20 | |||
func (repo *Repository) commitsByRange(id SHA1, page, pageSize int) (*list.List, error) { | |||
stdout, err := NewCommand("log", id.String(), "--skip="+strconv.Itoa((page-1)*pageSize), | |||
"--max-count="+strconv.Itoa(pageSize), prettyLogFormat).RunInDirBytes(repo.Path) | |||
@@ -206,7 +202,7 @@ func (repo *Repository) FileCommitsCount(revision, file string) (int64, error) { | |||
// CommitsByFileAndRange return the commits according revison file and the page | |||
func (repo *Repository) CommitsByFileAndRange(revision, file string, page int) (*list.List, error) { | |||
skip := (page - 1) * CommitsRangeSize | |||
skip := (page - 1) * setting.Git.CommitsRangeSize | |||
stdoutReader, stdoutWriter := io.Pipe() | |||
defer func() { | |||
@@ -216,7 +212,7 @@ func (repo *Repository) CommitsByFileAndRange(revision, file string, page int) ( | |||
go func() { | |||
stderr := strings.Builder{} | |||
err := NewCommand("log", revision, "--follow", | |||
"--max-count="+strconv.Itoa(CommitsRangeSize*page), | |||
"--max-count="+strconv.Itoa(setting.Git.CommitsRangeSize*page), | |||
prettyLogFormat, "--", file). | |||
RunInDirPipeline(repo.Path, stdoutWriter, &stderr) | |||
if err != nil { | |||
@@ -247,7 +243,7 @@ func (repo *Repository) CommitsByFileAndRange(revision, file string, page int) ( | |||
// CommitsByFileAndRangeNoFollow return the commits according revison file and the page | |||
func (repo *Repository) CommitsByFileAndRangeNoFollow(revision, file string, page int) (*list.List, error) { | |||
stdout, err := NewCommand("log", revision, "--skip="+strconv.Itoa((page-1)*50), | |||
"--max-count="+strconv.Itoa(CommitsRangeSize), prettyLogFormat, "--", file).RunInDirBytes(repo.Path) | |||
"--max-count="+strconv.Itoa(setting.Git.CommitsRangeSize), prettyLogFormat, "--", file).RunInDirBytes(repo.Path) | |||
if err != nil { | |||
return nil, err | |||
} |
@@ -7,7 +7,6 @@ package setting | |||
import ( | |||
"time" | |||
"code.gitea.io/gitea/modules/git" | |||
"code.gitea.io/gitea/modules/log" | |||
) | |||
@@ -19,8 +18,8 @@ var ( | |||
MaxGitDiffLines int | |||
MaxGitDiffLineCharacters int | |||
MaxGitDiffFiles int | |||
CommitsRangeSize int | |||
BranchesRangeSize int | |||
CommitsRangeSize int // CommitsRangeSize the default commits range size | |||
BranchesRangeSize int // BranchesRangeSize the default branches range size | |||
VerbosePush bool | |||
VerbosePushDelay time.Duration | |||
GCArgs []string `ini:"GC_ARGS" delim:" "` | |||
@@ -54,7 +53,7 @@ var ( | |||
Pull int | |||
GC int `ini:"GC"` | |||
}{ | |||
Default: int(git.DefaultCommandExecutionTimeout / time.Second), | |||
Default: 360, | |||
Migrate: 600, | |||
Mirror: 300, | |||
Clone: 300, | |||
@@ -68,35 +67,4 @@ func newGit() { | |||
if err := Cfg.Section("git").MapTo(&Git); err != nil { | |||
log.Fatal("Failed to map Git settings: %v", err) | |||
} | |||
if err := git.SetExecutablePath(Git.Path); err != nil { | |||
log.Fatal("Failed to initialize Git settings: %v", err) | |||
} | |||
git.DefaultCommandExecutionTimeout = time.Duration(Git.Timeout.Default) * time.Second | |||
version, err := git.LocalVersion() | |||
if err != nil { | |||
log.Fatal("Error retrieving git version: %v", err) | |||
} | |||
// force cleanup args | |||
git.GlobalCommandArgs = []string{} | |||
if git.CheckGitVersionAtLeast("2.9") == nil { | |||
// Explicitly disable credential helper, otherwise Git credentials might leak | |||
git.GlobalCommandArgs = append(git.GlobalCommandArgs, "-c", "credential.helper=") | |||
} | |||
var format = "Git Version: %s" | |||
var args = []interface{}{version.Original()} | |||
// Since git wire protocol has been released from git v2.18 | |||
if Git.EnableAutoGitWireProtocol && git.CheckGitVersionAtLeast("2.18") == nil { | |||
git.GlobalCommandArgs = append(git.GlobalCommandArgs, "-c", "protocol.version=2") | |||
format += ", Wire Protocol %s Enabled" | |||
args = append(args, "Version 2") // for focus color | |||
} | |||
git.CommitsRangeSize = Git.CommitsRangeSize | |||
git.BranchesRangeSize = Git.BranchesRangeSize | |||
log.Info(format, args...) | |||
} |
@@ -9,7 +9,6 @@ import ( | |||
"time" | |||
"code.gitea.io/gitea/modules/generate" | |||
"code.gitea.io/gitea/modules/git" | |||
"code.gitea.io/gitea/modules/log" | |||
ini "gopkg.in/ini.v1" | |||
@@ -67,24 +66,3 @@ func newLFSService() { | |||
} | |||
} | |||
} | |||
// CheckLFSVersion will check lfs version, if not satisfied, then disable it. | |||
func CheckLFSVersion() { | |||
if LFS.StartServer { | |||
//Disable LFS client hooks if installed for the current OS user | |||
//Needs at least git v2.1.2 | |||
err := git.LoadGitVersion() | |||
if err != nil { | |||
log.Fatal("Error retrieving git version: %v", err) | |||
} | |||
if git.CheckGitVersionAtLeast("2.1.2") != nil { | |||
LFS.StartServer = false | |||
log.Error("LFS server support needs at least Git v2.1.2") | |||
} else { | |||
git.GlobalCommandArgs = append(git.GlobalCommandArgs, "-c", "filter.lfs.required=", | |||
"-c", "filter.lfs.smudge=", "-c", "filter.lfs.clean=") | |||
} | |||
} | |||
} |
@@ -143,8 +143,8 @@ func GetAllCommits(ctx *context.APIContext) { | |||
listOptions.Page = 1 | |||
} | |||
if listOptions.PageSize > git.CommitsRangeSize { | |||
listOptions.PageSize = git.CommitsRangeSize | |||
if listOptions.PageSize > setting.Git.CommitsRangeSize { | |||
listOptions.PageSize = setting.Git.CommitsRangeSize | |||
} | |||
sha := ctx.Query("sha") |
@@ -69,7 +69,9 @@ func GlobalInit(ctx context.Context) { | |||
if err := git.Init(ctx); err != nil { | |||
log.Fatal("Git module init failed: %v", err) | |||
} | |||
setting.CheckLFSVersion() | |||
log.Info(git.VersionInfo()) | |||
git.CheckLFSVersion() | |||
log.Trace("AppPath: %s", setting.AppPath) | |||
log.Trace("AppWorkPath: %s", setting.AppWorkPath) | |||
log.Trace("Custom path: %s", setting.CustomPath) |
@@ -18,6 +18,7 @@ import ( | |||
"code.gitea.io/gitea/modules/log" | |||
"code.gitea.io/gitea/modules/repofiles" | |||
repo_module "code.gitea.io/gitea/modules/repository" | |||
"code.gitea.io/gitea/modules/setting" | |||
"code.gitea.io/gitea/modules/util" | |||
"code.gitea.io/gitea/modules/web" | |||
"code.gitea.io/gitea/routers/utils" | |||
@@ -62,8 +63,8 @@ func Branches(ctx *context.Context) { | |||
} | |||
limit := ctx.QueryInt("limit") | |||
if limit <= 0 || limit > git.BranchesRangeSize { | |||
limit = git.BranchesRangeSize | |||
if limit <= 0 || limit > setting.Git.BranchesRangeSize { | |||
limit = setting.Git.BranchesRangeSize | |||
} | |||
skip := (page - 1) * limit | |||
@@ -73,7 +74,7 @@ func Branches(ctx *context.Context) { | |||
return | |||
} | |||
ctx.Data["Branches"] = branches | |||
pager := context.NewPagination(int(branchesCount), git.BranchesRangeSize, page, 5) | |||
pager := context.NewPagination(int(branchesCount), setting.Git.BranchesRangeSize, page, 5) | |||
pager.SetDefaultParams(ctx) | |||
ctx.Data["Page"] = pager | |||
@@ -63,7 +63,7 @@ func Commits(ctx *context.Context) { | |||
pageSize := ctx.QueryInt("limit") | |||
if pageSize <= 0 { | |||
pageSize = git.CommitsRangeSize | |||
pageSize = setting.Git.CommitsRangeSize | |||
} | |||
// Both `git log branchName` and `git log commitId` work. | |||
@@ -82,7 +82,7 @@ func Commits(ctx *context.Context) { | |||
ctx.Data["CommitCount"] = commitsCount | |||
ctx.Data["Branch"] = ctx.Repo.BranchName | |||
pager := context.NewPagination(int(commitsCount), git.CommitsRangeSize, page, 5) | |||
pager := context.NewPagination(int(commitsCount), setting.Git.CommitsRangeSize, page, 5) | |||
pager.SetDefaultParams(ctx) | |||
ctx.Data["Page"] = pager | |||
@@ -250,7 +250,7 @@ func FileHistory(ctx *context.Context) { | |||
ctx.Data["CommitCount"] = commitsCount | |||
ctx.Data["Branch"] = branchName | |||
pager := context.NewPagination(int(commitsCount), git.CommitsRangeSize, page, 5) | |||
pager := context.NewPagination(int(commitsCount), setting.Git.CommitsRangeSize, page, 5) | |||
pager.SetDefaultParams(ctx) | |||
ctx.Data["Page"] = pager | |||
@@ -21,6 +21,7 @@ import ( | |||
"code.gitea.io/gitea/modules/log" | |||
"code.gitea.io/gitea/modules/markup" | |||
"code.gitea.io/gitea/modules/markup/markdown" | |||
"code.gitea.io/gitea/modules/setting" | |||
"code.gitea.io/gitea/modules/timeutil" | |||
"code.gitea.io/gitea/modules/util" | |||
"code.gitea.io/gitea/modules/web" | |||
@@ -316,7 +317,7 @@ func renderRevisionPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) | |||
ctx.Data["Commits"] = commitsHistory | |||
pager := context.NewPagination(int(commitsCount), git.CommitsRangeSize, page, 5) | |||
pager := context.NewPagination(int(commitsCount), setting.Git.CommitsRangeSize, page, 5) | |||
pager.SetDefaultParams(ctx) | |||
ctx.Data["Page"] = pager | |||