import: contenido inicial de la skill gitea
This commit is contained in:
79
scripts/pr-view.sh
Normal file
79
scripts/pr-view.sh
Normal file
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env bash
|
||||
# gitea skill — ver detalle de un PR.
|
||||
#
|
||||
# Uso:
|
||||
# pr-view.sh <owner>/<repo> <number>
|
||||
# pr-view.sh <repo> <number> # usa GITEA_DEFAULT_OWNER
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
QUERY="$SKILL_DIR/scripts/query.sh"
|
||||
|
||||
if [[ $# -lt 2 ]]; then
|
||||
cat >&2 <<EOF
|
||||
Uso: pr-view.sh <owner>/<repo> <number>
|
||||
pr-view.sh <repo> <number>
|
||||
|
||||
Ejemplos:
|
||||
pr-view.sh NucleOS/nucleo-infra 14
|
||||
pr-view.sh nucleo-infra 14
|
||||
EOF
|
||||
exit 2
|
||||
fi
|
||||
|
||||
repo_arg="$1"
|
||||
number="$2"
|
||||
|
||||
if [[ "$repo_arg" == */* ]]; then
|
||||
owner="${repo_arg%%/*}"
|
||||
repo="${repo_arg##*/}"
|
||||
else
|
||||
set -a; source "$SKILL_DIR/.env"; set +a
|
||||
owner="${GITEA_DEFAULT_OWNER:?owner no especificado y GITEA_DEFAULT_OWNER vacío}"
|
||||
repo="$repo_arg"
|
||||
fi
|
||||
|
||||
resp="$("$QUERY" "/repos/${owner}/${repo}/pulls/${number}")"
|
||||
|
||||
# Si no es JSON-object o tiene error
|
||||
if [[ "${resp:0:1}" != "{" ]]; then
|
||||
echo "ERROR: respuesta inesperada:" >&2
|
||||
echo "$resp" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$resp" | PYTHONIOENCODING=utf-8 python -c "
|
||||
import json, sys
|
||||
pr = json.load(sys.stdin)
|
||||
if pr.get('message') and not pr.get('number'):
|
||||
print('ERROR:', pr.get('message'), file=sys.stderr); sys.exit(1)
|
||||
n = pr.get('number')
|
||||
title = pr.get('title','')
|
||||
state = 'merged' if pr.get('merged') else pr.get('state','?')
|
||||
head = (pr.get('head') or {}).get('ref','?')
|
||||
base = (pr.get('base') or {}).get('ref','?')
|
||||
user = (pr.get('user') or {}).get('login','?')
|
||||
created = (pr.get('created_at') or '')[:19].replace('T',' ')
|
||||
updated = (pr.get('updated_at') or '')[:19].replace('T',' ')
|
||||
merged_at = (pr.get('merged_at') or '')[:19].replace('T',' ')
|
||||
mergeable = pr.get('mergeable')
|
||||
url = pr.get('html_url')
|
||||
|
||||
print(f'#{n} {title}')
|
||||
print(f' state: {state} (mergeable={mergeable})')
|
||||
print(f' branch: {head} → {base}')
|
||||
print(f' author: {user}')
|
||||
print(f' created: {created}')
|
||||
print(f' updated: {updated}')
|
||||
if merged_at: print(f' merged: {merged_at}')
|
||||
print(f' url: {url}')
|
||||
print()
|
||||
body = (pr.get('body') or '').strip()
|
||||
if body:
|
||||
print('--- body ---')
|
||||
# Truncar si es muy largo
|
||||
if len(body) > 4000:
|
||||
body = body[:4000] + '\n[...truncado, total {} chars]'.format(len(pr.get('body','')))
|
||||
print(body)
|
||||
"
|
||||
Reference in New Issue
Block a user