41 lines
932 B
Go
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
|
|
}
|