aboutsummaryrefslogtreecommitdiffstats
path: root/modules/git
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2021-06-26 19:28:55 +0800
committerGitHub <noreply@github.com>2021-06-26 13:28:55 +0200
commite3c626834b34fae7728ee7869ed73ee4d1b26a26 (patch)
treeec61ea5376286a78622b95b7d849e8a299c85a28 /modules/git
parente673e42f7efafb184ffbe84f6998087713d8e373 (diff)
downloadgitea-e3c626834b34fae7728ee7869ed73ee4d1b26a26.tar.gz
gitea-e3c626834b34fae7728ee7869ed73ee4d1b26a26.zip
Let package git depend on setting but not opposite (#15241)
* Let package git depend on setting but not opposite * private some package variables
Diffstat (limited to 'modules/git')
-rw-r--r--modules/git/command.go6
-rw-r--r--modules/git/git.go33
-rw-r--r--modules/git/lfs.go37
-rw-r--r--modules/git/repo_commit.go14
4 files changed, 78 insertions, 12 deletions
diff --git a/modules/git/command.go b/modules/git/command.go
index 2e375fd4f9..127e95ecfb 100644
--- a/modules/git/command.go
+++ b/modules/git/command.go
@@ -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 {
diff --git a/modules/git/git.go b/modules/git/git.go
index ce1b15c953..ef6ec0c2bf 100644
--- a/modules/git/git.go
+++ b/modules/git/git.go
@@ -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
diff --git a/modules/git/lfs.go b/modules/git/lfs.go
new file mode 100644
index 0000000000..79049c9824
--- /dev/null
+++ b/modules/git/lfs.go
@@ -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=")
+ })
+ }
+ }
+}
diff --git a/modules/git/repo_commit.go b/modules/git/repo_commit.go
index 664a7445dd..815aa141e5 100644
--- a/modules/git/repo_commit.go
+++ b/modules/git/repo_commit.go
@@ -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
}