mirror of
https://github.com/tj/git-extras.git
synced 2026-09-10 15:36:21 -04:00
* git-feature: add configurable branch separator Closes #1069 This allows the use of a separator other than `/` for feature or other alias branches. While a command-line option has been provided (`-s` or `--separator`), this will most often be used via `git-extras.feature.separator`. * Significant update to bin/git-feature - Changed option parsing so that `--alias` requires an argument and will fail with an error unless provided. Applied the same logic to `--separator`. - Changed `finish` parsing to capture it as a variable flag during argument parsing. This could be extended so that if `finish` is already true, a second `finish` results in the word being added to the argument list. ```console $ git feature -- finish remote $ git feature finish finish remote ``` This has not been done because it is a bit of an inconsistent handling for documentation purposes. - Add handling of `--` to permit options or `finish` to be made part of the feature branch name. - Since `finish` is now a variable flag, simplify the name-building logic to always use `concatargs "${argv[@]}"`. This means that `git feature finish ...` and `git feature ...` behave the same in terms of feature branch name building. - Basically rewrote the man page to include better descriptions of the options as well as adding a GIT CONFIG section and additional EXAMPLES for the new features/behaviour.
106 lines
1.8 KiB
Bash
Executable file
106 lines
1.8 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
|
|
|
|
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" "<name> 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
|