#!/bin/sh
_get_repo() {
  echo "$1" | sed -e "s/.git$//" -e "s/.*github.com[:/]\(.*\)/\1/"
}

_build_url() {
  # shellcheck disable=SC2039
  local upstream origin branch repo pr_url target
  upstream="$(git config --get remote.upstream.url)"
  origin="$(git config --get remote.origin.url)"
  branch="$(git symbolic-ref --short HEAD)"
  repo="$(_get_repo "$origin")"
  pr_url="https://github.com/$repo/pull/new"
  target="$1"
  test -z "$target" && target="master"
  if [ -z "$upstream" ]; then
    echo "$pr_url/$target...$branch"
  else
    # shellcheck disable=SC2039
    local origin_name upstream_name
    origin_name="$(echo "$repo" | cut -f1 -d'/')"
    upstream_name="$(_get_repo "$upstream" | cut -f1 -d'/')"
    echo "$pr_url/$upstream_name:$target...$origin_name:$branch"
  fi
}

# shellcheck disable=SC2039
open-pr() {
  # shellcheck disable=SC2039
  local url
  url="$(_build_url "$*")"
  if [ "$(uname -s)" = "Darwin" ]; then
    open "$url" 2> /dev/null
  else
    xdg-open "$url" > /dev/null 2> /dev/null
  fi
}

#!/bin/sh
_get_repo() {
  echo "$1" | sed -e "s/.git$//" -e "s/.*github.com[:/]\(.*\)/\1/"
}

_build_url() {
  # shellcheck disable=SC2039
  local upstream origin branch repo pr_url target
  upstream="$(git config --get remote.upstream.url)"
  origin="$(git config --get remote.origin.url)"
  branch="$(git symbolic-ref --short HEAD)"
  repo="$(_get_repo "$origin")"
  pr_url="https://github.com/$repo/pull/new"
  target="$1"
  test -z "$target" && target=$(git for-each-ref --format='%(upstream:short)' "$(git symbolic-ref -q HEAD)" | cut -d '/' -f 2)
  test -z "$target" && target="master"
  if [ -z "$upstream" ]; then
    echo "$pr_url/$target...$branch"
  else
    # shellcheck disable=SC2039
    local origin_name upstream_name
    origin_name="$(echo "$repo" | cut -f1 -d'/')"
    upstream_name="$(_get_repo "$upstream" | cut -f1 -d'/')"
    echo "$pr_url/$upstream_name:$target...$origin_name:$branch"
  fi
}

# shellcheck disable=SC2039
open-pr() {
  # shellcheck disable=SC2039
  local url
  url="$(_build_url "$*")"
  if [ "$(uname -s)" = "Darwin" ]; then
    open "$url" 2> /dev/null
  else
    xdg-open "$url" > /dev/null 2> /dev/null
  fi
}

Improve detection of the target branch
Improve detection of the target branch

If the target branch isn't specified in the command arguments, attempts to find the name of the remotly tracked branch (before falling back on `master`).

This means that if the branch `feature` tracks `upstream/dev`, the code will correctly detect that the target branch is `dev`.
