mirror of
https://github.com/tj/git-extras.git
synced 2026-09-10 15:36:21 -04:00
83 lines
1.5 KiB
Bash
Executable file
83 lines
1.5 KiB
Bash
Executable file
#!/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 <name>
|
|
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" "<name> 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" "<name> 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
|