#!/bin/sh

# For package.json:
#     "release": "sh -c \"mr() { [ \\\"$1\\\" = '-h' ] && echo \\\"Usage: git mr [source-branch (.=staging)] [target-branch (master)] [remote (origin)]\\\"  && exit; source=\\\"${1:-staging}\\\"; target=\\\"${2:-master}\\\";  remote=\\\"${3:-origin}\\\"; push=; [ \\\"$source\\\" != . ] || { source=\\\"`git get-branch`\\\" && [ -n \\\"$source\\\" -a \\\"$source\\\" != \\\"$target\\\" ] && push=true; } || exit $?; echo \\\"Create merge request to '$remote/$target' from ${push:+pushed current branch }'$source'\\\"; git fetch \\\"$remote\\\" || exit $?; git --no-pager log --oneline \\\"$target..$source\\\" || exit $?; echo; [ -z $push ] || git push --set-upstream \\\"$remote\\\" \\\"$source\\\" || exit $?; git open \\\"`git get-url \\\"$remote\\\"`\\\"'/merge_requests/new?merge_request[source_branch]='\\\"$source\\\"'&merge_request[target_branch]='\\\"$target\\\"; }; mute(){ \\\"$@\\\" >/dev/null 2>&1; }; has(){ mute which \\\"$1\\\"; }; o(){ if [ \\\"$OS\\\" = 'Windows_NT' ]; then start \\\"\\\" \\\"$@\\\"; elif [ \\\"`uname`\\\" == 'Darwin' ]; then open -- \\\"$@\\\"; elif has xdg-open; then xdg-open -- \\\"$@\\\"; elif has gnome-open; then gnome-open -- \\\"$@\\\"; elif has python; then python -m webbrowser -- \\\"$@\\\"; else echo \\\"Open: $@\\\"; fi; }; geturl(){ local remote=\\\"${1:-origin}\\\"; shift; git remote get-url \\\"$remote\\\" \\\"$@\\\" | sed 's/\\\\/$//;s/\\\\.git//'; }; mr\"",
#     "hotfix":  "sh -c \"mr() { [ \\\"$1\\\" = '-h' ] && echo \\\"Usage: git mr [source-branch (.=current)] [target-branch (master)] [remote (origin)]\\\"  && exit; source=\\\"${1:-.}\\\";       target=\\\"${2:-master}\\\";  remote=\\\"${3:-origin}\\\"; push=; [ \\\"$source\\\" != . ] || { source=\\\"`git get-branch`\\\" && [ -n \\\"$source\\\" -a \\\"$source\\\" != \\\"$target\\\" ] && push=true; } || exit $?; echo \\\"Create merge request to '$remote/$target' from ${push:+pushed current branch }'$source'\\\"; git fetch \\\"$remote\\\" || exit $?; git --no-pager log --oneline \\\"$target..$source\\\" || exit $?; echo; [ -z $push ] || git push --set-upstream \\\"$remote\\\" \\\"$source\\\" || exit $?; git open \\\"`git get-url \\\"$remote\\\"`\\\"'/merge_requests/new?merge_request[source_branch]='\\\"$source\\\"'&merge_request[target_branch]='\\\"$target\\\"; }; mute(){ \\\"$@\\\" >/dev/null 2>&1; }; has(){ mute which \\\"$1\\\"; }; o(){ if [ \\\"$OS\\\" = 'Windows_NT' ]; then start \\\"\\\" \\\"$@\\\"; elif [ \\\"`uname`\\\" == 'Darwin' ]; then open -- \\\"$@\\\"; elif has xdg-open; then xdg-open -- \\\"$@\\\"; elif has gnome-open; then gnome-open -- \\\"$@\\\"; elif has python; then python -m webbrowser -- \\\"$@\\\"; else echo \\\"Open: $@\\\"; fi; }; geturl(){ local remote=\\\"${1:-origin}\\\"; shift; git remote get-url \\\"$remote\\\" \\\"$@\\\" | sed 's/\\\\/$//;s/\\\\.git//'; }; mr\"",
#     "mr":      "sh -c \"mr() { [ \\\"$1\\\" = '-h' ] && echo \\\"Usage: git mr [source-branch (.=current)] [target-branch (staging)] [remote (origin)]\\\" && exit; source=\\\"${1:-.}\\\";       target=\\\"${2:-staging}\\\"; remote=\\\"${3:-origin}\\\"; push=; [ \\\"$source\\\" != . ] || { source=\\\"`git get-branch`\\\" && [ -n \\\"$source\\\" -a \\\"$source\\\" != \\\"$target\\\" ] && push=true; } || exit $?; echo \\\"Create merge request to '$remote/$target' from ${push:+pushed current branch }'$source'\\\"; git fetch \\\"$remote\\\" || exit $?; git --no-pager log --oneline \\\"$target..$source\\\" || exit $?; echo; [ -z $push ] || git push --set-upstream \\\"$remote\\\" \\\"$source\\\" || exit $?; git open \\\"`git get-url \\\"$remote\\\"`\\\"'/merge_requests/new?merge_request[source_branch]='\\\"$source\\\"'&merge_request[target_branch]='\\\"$target\\\"; }; mute(){ \\\"$@\\\" >/dev/null 2>&1; }; has(){ mute which \\\"$1\\\"; }; o(){ if [ \\\"$OS\\\" = 'Windows_NT' ]; then start \\\"\\\" \\\"$@\\\"; elif [ \\\"`uname`\\\" == 'Darwin' ]; then open -- \\\"$@\\\"; elif has xdg-open; then xdg-open -- \\\"$@\\\"; elif has gnome-open; then gnome-open -- \\\"$@\\\"; elif has python; then python -m webbrowser -- \\\"$@\\\"; else echo \\\"Open: $@\\\"; fi; }; geturl(){ local remote=\\\"${1:-origin}\\\"; shift; git remote get-url \\\"$remote\\\" \\\"$@\\\" | sed 's/\\\\/$//;s/\\\\.git//'; }; mr\""

# For .gitconfig [alias]:
#     mr  = "!mr() { [ \"$1\" = '-h' ] && echo \"Usage: git mr [source-branch (.=current)] [target-branch (master)] [remote (origin)]\" && exit; source=\"${1:-.}\"; target=\"${2:-master}\"; remote=\"${3:-origin}\"; [ \"$source\" != . ] || source=\"`git get-branch`\" && [ -n \"$source\" -a \"$source\" != \"$target\" ] || exit $?; echo \"Create GitLab Merge Request to '$target' from '$source'\"; git --no-pager log --oneline \"$target..$source\" || exit $?; echo; git push --set-upstream \"$remote\" \"$source\" || exit $?; git open-url \"`git get-url \"$remote\"`/merge_requests/new?merge_request[source_branch]=$source&merge_request[target_branch]=$target\"; }; mr"
#     open-url = "!mute(){ \"$@\" >/dev/null 2>&1; }; has(){ mute which \"$1\"; }; openurl(){ if [ \"$OS\" = 'Windows_NT' ]; then start \"\" \"$@\"; elif [ \"`uname`\" == 'Darwin' ]; then open -- \"$@\"; elif has xdg-open; then xdg-open -- \"$@\"; elif has gnome-open; then gnome-open -- \"$@\"; elif has python; then python -m webbrowser -- \"$@\"; else echo \"Open: $@\"; fi; }; openurl"

mute(){ "$@" >/dev/null 2>&1; }; has(){ mute which "$1"; };

openurl(){ if [ "$OS" = 'Windows_NT' ]; then start "" "$@"; elif [ "`uname`" == 'Darwin' ]; then open -- "$@"; elif has xdg-open; then xdg-open -- "$@"; elif has gnome-open; then gnome-open -- "$@"; elif has python; then python -m webbrowser -- "$@"; else echo "Open: $@"; fi; };

geturl(){ local remote="${1:-origin}"; shift; git remote get-url "$remote" "$@" | sed 's/\/$//;s/\.git//'; };

mr() { [ "$1" = '-h' ] && echo "Usage: git mr [source-branch (.=current)] [target-branch (master)] [remote (origin)]" && exit; source="${1:-.}"; target="${2:-master}"; remote="${3:-origin}"; [ "$source" != . ] || source="`git get-branch`" && [ -n "$source" -a "$source" != "$target" ] || exit $?; echo "Create GitLab Merge Request to '$target' from '$source'"; git --no-pager log --oneline "$target..$source" || exit $?; echo; git push --set-upstream "$remote" "$source" || exit $?; openurl "`geturl "$remote"`/merge_requests/new?merge_request[source_branch]=$source&merge_request[target_branch]=$target"; };

mr "$@"