discrawl/internal/cli/sync_lock.go
2026-04-29 14:43:53 +01:00

38 lines
753 B
Go

package cli
import (
"context"
"fmt"
"path/filepath"
"github.com/steipete/discrawl/internal/config"
)
func (r *runtime) withSyncLock(fn func() error) error {
lockPath, err := r.syncLockPath()
if err != nil {
return err
}
release, err := acquireSyncLock(r.ctx, lockPath)
if err != nil {
return err
}
defer func() { _ = release() }()
return fn()
}
func (r *runtime) syncLockPath() (string, error) {
dbPath, err := config.ExpandPath(r.cfg.DBPath)
if err != nil {
return "", configErr(err)
}
return filepath.Join(filepath.Dir(dbPath), ".discrawl-sync.lock"), nil
}
func syncLockErr(ctx context.Context, path string) error {
if ctx.Err() != nil {
return fmt.Errorf("wait for sync lock %s: %w", path, ctx.Err())
}
return nil
}