blob: f5ba7fb65fe50853521683fad38041ca6074d49b (
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
#!/usr/bin/env bash
# flashcard-sync: stats check + regenerate Anki apkg + place at ~/sync/phone/anki/
#
# Wraps flashcard-stats.py + flashcard-to-anki.py (and optionally
# flashcard-diff-ids.py) for the canonical "rewrote the deck, now ship
# it" step in the flashcard-review workflow.
#
# Usage:
# flashcard-sync <source.org>
# flashcard-sync <source.org> --diff-against <previous-version.org>
#
# Exits non-zero when the stats check warns, when --diff-against shows
# any disappeared / appeared IDs, or when flashcard-to-anki.py fails. The
# Anki apkg is not written when any gate fails.
set -euo pipefail
usage() {
cat >&2 <<'EOF'
usage: flashcard-sync <source.org> [--diff-against <previous-version.org>]
EOF
exit 2
}
if [[ $# -lt 1 ]]; then
usage
fi
SOURCE="$1"
shift
DIFF_AGAINST=""
while [[ $# -gt 0 ]]; do
case "$1" in
--diff-against)
[[ $# -ge 2 ]] || usage
DIFF_AGAINST="$2"
shift 2
;;
-h|--help)
usage
;;
*)
echo "unknown arg: $1" >&2
usage
;;
esac
done
if [[ ! -f "$SOURCE" ]]; then
echo "error: $SOURCE not found" >&2
exit 2
fi
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
STATS="$SCRIPT_DIR/flashcard-stats.py"
DIFF_IDS="$SCRIPT_DIR/flashcard-diff-ids.py"
TO_ANKI="$SCRIPT_DIR/flashcard-to-anki.py"
for helper in "$STATS" "$DIFF_IDS" "$TO_ANKI"; do
if [[ ! -f "$helper" ]]; then
echo "error: helper $helper not found" >&2
exit 2
fi
done
echo "=== flashcard-sync: $SOURCE ==="
echo
echo "--- stats ---"
if ! python3 "$STATS" "$SOURCE"; then
echo
echo "stats check failed — fix warnings before sync, or call flashcard-to-anki.py directly to override" >&2
exit 1
fi
echo
if [[ -n "$DIFF_AGAINST" ]]; then
if [[ ! -f "$DIFF_AGAINST" ]]; then
echo "error: $DIFF_AGAINST not found" >&2
exit 2
fi
echo "--- ID preservation ---"
if ! python3 "$DIFF_IDS" "$DIFF_AGAINST" "$SOURCE"; then
echo
echo "ID preservation check failed — SRS state may have been lost" >&2
exit 1
fi
echo
fi
BASENAME="$(basename "$SOURCE" .org)"
OUTPUT="$HOME/sync/phone/anki/${BASENAME}.apkg"
echo "--- regenerate apkg ---"
mkdir -p "$(dirname "$OUTPUT")"
"$TO_ANKI" "$SOURCE" --output "$OUTPUT"
echo
echo "deck synced to $OUTPUT"
|