-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgit-pr
More file actions
executable file
·82 lines (67 loc) · 2.67 KB
/
git-pr
File metadata and controls
executable file
·82 lines (67 loc) · 2.67 KB
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
#!/usr/bin/env bash
set -o errexit
trap "declare -p BASH_COMMAND; echo FAILED" ERR
pr_num="$1"; shift
# gh pr view --comments "$pr_num" || true
# printf '\n\n'
# printf '%*s\n' "$(tput cols)" '' | tr ' ' '-'
# printf '\n\n'
# gh pr checks "$pr_num" || true
# printf '\n\n'
# printf '%*s\n' "$(tput cols)" '' | tr ' ' '-'
# printf '\n\n'
IFS=$'\t' read pr_url base_url base_label base_sha head_label head_sha < <( \
gh api "repos/:owner/:repo/pulls/$pr_num" \
--jq '.html_url + "\t" + .base.repo.clone_url + "\t" + .base.label + "\t" + .base.sha + "\t" + .head.label + "\t" + .head.sha' \
)
#TODO:vruyr Set HEAD branch pr/1000/review instead of detaching it.
#TODO:vruyr Print instructions on how to update the PR branches.
#TODO:vruyr Instead of using $base_sha for the review branch, use the last review point, if any and increment the number.
#TODO:vruyr Switch to zsh and use `(q)` to escape env var contents - ${(q)pr_num} etc.
# Fetch PR branches, set upstreams, switch to review branch & pull in the changes from the PR branch"
echo git fetch "$base_url" \\
echo " $base_sha:refs/heads/pr/${pr_num}/base \\"
echo " $head_sha:refs/heads/pr/${pr_num}/head \\"
echo '&& git branch pr/'${pr_num}'/review1 "$(git merge-base pr/'${pr_num}'/{base,head})" \'
echo '&& git branch pr/'${pr_num}'/review1 --set-upstream-to=pr/'${pr_num}'/head \'
echo '&& git branch pr/'${pr_num}'/head --set-upstream-to=pr/'${pr_num}'/base \'
echo '&& git diff --exit-code HEAD -- \'
echo '&& git switch --discard-changes --recurse-submodules pr/'${pr_num}'/review1 \'
echo '&& git restore --worktree --source pr/'${pr_num}'/head -- . \'
echo '&& git branch -lavv \'
echo '&& git status'
#TODO:vruyr Deduce the ${remote_name} using ${base_label}.
# git branch "pr/${pr_num}/base" --set-upstream-to="remotes/${remote_name}/${base_label#*:}"
# printf '\n\n'
# printf 'Pull Request URL: %s\n' "$pr_url"
# printf '\n'
#
# printf '%*s\n' "$(tput cols)" '' | tr ' ' '-'
#
# printf '\n\n'
# printf 'Stage all changes that look good and run:'
# printf '\n'
# printf ' git reset --soft %q\n' "pr/${pr_num}/head"
# printf '\n\n'
#
# printf '%*s\n' "$(tput cols)" '' | tr ' ' '-'
#
# printf '\n\n'
# git branch -lavv 'pr/*' $((git for-each-ref 'refs/remotes/*/HEAD' --format '%(refname)'; echo HEAD) | xargs -n1 git symbolic-ref | sed -E 's.refs/(remotes|heads)/..')
# printf '\n\n'
#
# printf '%*s\n' "$(tput cols)" '' | tr ' ' '-'
# printf '\n\n'
# git status
#
# printf '\n\n'
# printf '%*s\n' "$(tput cols)" '' | tr ' ' '-'
# printf '\n\n'
# (
# echo "gh pr view --web $pr_num"
# echo "git smerge"
# echo "activate-app.swift && vsc ."
# ) | fzf --reverse --height ~100% --multi | while read -r cmd;
# do
# eval "$cmd"
# done