nub/internal/session/gitexclude.go
Tom a97013d876 initial commit
- v 0.1.0 siehe CHANGELOG.md
2026-07-25 11:08:01 +02:00

41 lines
932 B
Go

package session
import (
"bytes"
"os"
"path/filepath"
)
// EnsureGitExclude trägt .nub/ in .git/info/exclude ein, nicht in die
// .gitignore (4.5) — die gehört dem Repo, nicht dem Tool. Kein Git-Repo:
// no-op.
func EnsureGitExclude(repoRoot string) error {
gitDir := filepath.Join(repoRoot, ".git")
info, err := os.Stat(gitDir)
if err != nil || !info.IsDir() {
return nil
}
excludePath := filepath.Join(gitDir, "info", "exclude")
data, _ := os.ReadFile(excludePath)
if bytes.Contains(data, []byte(".nub/")) {
return nil
}
if err := os.MkdirAll(filepath.Dir(excludePath), 0o755); err != nil {
return err
}
f, err := os.OpenFile(excludePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o644)
if err != nil {
return err
}
defer f.Close()
if len(data) > 0 && data[len(data)-1] != '\n' {
if _, err := f.WriteString("\n"); err != nil {
return err
}
}
_, err = f.WriteString(".nub/\n")
return err
}