1

In my last project I was working with GitHub so I was able to create PRs from the CLI using the command gh pr create -> https://cli.github.com/manual/gh_pr_create

I actually do everything from the CLI.

Now with Bitbucket I am wondering if there is a way to do so?

Reacting
  • 5,543
  • 7
  • 35
  • 86
  • https://bobswift.atlassian.net/wiki/spaces/SCLI/overview Found in https://stackoverflow.com/search?q=%5Bbitbucket%5D+%5Bgit%5D+command+line+pull+request – phd Nov 19 '21 at 19:46

1 Answers1

2

There are several examples of using the bitbucket API via CURL, but I think you are looking for something simpler.

I have the following custom git command which is designed to work with GitHub, but you could easily modify it to work with BitBucket by manipulating the shape of the URL. Unfortunately I do not have an active BitBucket account, so I don't have a tested command to give you.

# usage
git create-pr

git-create-pr

#!/usr/bin/env bash

# Opens the "Open Pull Request" GitHub page for a repo/branch in your browser.
# based on git-open by Paul Irish (https://github.com/paulirish/git-open/)
#
# git create-pr
# git create-pr [remote] [branch]

# are we in a git repo?
git rev-parse --is-inside-work-tree &>/dev/null

if [[ $? != 0 ]]; then
  echo "Not a git repository." 1>&2
  exit 1
fi


# assume origin if not provided
# fallback to upstream if neither is present.
remote="origin"
if [ -n "$1" ]; then
  if [ "$1" == "issue" ]; then
    currentBranch=$(git symbolic-ref -q --short HEAD)
    regex='^issue'
    if [[ $currentBranch =~ $regex ]]; then
      issue=${currentBranch#*#}
    else
      echo "'git open issue' expect branch naming to be issues/#123" 1>&2
      exit 1
    fi
  else
    remote="$1"
  fi
fi

remote_url="remote.${remote}.url"

giturl=$(git config --get "$remote_url")
if [ -z "$giturl" ]; then
  echo "$remote_url not set." 1>&2
  exit 1
fi

# get current branch
if [ -z "$2" ]; then
  branch=$(git symbolic-ref -q --short HEAD)
else
  branch="$2"
fi

# Make # and % characters url friendly
#   github.com/paulirish/git-open/pull/24
branch=${branch//%/%25} && branch=${branch//#/%23}

# URL normalization
# GitHub
giturl=${giturl/git\@github\.com\:/https://github.com/}

# handle SSH protocol (links like ssh://git@github.com/user/repo)
giturl=${giturl/#ssh\:\/\/git\@github\.com\//https://github.com/}

providerUrlDifference=compare

giturl=${giturl%\.git}

giturl="${giturl}/${providerUrlDifference}/${branch}?expand=1"

# get current open browser command
case $( uname -s ) in
  Darwin)  open=open;;
  MINGW*)  open=start;;
  CYGWIN*) open=cygstart;;
  MSYS*)   open="powershell.exe –NoProfile Start";;
  *)       open=${BROWSER:-xdg-open};;
esac

# open it in a browser
$open "$giturl" &> /dev/null
exit $?
JDB
  • 25,172
  • 5
  • 72
  • 123