diff options
Diffstat (limited to 'isTracked.go')
| -rw-r--r-- | isTracked.go | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/isTracked.go b/isTracked.go new file mode 100644 index 0000000..391ecd5 --- /dev/null +++ b/isTracked.go @@ -0,0 +1,62 @@ +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 repoOwnsGoMod(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 true, 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 +} |
