feat(dolt): auto-commit write commands and set explicit commit authors (#1267)

* /{cmd,docs,internal}: autocommit writes in dolt backend

Executed-By: beads/crew/emma
Rig: beads
Role: crew

* /{cmd,internal}: fix commit author

Executed-By: beads/crew/emma
Rig: beads
Role: crew

* /cmd/bd: fix race condition

Executed-By: beads/crew/emma
Rig: beads
Role: crew

---------

Co-authored-by: Test <test@example.com>
This commit is contained in:
Dustin Brown
2026-01-25 17:02:12 -08:00
committed by GitHub
parent 9f0a85d111
commit 132f9d2f6f
3 changed files with 23 additions and 10 deletions

View File

@@ -4,6 +4,7 @@ import (
"context"
"fmt"
"sync"
"sync/atomic"
"time"
)
@@ -47,6 +48,11 @@ type FlushManager struct {
// State tracking
shutdownOnce sync.Once // Ensures Shutdown() is idempotent
// didWrite tracks whether any command marked the DB as modified during this process run.
// This is used for Dolt auto-commit decisions in PersistentPostRun.
// Atomic to remain race-safe when called from concurrent goroutines.
didWrite atomic.Bool
}
// markDirtyEvent signals that the database has been modified
@@ -87,12 +93,27 @@ func NewFlushManager(enabled bool, debounceDuration time.Duration) *FlushManager
return fm
}
// RecordWrite marks that the current command performed a DB write.
// This is independent of whether auto-flush is enabled; callers may want Dolt
// auto-commit even when --no-auto-flush is set.
func (fm *FlushManager) RecordWrite() {
fm.didWrite.Store(true)
}
// DidWrite returns true if RecordWrite/MarkDirty was called during this command.
func (fm *FlushManager) DidWrite() bool {
return fm.didWrite.Load()
}
// MarkDirty marks the database as dirty and schedules a debounced flush.
// Safe to call from multiple goroutines. Non-blocking.
//
// If called multiple times within debounceDuration, only one flush occurs
// after the last call (debouncing).
func (fm *FlushManager) MarkDirty(fullExport bool) {
// Always track that a write happened, even if auto-flush is disabled.
fm.RecordWrite()
if !fm.enabled {
return
}