From e94d271f4efe5bc5e0c44372512d3bd1879b5a63 Mon Sep 17 00:00:00 2001 From: Stefan Haubold Date: Mon, 5 Jan 2026 15:17:52 +0100 Subject: [PATCH 1/2] add .entire/logs to .entire/.gitignore, small refactor Entire-Checkpoint: 24ac2c6a5ad4 --- cmd/entire/cli/setup.go | 10 +++------- cmd/entire/cli/strategy/auto_commit.go | 4 ++-- cmd/entire/cli/strategy/common.go | 22 +++++++++++++++------- cmd/entire/cli/strategy/manual_commit.go | 2 +- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/cmd/entire/cli/setup.go b/cmd/entire/cli/setup.go index e958c8c675..6d09a90daa 100644 --- a/cmd/entire/cli/setup.go +++ b/cmd/entire/cli/setup.go @@ -546,13 +546,9 @@ func setupEntireDirectory() error { return fmt.Errorf("failed to create .entire directory: %w", err) } - // Create .gitignore to ignore tmp folder and local settings - gitignorePath := filepath.Join(entireDirAbs, ".gitignore") - gitignoreContent := "tmp/\nsettings.local.json\n" - - //nolint:gosec // G306: Config file needs standard permissions for git - if err := os.WriteFile(gitignorePath, []byte(gitignoreContent), 0o644); err != nil { - return fmt.Errorf("failed to write .gitignore: %w", err) + // Create/update .gitignore with all required entries + if err := strategy.EnsureEntireGitignore(); err != nil { + return fmt.Errorf("failed to setup .gitignore: %w", err) } return nil diff --git a/cmd/entire/cli/strategy/auto_commit.go b/cmd/entire/cli/strategy/auto_commit.go index e210d31a12..c5a45f8a97 100644 --- a/cmd/entire/cli/strategy/auto_commit.go +++ b/cmd/entire/cli/strategy/auto_commit.go @@ -515,10 +515,10 @@ func (s *AutoCommitStrategy) getSessionLogLegacy(checkpointID string) ([]byte, s // EnsureSetup ensures the strategy's required setup is in place. // For auto-commit strategy: -// - Gitignore metadata/ +// - Ensure .entire/.gitignore has all required entries // - Create orphan entire/sessions branch if it doesn't exist func (s *AutoCommitStrategy) EnsureSetup() error { - if err := EnsureMetadataGitignore(); err != nil { + if err := EnsureEntireGitignore(); err != nil { return err } diff --git a/cmd/entire/cli/strategy/common.go b/cmd/entire/cli/strategy/common.go index 451d0e3eed..19b9446b31 100644 --- a/cmd/entire/cli/strategy/common.go +++ b/cmd/entire/cli/strategy/common.go @@ -362,9 +362,9 @@ func GetWorktreePath() (string, error) { return strings.TrimSpace(string(output)), nil } -// EnsureMetadataGitignore ensures metadata/ and current_session are in .entire/.gitignore +// EnsureEntireGitignore ensures all required entries are in .entire/.gitignore // Works correctly from any subdirectory within the repository. -func EnsureMetadataGitignore() error { +func EnsureEntireGitignore() error { // Get absolute path for the gitignore file gitignoreAbs, err := paths.AbsPath(entireGitignore) if err != nil { @@ -377,13 +377,21 @@ func EnsureMetadataGitignore() error { content = string(data) } + // All entries that should be in .entire/.gitignore + requiredEntries := []string{ + "tmp/", + "settings.local.json", + "metadata/", + "current_session", + "logs/", + } + // Track what needs to be added var toAdd []string - if !strings.Contains(content, "metadata/") { - toAdd = append(toAdd, "metadata/") - } - if !strings.Contains(content, "current_session") { - toAdd = append(toAdd, "current_session") + for _, entry := range requiredEntries { + if !strings.Contains(content, entry) { + toAdd = append(toAdd, entry) + } } // Nothing to add diff --git a/cmd/entire/cli/strategy/manual_commit.go b/cmd/entire/cli/strategy/manual_commit.go index ddac630dee..a86fcc4767 100644 --- a/cmd/entire/cli/strategy/manual_commit.go +++ b/cmd/entire/cli/strategy/manual_commit.go @@ -142,7 +142,7 @@ func (s *ManualCommitStrategy) ValidateRepository() error { // EnsureSetup ensures the strategy is properly set up. func (s *ManualCommitStrategy) EnsureSetup() error { - if err := EnsureMetadataGitignore(); err != nil { + if err := EnsureEntireGitignore(); err != nil { return err } // Install generic hooks (they delegate to strategy at runtime) From 66cf18f305fb248bda83faa53a0ecc0a53015004 Mon Sep 17 00:00:00 2001 From: Stefan Haubold Date: Mon, 5 Jan 2026 15:56:52 +0100 Subject: [PATCH 2/2] remove cryptic string builder name Entire-Checkpoint: 510c10bf7b7a --- cmd/entire/cli/strategy/common.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/entire/cli/strategy/common.go b/cmd/entire/cli/strategy/common.go index 19b9446b31..574b8d784b 100644 --- a/cmd/entire/cli/strategy/common.go +++ b/cmd/entire/cli/strategy/common.go @@ -405,11 +405,11 @@ func EnsureEntireGitignore() error { } // Append missing entries to gitignore - var contentSb73 strings.Builder + var sb strings.Builder for _, entry := range toAdd { - contentSb73.WriteString(entry + "\n") + sb.WriteString(entry + "\n") } - content += contentSb73.String() + content += sb.String() if err := os.WriteFile(gitignoreAbs, []byte(content), 0o644); err != nil { //nolint:gosec // path is from AbsPath or constant return fmt.Errorf("failed to write gitignore: %w", err)