#!/usr/bin/env bash branch_prefix=$(git config --get git-extras.feature.prefix) if [ -z "$branch_prefix" ]; then branch_prefix="feature" fi branch_separator=$(git config --get git-extras.feature.separator) if [ -z "$branch_separator" ]; then branch_separator="/" fi merge_mode="--no-ff" finish=false declare -a argv while test $# != 0 do case $1 in -a|--alias ) if [[ -n $2 ]] && [[ $2 != -- ]] then shift # shift -a|-alias branch_prefix=$1 else echo >&2 "option $1 requires a value" exit 1 fi ;; -r|--remote ) if [[ -n $2 ]] && [[ $2 != -- ]] then remote=$2 shift else remote="origin" fi ;; -s|--separator ) if [[ -n $2 ]] && [[ $2 != -- ]] then branch_separator=$2 shift else echo >&2 "option $1 requires a value" exit 1 fi ;; --squash ) merge_mode="--squash" ;; --from ) start_point=$2 shift ;; -- ) # terminate argument parsing shift argv+=("$@") break ;; finish ) finish=true ;; * ) argv+=("$1") ;; esac shift done concatargs() { str=$(IFS='-'; echo "$*") branch="$branch_prefix$branch_separator$str" } test -z "${argv[0]}" && echo "$branch_prefix" " required." 1>&2 && exit 1 concatargs "${argv[@]}" if "${finish}" then git merge ${merge_mode} "$branch" && git delete-branch "$branch" else 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