From 3ef23d5411732b4b714d6fc9739bc5dac75aadd4 Mon Sep 17 00:00:00 2001
From: 6543 <6543@obermui.de>
Date: Fri, 25 Jun 2021 18:54:08 +0200
Subject: [PATCH] Use gitea logging module for git module (#16243)

remove log() func from gogs times and switch to proper logging

Signed-off-by: Andrew Thornton <art27@cantab.net>
Co-authored-by: Andrew Thornton <art27@cantab.net>
---
 modules/git/batch_reader.go                |  6 ++++--
 modules/git/blob_nogogit.go                |  6 ++++--
 modules/git/command.go                     | 10 +++++-----
 modules/git/commit_info_nogogit.go         |  4 +++-
 modules/git/diff.go                        |  3 ++-
 modules/git/git.go                         | 16 ----------------
 modules/git/git_test.go                    |  4 ++++
 modules/git/hook.go                        |  6 ++++--
 modules/git/last_commit_cache.go           |  4 +++-
 modules/git/last_commit_cache_gogit.go     |  6 ++++--
 modules/git/last_commit_cache_nogogit.go   |  6 ++++--
 modules/git/parse_nogogit.go               |  4 +++-
 modules/git/repo_base_nogogit.go           |  6 ++++--
 modules/git/repo_branch_nogogit.go         |  6 ++++--
 modules/git/repo_commit_nogogit.go         |  4 +++-
 modules/git/repo_language_stats_nogogit.go |  9 +++++----
 modules/git/repo_tag.go                    |  4 +++-
 routers/init.go                            | 12 +-----------
 services/gitdiff/gitdiff_test.go           |  2 --
 19 files changed, 60 insertions(+), 58 deletions(-)

diff --git a/modules/git/batch_reader.go b/modules/git/batch_reader.go
index 678b184708..bdf82bde89 100644
--- a/modules/git/batch_reader.go
+++ b/modules/git/batch_reader.go
@@ -12,6 +12,8 @@ import (
 	"strconv"
 	"strings"
 
+	"code.gitea.io/gitea/modules/log"
+
 	"github.com/djherbis/buffer"
 	"github.com/djherbis/nio/v3"
 )
@@ -99,7 +101,7 @@ func ReadBatchLine(rd *bufio.Reader) (sha []byte, typ string, size int64, err er
 	}
 	idx := strings.IndexByte(typ, ' ')
 	if idx < 0 {
-		log("missing space typ: %s", typ)
+		log.Debug("missing space typ: %s", typ)
 		err = ErrNotExist{ID: string(sha)}
 		return
 	}
@@ -230,7 +232,7 @@ func ParseTreeLine(rd *bufio.Reader, modeBuf, fnameBuf, shaBuf []byte) (mode, fn
 	}
 	idx := bytes.IndexByte(readBytes, ' ')
 	if idx < 0 {
-		log("missing space in readBytes ParseTreeLine: %s", readBytes)
+		log.Debug("missing space in readBytes ParseTreeLine: %s", readBytes)
 
 		err = &ErrNotExist{}
 		return
diff --git a/modules/git/blob_nogogit.go b/modules/git/blob_nogogit.go
index cdaeb636a9..5b42920ebe 100644
--- a/modules/git/blob_nogogit.go
+++ b/modules/git/blob_nogogit.go
@@ -12,6 +12,8 @@ import (
 	"io"
 	"io/ioutil"
 	"math"
+
+	"code.gitea.io/gitea/modules/log"
 )
 
 // Blob represents a Git object.
@@ -69,12 +71,12 @@ func (b *Blob) Size() int64 {
 	defer cancel()
 	_, err := wr.Write([]byte(b.ID.String() + "\n"))
 	if err != nil {
-		log("error whilst reading size for %s in %s. Error: %v", b.ID.String(), b.repo.Path, err)
+		log.Debug("error whilst reading size for %s in %s. Error: %v", b.ID.String(), b.repo.Path, err)
 		return 0
 	}
 	_, _, b.size, err = ReadBatchLine(rd)
 	if err != nil {
-		log("error whilst reading size for %s in %s. Error: %v", b.ID.String(), b.repo.Path, err)
+		log.Debug("error whilst reading size for %s in %s. Error: %v", b.ID.String(), b.repo.Path, err)
 		return 0
 	}
 
diff --git a/modules/git/command.go b/modules/git/command.go
index ef78464d5f..2e375fd4f9 100644
--- a/modules/git/command.go
+++ b/modules/git/command.go
@@ -15,6 +15,7 @@ import (
 	"strings"
 	"time"
 
+	"code.gitea.io/gitea/modules/log"
 	"code.gitea.io/gitea/modules/process"
 )
 
@@ -114,9 +115,9 @@ func (c *Command) RunInDirTimeoutEnvFullPipelineFunc(env []string, timeout time.
 	}
 
 	if len(dir) == 0 {
-		log(c.String())
+		log.Debug("%s", c)
 	} else {
-		log("%s: %v", dir, c)
+		log.Debug("%s: %v", dir, c)
 	}
 
 	ctx, cancel := context.WithTimeout(c.parentContext, timeout)
@@ -197,9 +198,8 @@ func (c *Command) RunInDirTimeoutEnv(env []string, timeout time.Duration, dir st
 	if err := c.RunInDirTimeoutEnvPipeline(env, timeout, dir, stdout, stderr); err != nil {
 		return nil, ConcatenateError(err, stderr.String())
 	}
-
-	if stdout.Len() > 0 {
-		log("stdout:\n%s", stdout.Bytes()[:1024])
+	if stdout.Len() > 0 && log.IsTrace() {
+		log.Trace("Stdout:\n %s", stdout.Bytes()[:1024])
 	}
 	return stdout.Bytes(), nil
 }
diff --git a/modules/git/commit_info_nogogit.go b/modules/git/commit_info_nogogit.go
index 2283510d96..060ecba261 100644
--- a/modules/git/commit_info_nogogit.go
+++ b/modules/git/commit_info_nogogit.go
@@ -12,6 +12,8 @@ import (
 	"io"
 	"path"
 	"sort"
+
+	"code.gitea.io/gitea/modules/log"
 )
 
 // GetCommitsInfo gets information of all commits that are corresponding to these entries
@@ -78,7 +80,7 @@ func (tes Entries) GetCommitsInfo(ctx context.Context, commit *Commit, treePath
 				commitsInfo[i].SubModuleFile = subModuleFile
 			}
 		} else {
-			log("missing commit for %s", entry.Name())
+			log.Debug("missing commit for %s", entry.Name())
 		}
 	}
 
diff --git a/modules/git/diff.go b/modules/git/diff.go
index 5da53568e5..20f25c1bee 100644
--- a/modules/git/diff.go
+++ b/modules/git/diff.go
@@ -15,6 +15,7 @@ import (
 	"strconv"
 	"strings"
 
+	"code.gitea.io/gitea/modules/log"
 	"code.gitea.io/gitea/modules/process"
 )
 
@@ -113,7 +114,7 @@ func ParseDiffHunkString(diffhunk string) (leftLine, leftHunk, rightLine, righHu
 			righHunk, _ = strconv.Atoi(rightRange[1])
 		}
 	} else {
-		log("Parse line number failed: %v", diffhunk)
+		log.Debug("Parse line number failed: %v", diffhunk)
 		rightLine = leftLine
 		righHunk = leftHunk
 	}
diff --git a/modules/git/git.go b/modules/git/git.go
index 6b15138a5c..ce1b15c953 100644
--- a/modules/git/git.go
+++ b/modules/git/git.go
@@ -19,9 +19,6 @@ import (
 )
 
 var (
-	// Debug enables verbose logging on everything.
-	// This should be false in case Gogs starts in SSH mode.
-	Debug = false
 	// Prefix the log prefix
 	Prefix = "[git-module] "
 	// GitVersionRequired is the minimum Git version required
@@ -41,19 +38,6 @@ var (
 	goVersionLessThan115 = true
 )
 
-func log(format string, args ...interface{}) {
-	if !Debug {
-		return
-	}
-
-	fmt.Print(Prefix)
-	if len(args) == 0 {
-		fmt.Println(format)
-	} else {
-		fmt.Printf(format+"\n", args...)
-	}
-}
-
 // LocalVersion returns current Git version from shell.
 func LocalVersion() (*version.Version, error) {
 	if err := LoadGitVersion(); err != nil {
diff --git a/modules/git/git_test.go b/modules/git/git_test.go
index 27951d639b..c62a55badc 100644
--- a/modules/git/git_test.go
+++ b/modules/git/git_test.go
@@ -9,6 +9,8 @@ import (
 	"fmt"
 	"os"
 	"testing"
+
+	"code.gitea.io/gitea/modules/log"
 )
 
 func fatalTestError(fmtStr string, args ...interface{}) {
@@ -17,6 +19,8 @@ func fatalTestError(fmtStr string, args ...interface{}) {
 }
 
 func TestMain(m *testing.M) {
+	_ = log.NewLogger(1000, "console", "console", `{"level":"trace","stacktracelevel":"NONE","stderr":true}`)
+
 	if err := Init(context.Background()); err != nil {
 		fatalTestError("Init failed: %v", err)
 	}
diff --git a/modules/git/hook.go b/modules/git/hook.go
index c23fbf8aa1..7007d23be2 100644
--- a/modules/git/hook.go
+++ b/modules/git/hook.go
@@ -1,4 +1,5 @@
 // Copyright 2015 The Gogs Authors. All rights reserved.
+// 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.
 
@@ -12,6 +13,7 @@ import (
 	"path/filepath"
 	"strings"
 
+	"code.gitea.io/gitea/modules/log"
 	"code.gitea.io/gitea/modules/util"
 )
 
@@ -126,11 +128,11 @@ const (
 
 // SetUpdateHook writes given content to update hook of the repository.
 func SetUpdateHook(repoPath, content string) (err error) {
-	log("Setting update hook: %s", repoPath)
+	log.Debug("Setting update hook: %s", repoPath)
 	hookPath := path.Join(repoPath, HookPathUpdate)
 	isExist, err := util.IsExist(hookPath)
 	if err != nil {
-		log("Unable to check if %s exists. Error: %v", hookPath, err)
+		log.Debug("Unable to check if %s exists. Error: %v", hookPath, err)
 		return err
 	}
 	if isExist {
diff --git a/modules/git/last_commit_cache.go b/modules/git/last_commit_cache.go
index 37a59e1fa8..e2d296641f 100644
--- a/modules/git/last_commit_cache.go
+++ b/modules/git/last_commit_cache.go
@@ -7,6 +7,8 @@ package git
 import (
 	"crypto/sha256"
 	"fmt"
+
+	"code.gitea.io/gitea/modules/log"
 )
 
 // Cache represents a caching interface
@@ -24,6 +26,6 @@ func (c *LastCommitCache) getCacheKey(repoPath, ref, entryPath string) string {
 
 // Put put the last commit id with commit and entry path
 func (c *LastCommitCache) Put(ref, entryPath, commitID string) error {
-	log("LastCommitCache save: [%s:%s:%s]", ref, entryPath, commitID)
+	log.Debug("LastCommitCache save: [%s:%s:%s]", ref, entryPath, commitID)
 	return c.cache.Put(c.getCacheKey(c.repoPath, ref, entryPath), commitID, c.ttl())
 }
diff --git a/modules/git/last_commit_cache_gogit.go b/modules/git/last_commit_cache_gogit.go
index 16fb1c988c..b8e0db46a9 100644
--- a/modules/git/last_commit_cache_gogit.go
+++ b/modules/git/last_commit_cache_gogit.go
@@ -10,6 +10,8 @@ import (
 	"context"
 	"path"
 
+	"code.gitea.io/gitea/modules/log"
+
 	"github.com/go-git/go-git/v5/plumbing/object"
 	cgobject "github.com/go-git/go-git/v5/plumbing/object/commitgraph"
 )
@@ -41,9 +43,9 @@ func NewLastCommitCache(repoPath string, gitRepo *Repository, ttl func() int64,
 func (c *LastCommitCache) Get(ref, entryPath string) (interface{}, error) {
 	v := c.cache.Get(c.getCacheKey(c.repoPath, ref, entryPath))
 	if vs, ok := v.(string); ok {
-		log("LastCommitCache hit level 1: [%s:%s:%s]", ref, entryPath, vs)
+		log.Debug("LastCommitCache hit level 1: [%s:%s:%s]", ref, entryPath, vs)
 		if commit, ok := c.commitCache[vs]; ok {
-			log("LastCommitCache hit level 2: [%s:%s:%s]", ref, entryPath, vs)
+			log.Debug("LastCommitCache hit level 2: [%s:%s:%s]", ref, entryPath, vs)
 			return commit, nil
 		}
 		id, err := c.repo.ConvertToSHA1(vs)
diff --git a/modules/git/last_commit_cache_nogogit.go b/modules/git/last_commit_cache_nogogit.go
index 84c8ee132c..ff9f9ff1cf 100644
--- a/modules/git/last_commit_cache_nogogit.go
+++ b/modules/git/last_commit_cache_nogogit.go
@@ -10,6 +10,8 @@ import (
 	"bufio"
 	"context"
 	"path"
+
+	"code.gitea.io/gitea/modules/log"
 )
 
 // LastCommitCache represents a cache to store last commit
@@ -39,9 +41,9 @@ func NewLastCommitCache(repoPath string, gitRepo *Repository, ttl func() int64,
 func (c *LastCommitCache) Get(ref, entryPath string, wr WriteCloserError, rd *bufio.Reader) (interface{}, error) {
 	v := c.cache.Get(c.getCacheKey(c.repoPath, ref, entryPath))
 	if vs, ok := v.(string); ok {
-		log("LastCommitCache hit level 1: [%s:%s:%s]", ref, entryPath, vs)
+		log.Debug("LastCommitCache hit level 1: [%s:%s:%s]", ref, entryPath, vs)
 		if commit, ok := c.commitCache[vs]; ok {
-			log("LastCommitCache hit level 2: [%s:%s:%s]", ref, entryPath, vs)
+			log.Debug("LastCommitCache hit level 2: [%s:%s:%s]", ref, entryPath, vs)
 			return commit, nil
 		}
 		id, err := c.repo.ConvertToSHA1(vs)
diff --git a/modules/git/parse_nogogit.go b/modules/git/parse_nogogit.go
index b45b31f239..667111ec4a 100644
--- a/modules/git/parse_nogogit.go
+++ b/modules/git/parse_nogogit.go
@@ -13,6 +13,8 @@ import (
 	"io"
 	"strconv"
 	"strings"
+
+	"code.gitea.io/gitea/modules/log"
 )
 
 // ParseTreeEntries parses the output of a `git ls-tree -l` command.
@@ -120,7 +122,7 @@ loop:
 		case "40000":
 			entry.entryMode = EntryModeTree
 		default:
-			log("Unknown mode: %v", string(mode))
+			log.Debug("Unknown mode: %v", string(mode))
 			return nil, fmt.Errorf("unknown mode: %v", string(mode))
 		}
 
diff --git a/modules/git/repo_base_nogogit.go b/modules/git/repo_base_nogogit.go
index c7d6019d77..1675967d18 100644
--- a/modules/git/repo_base_nogogit.go
+++ b/modules/git/repo_base_nogogit.go
@@ -12,6 +12,8 @@ import (
 	"context"
 	"errors"
 	"path/filepath"
+
+	"code.gitea.io/gitea/modules/log"
 )
 
 // Repository represents a Git repository.
@@ -54,7 +56,7 @@ func OpenRepository(repoPath string) (*Repository, error) {
 // CatFileBatch obtains a CatFileBatch for this repository
 func (repo *Repository) CatFileBatch() (WriteCloserError, *bufio.Reader, func()) {
 	if repo.batchCancel == nil || repo.batchReader.Buffered() > 0 {
-		log("Opening temporary cat file batch for: %s", repo.Path)
+		log.Debug("Opening temporary cat file batch for: %s", repo.Path)
 		return CatFileBatch(repo.Path)
 	}
 	return repo.batchWriter, repo.batchReader, func() {}
@@ -63,7 +65,7 @@ func (repo *Repository) CatFileBatch() (WriteCloserError, *bufio.Reader, func())
 // CatFileBatchCheck obtains a CatFileBatchCheck for this repository
 func (repo *Repository) CatFileBatchCheck() (WriteCloserError, *bufio.Reader, func()) {
 	if repo.checkCancel == nil || repo.checkReader.Buffered() > 0 {
-		log("Opening temporary cat file batch-check: %s", repo.Path)
+		log.Debug("Opening temporary cat file batch-check: %s", repo.Path)
 		return CatFileBatchCheck(repo.Path)
 	}
 	return repo.checkWriter, repo.checkReader, func() {}
diff --git a/modules/git/repo_branch_nogogit.go b/modules/git/repo_branch_nogogit.go
index dd34e48899..7d10b8ba0f 100644
--- a/modules/git/repo_branch_nogogit.go
+++ b/modules/git/repo_branch_nogogit.go
@@ -12,6 +12,8 @@ import (
 	"bytes"
 	"io"
 	"strings"
+
+	"code.gitea.io/gitea/modules/log"
 )
 
 // IsObjectExist returns true if given reference exists in the repository.
@@ -24,7 +26,7 @@ func (repo *Repository) IsObjectExist(name string) bool {
 	defer cancel()
 	_, err := wr.Write([]byte(name + "\n"))
 	if err != nil {
-		log("Error writing to CatFileBatchCheck %v", err)
+		log.Debug("Error writing to CatFileBatchCheck %v", err)
 		return false
 	}
 	sha, _, _, err := ReadBatchLine(rd)
@@ -41,7 +43,7 @@ func (repo *Repository) IsReferenceExist(name string) bool {
 	defer cancel()
 	_, err := wr.Write([]byte(name + "\n"))
 	if err != nil {
-		log("Error writing to CatFileBatchCheck %v", err)
+		log.Debug("Error writing to CatFileBatchCheck %v", err)
 		return false
 	}
 	_, _, _, err = ReadBatchLine(rd)
diff --git a/modules/git/repo_commit_nogogit.go b/modules/git/repo_commit_nogogit.go
index d00c1bfc67..afd5166f1d 100644
--- a/modules/git/repo_commit_nogogit.go
+++ b/modules/git/repo_commit_nogogit.go
@@ -12,6 +12,8 @@ import (
 	"io"
 	"io/ioutil"
 	"strings"
+
+	"code.gitea.io/gitea/modules/log"
 )
 
 // ResolveReference resolves a name to a reference
@@ -110,7 +112,7 @@ func (repo *Repository) getCommitFromBatchReader(rd *bufio.Reader, id SHA1) (*Co
 
 		return commit, nil
 	default:
-		log("Unknown typ: %s", typ)
+		log.Debug("Unknown typ: %s", typ)
 		_, err = rd.Discard(int(size) + 1)
 		if err != nil {
 			return nil, err
diff --git a/modules/git/repo_language_stats_nogogit.go b/modules/git/repo_language_stats_nogogit.go
index 46b084cf01..1684f21d16 100644
--- a/modules/git/repo_language_stats_nogogit.go
+++ b/modules/git/repo_language_stats_nogogit.go
@@ -13,6 +13,7 @@ import (
 	"math"
 
 	"code.gitea.io/gitea/modules/analyze"
+	"code.gitea.io/gitea/modules/log"
 
 	"github.com/go-enry/go-enry/v2"
 )
@@ -34,19 +35,19 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
 	}
 	shaBytes, typ, size, err := ReadBatchLine(batchReader)
 	if typ != "commit" {
-		log("Unable to get commit for: %s. Err: %v", commitID, err)
+		log.Debug("Unable to get commit for: %s. Err: %v", commitID, err)
 		return nil, ErrNotExist{commitID, ""}
 	}
 
 	sha, err := NewIDFromString(string(shaBytes))
 	if err != nil {
-		log("Unable to get commit for: %s. Err: %v", commitID, err)
+		log.Debug("Unable to get commit for: %s. Err: %v", commitID, err)
 		return nil, ErrNotExist{commitID, ""}
 	}
 
 	commit, err := CommitFromReader(repo, sha, io.LimitReader(batchReader, size))
 	if err != nil {
-		log("Unable to get commit for: %s. Err: %v", commitID, err)
+		log.Debug("Unable to get commit for: %s. Err: %v", commitID, err)
 		return nil, err
 	}
 	if _, err = batchReader.Discard(1); err != nil {
@@ -79,7 +80,7 @@ func (repo *Repository) GetLanguageStats(commitID string) (map[string]int64, err
 			}
 			_, _, size, err := ReadBatchLine(batchReader)
 			if err != nil {
-				log("Error reading blob: %s Err: %v", f.ID.String(), err)
+				log.Debug("Error reading blob: %s Err: %v", f.ID.String(), err)
 				return nil, err
 			}
 
diff --git a/modules/git/repo_tag.go b/modules/git/repo_tag.go
index 59ab702096..d91c3ca979 100644
--- a/modules/git/repo_tag.go
+++ b/modules/git/repo_tag.go
@@ -8,6 +8,8 @@ package git
 import (
 	"fmt"
 	"strings"
+
+	"code.gitea.io/gitea/modules/log"
 )
 
 // TagPrefix tags prefix path on the repository
@@ -33,7 +35,7 @@ func (repo *Repository) CreateAnnotatedTag(name, message, revision string) error
 func (repo *Repository) getTag(tagID SHA1, name string) (*Tag, error) {
 	t, ok := repo.tagCache.Get(tagID.String())
 	if ok {
-		log("Hit cache: %s", tagID)
+		log.Debug("Hit cache: %s", tagID)
 		tagClone := *t.(*Tag)
 		tagClone.Name = name // This is necessary because lightweight tags may have same id
 		return &tagClone, nil
diff --git a/routers/init.go b/routers/init.go
index bbf39a3f50..e52e547517 100644
--- a/routers/init.go
+++ b/routers/init.go
@@ -42,16 +42,6 @@ import (
 	"code.gitea.io/gitea/services/webhook"
 )
 
-func checkRunMode() {
-	switch setting.RunMode {
-	case "dev", "test":
-		git.Debug = true
-	default:
-		git.Debug = false
-	}
-	log.Info("Run Mode: %s", strings.Title(setting.RunMode))
-}
-
 // NewServices init new services
 func NewServices() {
 	setting.NewServices()
@@ -84,7 +74,7 @@ func GlobalInit(ctx context.Context) {
 	log.Trace("AppWorkPath: %s", setting.AppWorkPath)
 	log.Trace("Custom path: %s", setting.CustomPath)
 	log.Trace("Log path: %s", setting.LogRootPath)
-	checkRunMode()
+	log.Info("Run Mode: %s", strings.Title(setting.RunMode))
 
 	// Setup i18n
 	translation.InitLocales()
diff --git a/services/gitdiff/gitdiff_test.go b/services/gitdiff/gitdiff_test.go
index f8c25a3912..2386552efe 100644
--- a/services/gitdiff/gitdiff_test.go
+++ b/services/gitdiff/gitdiff_test.go
@@ -13,7 +13,6 @@ import (
 	"testing"
 
 	"code.gitea.io/gitea/models"
-	"code.gitea.io/gitea/modules/git"
 	"code.gitea.io/gitea/modules/highlight"
 	"code.gitea.io/gitea/modules/setting"
 	jsoniter "github.com/json-iterator/go"
@@ -514,7 +513,6 @@ func TestDiffLine_GetCommentSide(t *testing.T) {
 }
 
 func TestGetDiffRangeWithWhitespaceBehavior(t *testing.T) {
-	git.Debug = true
 	for _, behavior := range []string{"-w", "--ignore-space-at-eol", "-b", ""} {
 		diffs, err := GetDiffRangeWithWhitespaceBehavior("./testdata/academic-module", "559c156f8e0178b71cb44355428f24001b08fc68", "bd7063cc7c04689c4d082183d32a604ed27a24f9",
 			setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffFiles, behavior)