Files
git.taskfile.build/bin/edit-prompt
T

98 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
edit-prompt() {
local commit=""
local repo_path="${2:-.}"
if [[ -n "$1" ]]; then
if [[ -n "$2" ]]; then
commit="$1"
elif [[ "$1" == */* ]] || [[ "$1" == "." ]]; then
repo_path="$1"
else
commit="$1"
fi
fi
if [[ ! -d "$repo_path/.git" ]]; then
echo "Error: No .git directory found in $repo_path."
return 1
fi
local worktree_path="$repo_path/tmp/prompt-log"
if [[ ! -d "$worktree_path" ]]; then
echo "No prompt-log worktree found. Run init-prompt-log first."
return 1
fi
local target_file
if [[ -z "$commit" ]]; then
if ! command -v fzf &> /dev/null; then
echo "Error: fzf is required for interactive selection."
return 1
fi
local selected
selected="$(
for f in "$worktree_path"/*.md; do
if [[ -f "$f" ]]; then
local f_title f_date f_commit
f_title="$(grep -m1 '^title:' "$f" | sed 's/^title:[[:space:]]*//; s/^"\(.*\)"$/\1/; s/'"'"'\(.*\)'"'"'$/\1/')"
f_date="$(basename "$f")"
f_date="${f_date%%_*}"
echo "$f_date|$f_title|$(basename "$f")"
fi
done | sort -t'|' -k1,1 -r | while IFS='|' read -r _ title filename; do
echo "$filename: $title"
done | fzf | cut -d: -f1
)"
if [[ -z "$selected" ]]; then
echo "No prompt selected."
return 0
fi
target_file="$worktree_path/$selected"
else
local matching_files=()
for f in "$worktree_path"/${commit}*.md; do
if [[ -f "$f" ]]; then
matching_files+=("$f")
fi
done
if [[ ${#matching_files[@]} -eq 0 ]]; then
echo "Error: No prompt file found starting with date prefix '$commit'."
return 1
elif [[ ${#matching_files[@]} -gt 1 ]]; then
echo "Error: Ambiguous date prefix '$commit'. Matches:"
printf '%s\n' "${matching_files[@]}"
return 1
fi
target_file="${matching_files[0]}"
fi
if [[ -n "$EDITOR" ]]; then
"$EDITOR" "$target_file"
else
echo "Set EDITOR to open the prompt file automatically."
return 1
fi
local filename
filename="$(basename "$target_file")"
(
cd "$worktree_path" || exit 1
git add "$filename"
git commit -m "feat: update prompt file" -m "$filename"
git push 2>/dev/null || echo "Warning: push failed."
) || echo "Warning: commit/push step failed."
}
ep() {
edit-prompt "$@"
}