mirror of
https://github.com/trufflesecurity/trufflehog.git
synced 2024-11-10 15:14:38 +00:00
40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
package git
|
|
|
|
import (
|
|
"fmt"
|
|
"os/exec"
|
|
"regexp"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/go-errors/errors"
|
|
)
|
|
|
|
// GitCmdCheck checks if git is installed and meets 2.20.0<=x<3.0.0 version requirements.
|
|
func GitCmdCheck() error {
|
|
if errors.Is(exec.Command("git").Run(), exec.ErrNotFound) {
|
|
return fmt.Errorf("'git' command not found in $PATH. Make sure git is installed and included in $PATH")
|
|
}
|
|
|
|
// Check the version is greater than or equal to 2.20.0
|
|
out, err := exec.Command("git", "--version").Output()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to check git version: %w", err)
|
|
}
|
|
|
|
// Extract the version string using a regex to find the version numbers
|
|
r := regexp.MustCompile(`\d+\.\d+\.\d+`)
|
|
versionStr := r.FindString(string(out))
|
|
versionParts := strings.Split(versionStr, ".")
|
|
|
|
// Parse version numbers
|
|
major, _ := strconv.Atoi(versionParts[0])
|
|
minor, _ := strconv.Atoi(versionParts[1])
|
|
|
|
// Compare with version 2.20.0<=x<3.0.0
|
|
if major == 2 && minor >= 20 {
|
|
return nil
|
|
} else {
|
|
return fmt.Errorf("git version is %s, but must be greater than or equal to 2.20.0, and less than 3.0.0", versionStr)
|
|
}
|
|
}
|