63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
|
|
"go.wit.com/lib/protobuf/gitpb"
|
|
)
|
|
|
|
func isTracked(file string) (bool, error) {
|
|
cmd := exec.Command("git", "ls-files", "--error-unmatch", file)
|
|
err := cmd.Run()
|
|
if err == nil {
|
|
return true, nil
|
|
}
|
|
if exitError, ok := err.(*exec.ExitError); ok && exitError.ExitCode() == 1 {
|
|
return false, nil // File not tracked
|
|
}
|
|
return false, fmt.Errorf("error checking tracked status: %v", err)
|
|
}
|
|
|
|
func isIgnored(file string) (bool, error) {
|
|
cmd := exec.Command("git", "check-ignore", "-q", file)
|
|
err := cmd.Run()
|
|
if err == nil {
|
|
return true, nil
|
|
}
|
|
if exitError, ok := err.(*exec.ExitError); ok && exitError.ExitCode() == 1 {
|
|
return false, nil // File not ignored
|
|
}
|
|
return false, fmt.Errorf("error checking ignored status: %v", err)
|
|
}
|
|
|
|
func repoIgnoresGoMod(repo *gitpb.Repo) (bool, error) {
|
|
os.Chdir(repo.FullPath)
|
|
file := "go.mod"
|
|
|
|
tracked, err := isTracked(file)
|
|
if err != nil {
|
|
fmt.Printf("%s Error checking if tracked: %v\n", repo.GoPath, err)
|
|
return false, err
|
|
}
|
|
|
|
if tracked {
|
|
fmt.Printf("%s %s is tracked by Git.\n", repo.GoPath, file)
|
|
return false, nil
|
|
}
|
|
|
|
ignored, err := isIgnored(file)
|
|
if err != nil {
|
|
fmt.Printf("%s Error checking if ignored: %v\n", repo.GoPath, err)
|
|
return false, err
|
|
}
|
|
|
|
if ignored {
|
|
fmt.Printf("%s %s is ignored by Git.\n", repo.GoPath, file)
|
|
return true, nil
|
|
}
|
|
fmt.Printf("%s %s is neither tracked nor ignored by Git.\n", repo.GoPath, file)
|
|
return false, nil
|
|
}
|