summaryrefslogtreecommitdiff
path: root/Omni/Agent/sync-tasks.sh
blob: f4669b7d643074bb12b52697065ce31d7ad0a4f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/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