node/deps/npm/scripts/pr
isaacs f76903433f deps: update npm to 6.10.3
BUGFIXES

* [`27cccfbda`](27cccfbdac)
  [#223](https://github.com/npm/cli/pull/223) vulns → vulnerabilities in
  npm audit output ([@sapegin](https://github.com/sapegin))
* [`d5e865eb7`](d5e865eb79)
  [#222](https://github.com/npm/cli/pull/222)
  [#226](https://github.com/npm/cli/pull/226) install, doctor: don't crash
  if registry unset ([@dmitrydvorkin](https://github.com/dmitrydvorkin),
  [@isaacs](https://github.com/isaacs))
* [`5b3890226`](5b38902265)
  [#227](https://github.com/npm/cli/pull/227)
  [npm.community#9167](https://npm.community/t/npm-err-cb-never-called-permission-denied/9167/5)
  Handle unhandledRejections, tell user what to do when encountering an
  `EACCES` error in the cache.  ([@isaacs](https://github.com/isaacs))

DEPENDENCIES

* [`77516df6e`](77516df6ea)
  `licensee@7.0.3` ([@isaacs](https://github.com/isaacs))
* [`ceb993590`](ceb993590e)
  `query-string@6.8.2` ([@isaacs](https://github.com/isaacs))
* [`4050b9189`](4050b91898)
  `hosted-git-info@2.8.2`
    * [#46](https://github.com/npm/hosted-git-info/issues/46)
      [#43](https://github.com/npm/hosted-git-info/issues/43)
      [#47](https://github.com/npm/hosted-git-info/pull/47)
      [#44](https://github.com/npm/hosted-git-info/pull/44) Add support for
      GitLab subgroups ([@mterrel](https://github.com/mterrel),
      [@isaacs](https://github.com/isaacs),
      [@ybiquitous](https://github.com/ybiquitous))
    * [`3b1d629`](https://github.com/npm/hosted-git-info/commit/3b1d629)
      [#48](https://github.com/npm/hosted-git-info/issues/48) fix http
      protocol using sshurl by default
      ([@fengmk2](https://github.com/fengmk2))
    * [`5d4a8d7`](https://github.com/npm/hosted-git-info/commit/5d4a8d7)
      ignore noCommittish on tarball url generation
      ([@isaacs](https://github.com/isaacs))
    * [`1692435`](https://github.com/npm/hosted-git-info/commit/1692435)
      use gist tarball url that works for anonymous gists
      ([@isaacs](https://github.com/isaacs))
    * [`d5cf830`](d5cf8309be)
      Do not allow invalid gist urls ([@isaacs](https://github.com/isaacs))
    * [`e518222`](e518222435)
      Use LRU cache to prevent unbounded memory consumption
      ([@iarna](https://github.com/iarna))

PR-URL: https://github.com/nodejs/node/pull/29023
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
2019-08-20 13:40:44 -07:00

168 lines
4.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Land a pull request
# Creates a PR-### branch, pulls the commits, opens up an interactive rebase to
# squash, and then annotates the commit with the changelog goobers
#
# Usage:
# pr <url|number> [<upstream remote>=origin]
main () {
if [ "$1" = "finish" ]; then
shift
finish "$@"
return $?
fi
local url="$(prurl "$@")"
local num=$(basename $url)
local prpath="${url#git@github.com:}"
local repo=${prpath%/pull/$num}
local prweb="https://github.com/$prpath"
local root="$(prroot "$url")"
local api="https://api.github.com/repos/${repo}/pulls/${num}"
local user=$(curl -s $api | json user.login)
local ref="$(prref "$url" "$root")"
local curhead="$(git show --no-patch --pretty=%H HEAD)"
local curbranch="$(git rev-parse --abbrev-ref HEAD)"
local cleanlines
IFS=$'\n' cleanlines=($(git status -s -uno))
if [ ${#cleanlines[@]} -ne 0 ]; then
echo "working dir not clean" >&2
IFS=$'\n' echo "${cleanlines[@]}" >&2
echo "aborting PR merge" >&2
fi
# ok, ready to rock
branch=PR-$num
if [ "$curbranch" == "$branch" ]; then
echo "already on $branch, you're on your own" >&2
return 1
fi
me=$(git config github.user || git config user.name)
if [ "$me" == "" ]; then
echo "run 'git config --add github.user <username>'" >&2
return 1
fi
exists=$(git show --no-patch --pretty=%H $branch 2>/dev/null)
if [ "$exists" == "" ]; then
git fetch origin pull/$num/head:$branch
git checkout $branch
else
git checkout $branch
git pull --rebase origin pull/$num/head
fi
git rebase -i $curbranch # squash and test
if [ $? -eq 0 ]; then
finish "${curbranch}"
else
echo "resolve conflicts and run: $0 finish "'"'${curbranch}'"'
fi
}
# add the PR-URL to the last commit, after squashing
finish () {
if [ $# -eq 0 ]; then
echo "Usage: $0 finish <branch> (while on a PR-### branch)" >&2
return 1
fi
local curbranch="$1"
local ref=$(cat .git/HEAD)
local prnum
case $ref in
"ref: refs/heads/PR-"*)
prnum=${ref#ref: refs/heads/PR-}
;;
*)
echo "not on the PR-## branch any more!" >&2
return 1
;;
esac
local me=$(git config github.user || git config user.name)
if [ "$me" == "" ]; then
echo "run 'git config --add github.user <username>'" >&2
return 1
fi
set -x
local url="$(prurl "$prnum")"
local num=$prnum
local prpath="${url#git@github.com:}"
local repo=${prpath%/pull/$num}
local prweb="https://github.com/$prpath"
local root="$(prroot "$url")"
local api="https://api.github.com/repos/${repo}/pulls/${num}"
local user=$(curl -s $api | json user.login)
local lastmsg="$(git log -1 --pretty=%B)"
local newmsg="${lastmsg}
PR-URL: ${prweb}
Credit: @${user}
Close: #${num}
Reviewed-by: @${me}
"
git commit --amend -m "$newmsg"
git checkout $curbranch
git merge PR-${prnum} --ff-only
set +x
}
prurl () {
local url="$1"
if [ "$url" == "" ] && type pbpaste &>/dev/null; then
url="$(pbpaste)"
fi
if [[ "$url" =~ ^[0-9]+$ ]]; then
local us="$2"
if [ "$us" == "" ]; then
us="origin"
fi
local num="$url"
local o="$(git config --get remote.${us}.url)"
url="${o}"
url="${url#(git:\/\/|https:\/\/)}"
url="${url#git@}"
url="${url#github.com[:\/]}"
url="${url%.git}"
url="https://github.com/${url}/pull/$num"
fi
url=${url%/commits}
url=${url%/files}
url="$(echo $url | perl -p -e 's/#issuecomment-[0-9]+$//g')"
local p='^https:\/\/github.com\/[^\/]+\/[^\/]+\/pull\/[0-9]+$'
if ! [[ "$url" =~ $p ]]; then
echo "Usage:"
echo " $0 <pull req url>"
echo " $0 <pull req number> [<remote name>=origin]"
type pbpaste &>/dev/null &&
echo "(will read url/id from clipboard if not specified)"
exit 1
fi
url="${url/https:\/\/github\.com\//git@github.com:}"
echo "$url"
}
prroot () {
local url="$1"
echo "${url/\/pull\/+([0-9])/}"
}
prref () {
local url="$1"
local root="$2"
echo "refs${url:${#root}}/head"
}
main "$@"