#!/usr/bin/env bash set -e # Omni/Ide/sync-tasks.sh # Synchronizes the task database with the live branch safely. # Usage: sync-tasks.sh [--commit] COMMIT=0 if [[ "$1" == "--commit" ]]; then COMMIT=1 fi REPO_ROOT="$(git rev-parse --show-toplevel)" cd "$REPO_ROOT" echo "Syncing tasks..." # 1. Import latest tasks from 'live' branch # We use git show to get the file content from the reference branch without checking it out mkdir -p .tasks git show live:.tasks/tasks.jsonl > .tasks/live-tasks.jsonl # 2. Merge logic: Import live tasks into our local DB # The 'task import' command uses timestamps to resolve conflicts (last write wins) if [ -s .tasks/live-tasks.jsonl ]; then echo "Importing tasks from live branch..." "$REPO_ROOT/_/bin/task" import -i .tasks/live-tasks.jsonl fi # 3. Clean up rm .tasks/live-tasks.jsonl # 4. Export current state to ensure it's clean/deduplicated "$REPO_ROOT/_/bin/task" export --flush # 5. Commit changes to .tasks/tasks.jsonl if requested and there are changes if [[ "$COMMIT" -eq 1 ]]; then if [[ -n $(git status --porcelain .tasks/tasks.jsonl) ]]; then echo "Committing task updates..." git add .tasks/tasks.jsonl git commit -m "task: sync database" || true echo "Task updates committed to current branch." else echo "No task changes to commit." fi fi