From fd8b956ab23176e669c29e4086c1f016be419ed9 Mon Sep 17 00:00:00 2001 From: t Date: Mon, 13 Jul 2026 11:38:42 -0600 Subject: Skip symlinked outputs in the managed .gitignore --- main.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'main.go') diff --git a/main.go b/main.go index 299724e..96c1115 100644 --- a/main.go +++ b/main.go @@ -858,12 +858,40 @@ func (s *site) gitignore(outputs []string) ([]byte, error) { if strings.ContainsAny(output, "\r\n") { return nil, fmt.Errorf("cannot add output to .gitignore: %q", output) } + symlinked, err := s.hasSymlinkedParent(output) + if err != nil { + return nil, err + } + if symlinked { + continue + } kept.WriteString("/" + escapeGitignore(output) + "\n") } kept.WriteString(gitignoreEnd + "\n") return []byte(kept.String()), nil } +func (s *site) hasSymlinkedParent(output string) (bool, error) { + current := s.root + for _, part := range strings.Split(path.Dir(output), "/") { + if part == "." { + continue + } + current = filepath.Join(current, part) + info, err := os.Lstat(current) + if errors.Is(err, os.ErrNotExist) { + return false, nil + } + if err != nil { + return false, err + } + if info.Mode()&os.ModeSymlink != 0 { + return true, nil + } + } + return false, nil +} + func escapeGitignore(value string) string { return strings.NewReplacer( `\`, `\\`, " ", `\ `, "#", `\#`, "!", `\!`, -- cgit v1.3