#!/usr/bin/env bash branch_prefix=$(git config --get git-extras.feature.prefix) if [ -z "$branch_prefix" ]; then branch_prefix="feature" fi merge_mode="--no-ff" declare -a argv while test $# != 0 do case $1 in -a|--alias ) if [[ -n $2 ]] then shift # shift -a|-alias branch_prefix=$1 else argv+=("$1") # treat tail '-a' as fi ;; -r|--remote ) if [[ -n $2 ]] then remote=$2 shift else remote="origin" fi ;; --squash ) merge_mode="--squash" ;; --from ) start_point=$2 shift ;; * ) argv+=("$1") ;; esac shift done concatargs() { str=$(IFS='-'; echo "$*") branch="$branch_prefix"/$str } if test "${argv[0]}" = "finish"; then test -z "${argv[1]}" && echo "$branch_prefix" " required." 1>&2 && exit 1 branch="$branch_prefix"/"${argv[1]}" git merge ${merge_mode} "$branch" && git delete-branch "$branch" else test -z "${argv[0]}" && echo "$branch_prefix" " required." 1>&2 && exit 1 if test -n "${argv[1]}"; then concatargs "${argv[@]}" else branch="$branch_prefix"/"${argv[0]}" fi if [[ -n $remote ]] && [[ -z $start_point ]] then git create-branch -r "$remote" "$branch" fi if [[ -z $remote ]] && [[ -z $start_point ]] then git create-branch "$branch" fi if [[ -n $remote ]] && [[ -n $start_point ]] then git create-branch -r "$remote" --from "$start_point" "$branch" fi if [[ -z $remote ]] && [[ -n $start_point ]] then git create-branch --from "$start_point" "$branch" fi fi