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 }