forked from forgejo/forgejo
move code.gitea.io/git to code.gitea.io/gitea/modules/git (#6364)
* move code.gitea.io/git to code.gitea.io/gitea/modules/git * fix imports * fix fmt * fix misspell * remove wrong tests data * fix unit tests * fix tests * fix tests * fix tests * fix tests * fix tests * enable Debug to trace the failure tests * fix tests * fix tests * fix tests * fix tests * fix tests * comment commit count tests since git clone depth is 50 * fix tests * update from code.gitea.io/git * revert change to makefile
This commit is contained in:
parent
d056bf300f
commit
d578b71d61
174 changed files with 3044 additions and 145 deletions
91
modules/git/git.go
Normal file
91
modules/git/git.go
Normal file
|
@ -0,0 +1,91 @@
|
|||
// Copyright 2015 The Gogs Authors. All rights reserved.
|
||||
// Copyright 2017 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 (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/mcuadros/go-version"
|
||||
)
|
||||
|
||||
// Version return this package's current version
|
||||
func Version() string {
|
||||
return "0.4.2"
|
||||
}
|
||||
|
||||
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
|
||||
GitVersionRequired = "1.7.2"
|
||||
)
|
||||
|
||||
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...)
|
||||
}
|
||||
}
|
||||
|
||||
var gitVersion string
|
||||
|
||||
// BinVersion returns current Git version from shell.
|
||||
func BinVersion() (string, error) {
|
||||
if len(gitVersion) > 0 {
|
||||
return gitVersion, nil
|
||||
}
|
||||
|
||||
stdout, err := NewCommand("version").Run()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
fields := strings.Fields(stdout)
|
||||
if len(fields) < 3 {
|
||||
return "", fmt.Errorf("not enough output: %s", stdout)
|
||||
}
|
||||
|
||||
// Handle special case on Windows.
|
||||
i := strings.Index(fields[2], "windows")
|
||||
if i >= 1 {
|
||||
gitVersion = fields[2][:i-1]
|
||||
return gitVersion, nil
|
||||
}
|
||||
|
||||
gitVersion = fields[2]
|
||||
return gitVersion, nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
gitVersion, err := BinVersion()
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("Git version missing: %v", err))
|
||||
}
|
||||
if version.Compare(gitVersion, GitVersionRequired, "<") {
|
||||
panic(fmt.Sprintf("Git version not supported. Requires version > %v", GitVersionRequired))
|
||||
}
|
||||
}
|
||||
|
||||
// Fsck verifies the connectivity and validity of the objects in the database
|
||||
func Fsck(repoPath string, timeout time.Duration, args ...string) error {
|
||||
// Make sure timeout makes sense.
|
||||
if timeout <= 0 {
|
||||
timeout = -1
|
||||
}
|
||||
_, err := NewCommand("fsck").AddArguments(args...).RunInDirTimeout(timeout, repoPath)
|
||||
return err
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue