nix/scripts/ghpr.sh

26 lines
847 B
Bash

base=$(git rev-parse --abbrev-ref HEAD)
upstream="${1:-main}"
remote_ref="origin/$upstream"
unpushed=$(git log "$remote_ref"..HEAD --oneline 2>/dev/null)
if [[ -z "$unpushed" ]]; then
if git diff --cached --quiet; then
echo "No unpushed commits and no staged changes"
exit 1
fi
echo "No unpushed commits, but staged changes found. Opening commit dialog..."
git commit
fi
msg=$(git log "$remote_ref"..HEAD --format='%s' --reverse | head -1)
branch=$(echo "$msg" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g' | sed 's/^-//;s/-$//')
git checkout -b "$branch"
git checkout "$base"
git reset --hard "$remote_ref"
git checkout "$branch"
git push -u origin "$branch"
gh pr create --base "$upstream" --fill --web 2>/dev/null || gh pr create --base "$upstream" --fill
gh pr view "$branch" --json url -q '.url'