2016-11-03 23:16:01 +01:00
// Copyright 2015 The Gogs 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"
)
2016-12-22 17:30:52 +08:00
// Version return this package's current version
2016-11-03 23:16:01 +01:00
func Version ( ) string {
2016-12-22 17:30:52 +08:00
return "0.4.2"
2016-11-03 23:16:01 +01:00
}
var (
// Debug enables verbose logging on everything.
// This should be false in case Gogs starts in SSH mode.
2016-12-22 17:30:52 +08:00
Debug = false
// Prefix the log prefix
2016-11-03 23:16:01 +01:00
Prefix = "[git-module] "
)
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
2016-12-22 17:30:52 +08:00
// BinVersion returns current Git version from shell.
2016-11-03 23:16:01 +01:00
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 ( ) {
BinVersion ( )
}
// 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
}