Fix: Use dynamic JSONL path in daemon sync branch operations (#361)
Fixes #359 The daemon's sync branch logic was hardcoding the JSONL path to .beads/beads.jsonl, ignoring the dynamic discovery logic used elsewhere. This caused sync failures in repositories where the JSONL file has a different name (e.g., beads.base.jsonl, issues.jsonl). Changes: - Updated cmd/bd/daemon_sync_branch.go to use findJSONLPath() instead of hardcoded path - Implemented relative path calculation for correct worktree placement - Applied fix to both push (sync to worktree) and pull (sync from worktree) operations This works together with PR #360 to fix team/protected branch sync issues. Co-authored-by: Charles P. Cross <cpdata@users.noreply.github.com>
This commit is contained in:
@@ -64,14 +64,24 @@ func syncBranchCommitAndPush(ctx context.Context, store storage.Storage, autoPus
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Sync JSONL file to worktree
|
// Sync JSONL file to worktree
|
||||||
// Use hardcoded relative path since JSONL is always at .beads/beads.jsonl
|
// Get the actual JSONL path (could be issues.jsonl, beads.base.jsonl, etc.)
|
||||||
jsonlRelPath := filepath.Join(".beads", "beads.jsonl")
|
jsonlPath := findJSONLPath()
|
||||||
|
if jsonlPath == "" {
|
||||||
|
return false, fmt.Errorf("JSONL path not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert absolute path to relative path from repo root
|
||||||
|
jsonlRelPath, err := filepath.Rel(repoRoot, jsonlPath)
|
||||||
|
if err != nil {
|
||||||
|
return false, fmt.Errorf("failed to get relative JSONL path: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
if err := wtMgr.SyncJSONLToWorktree(worktreePath, jsonlRelPath); err != nil {
|
if err := wtMgr.SyncJSONLToWorktree(worktreePath, jsonlRelPath); err != nil {
|
||||||
return false, fmt.Errorf("failed to sync JSONL to worktree: %w", err)
|
return false, fmt.Errorf("failed to sync JSONL to worktree: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for changes in worktree
|
// Check for changes in worktree
|
||||||
worktreeJSONLPath := filepath.Join(worktreePath, ".beads", "beads.jsonl")
|
worktreeJSONLPath := filepath.Join(worktreePath, jsonlRelPath)
|
||||||
hasChanges, err := gitHasChangesInWorktree(ctx, worktreePath, worktreeJSONLPath)
|
hasChanges, err := gitHasChangesInWorktree(ctx, worktreePath, worktreeJSONLPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, fmt.Errorf("failed to check for changes in worktree: %w", err)
|
return false, fmt.Errorf("failed to check for changes in worktree: %w", err)
|
||||||
@@ -225,9 +235,21 @@ func syncBranchPull(ctx context.Context, store storage.Storage, log daemonLogger
|
|||||||
|
|
||||||
log.log("Pulled sync branch %s", syncBranch)
|
log.log("Pulled sync branch %s", syncBranch)
|
||||||
|
|
||||||
|
// Get the actual JSONL path
|
||||||
|
jsonlPath := findJSONLPath()
|
||||||
|
if jsonlPath == "" {
|
||||||
|
return false, fmt.Errorf("JSONL path not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert to relative path
|
||||||
|
jsonlRelPath, err := filepath.Rel(repoRoot, jsonlPath)
|
||||||
|
if err != nil {
|
||||||
|
return false, fmt.Errorf("failed to get relative JSONL path: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
// Copy JSONL back to main repo
|
// Copy JSONL back to main repo
|
||||||
worktreeJSONLPath := filepath.Join(worktreePath, ".beads", "beads.jsonl")
|
worktreeJSONLPath := filepath.Join(worktreePath, jsonlRelPath)
|
||||||
mainJSONLPath := filepath.Join(repoRoot, ".beads", "beads.jsonl")
|
mainJSONLPath := jsonlPath
|
||||||
|
|
||||||
// Check if worktree JSONL exists
|
// Check if worktree JSONL exists
|
||||||
if _, err := os.Stat(worktreeJSONLPath); os.IsNotExist(err) {
|
if _, err := os.Stat(worktreeJSONLPath); os.IsNotExist(err) {
|
||||||
|
|||||||
Reference in New Issue
Block a user