Merge branch 'feature/configurable-main-branches' into develop
diff --git a/TODO.mdown b/TODO.mdown
index 0bb08db..9516b0a 100644
--- a/TODO.mdown
+++ b/TODO.mdown
@@ -3,9 +3,6 @@
 
 General configuration
 ---------------------
-- Support configurable naming for fixed branch names 'master' and 'develop'
-- Support configurable naming conventions (i.e. name prefixes) for supporting
-  branches, instead of fixed 'release-\*' and 'hotfix-\*'
 
 Release branch support
 ----------------------
diff --git a/git-flow b/git-flow
index 7a5c4cc..283c779 100755
--- a/git-flow
+++ b/git-flow
@@ -18,6 +18,11 @@
 	set -x
 fi
 
+export GITFLOW_DIR=$(dirname "$0")
+export MASTER_BRANCH=$(git config --get gitflow.branch.master || echo master)
+export DEVELOP_BRANCH=$(git config --get gitflow.branch.develop || echo develop)
+export ORIGIN=$(git config --get gitflow.origin || echo origin)
+
 warn() { echo "$@" >&2; }
 die() { warn "$@"; exit 1; }
 has() { [[ " ${*:2} " == *" $1 "* ]]; }
@@ -36,8 +41,6 @@
 		exit 1
 	fi
 
-	export GITFLOW_DIR=$(dirname "$0")
-
 	# sanity checks
 	ACTION="$1"
 	BTYPE="$2"
diff --git a/git-flow-feature b/git-flow-feature
index fc7a794..6ba664f 100755
--- a/git-flow-feature
+++ b/git-flow-feature
@@ -34,13 +34,14 @@
 
 parse_args() {
 	NAME="$1"
-	BASE="${2:-develop}"
+	BASE="${2:-$DEVELOP_BRANCH}"
 	if [ "$NAME" = "" ]; then
 		echo "Missing argument <name>."
 		usage
 		exit 1
 	fi
-	BRANCH=feature/$NAME
+	PREFIX=$(git config --get gitflow.prefix.feature || echo feature/)
+	BRANCH=$PREFIX$NAME
 }
 
 cmd_help() {
@@ -54,9 +55,9 @@
 	# sanity checks
 	gitflow_check_clean_working_tree
 	gitflow_require_branch_absent $BRANCH
-	if [ "$BASE" = "develop" ]; then
-		git fetch origin develop
-		gitflow_require_branches_equal develop origin/develop
+	if [ "$BASE" = "$DEVELOP_BRANCH" ]; then
+		git fetch $ORIGIN $DEVELOP_BRANCH
+		gitflow_require_branches_equal $DEVELOP_BRANCH $ORIGIN/$DEVELOP_BRANCH
 	fi
 
 	# create branch
@@ -79,12 +80,12 @@
 	# sanity checks
 	gitflow_check_clean_working_tree
 	gitflow_require_branch $BRANCH
-	git fetch origin
-	if has origin/$BRANCH $REMOTE_BRANCHES; then
-		gitflow_require_branches_equal $BRANCH origin/$BRANCH
+	git fetch $ORIGIN
+	if has $ORIGIN/$BRANCH $REMOTE_BRANCHES; then
+		gitflow_require_branches_equal $BRANCH $ORIGIN/$BRANCH
 	fi
-	if [ "$BASE" = "develop" ]; then
-		gitflow_require_branches_equal develop origin/develop
+	if [ "$BASE" = "$DEVELOP_BRANCH" ]; then
+		gitflow_require_branches_equal $DEVELOP_BRANCH $ORIGIN/$DEVELOP_BRANCH
 	fi
 
 	# merge into BASE
@@ -97,7 +98,7 @@
 
 	# delete branch
 	# TODO: How do we handle merge conflicts here??
-	git push origin :refs/heads/$BRANCH
+	git push $ORIGIN :refs/heads/$BRANCH
 	git branch -d $BRANCH
 
 	echo
@@ -115,15 +116,15 @@
 	# sanity checks
 	gitflow_check_clean_working_tree
 	gitflow_require_branch $BRANCH
-	git fetch origin
-	gitflow_require_branch_absent origin/$BRANCH
+	git fetch $ORIGIN
+	gitflow_require_branch_absent $ORIGIN/$BRANCH
 
 	# create remote branch
-	git push origin $BRANCH:refs/heads/$BRANCH
-	git fetch origin
+	git push $ORIGIN $BRANCH:refs/heads/$BRANCH
+	git fetch $ORIGIN
 
 	# configure remote tracking
-	git config branch.$BRANCH.remote origin
+	git config branch.$BRANCH.remote $ORIGIN
 	git config branch.$BRANCH.merge refs/heads/$BRANCH
 	git checkout $BRANCH
 
@@ -141,11 +142,11 @@
 	# sanity checks
 	gitflow_check_clean_working_tree
 	gitflow_require_branch_absent $BRANCH
-	git fetch origin
-	gitflow_require_branch origin/$BRANCH
+	git fetch $ORIGIN
+	gitflow_require_branch $ORIGIN/$BRANCH
 
 	# create tracking branch
-	git checkout -b $BRANCH origin/$BRANCH
+	git checkout -b $BRANCH $ORIGIN/$BRANCH
 
 	echo
 	echo "Summary of actions:"
diff --git a/git-flow-hotfix b/git-flow-hotfix
index cf4e008..14ac662 100755
--- a/git-flow-hotfix
+++ b/git-flow-hotfix
@@ -29,13 +29,14 @@
 
 parse_args() {
 	VERSION="$1"
-	BASE="${2:-master}"
+	BASE="${2:-$MASTER_BRANCH}"
 	if [ "$VERSION" = "" ]; then
 		echo "Missing argument <version>."
 		usage
 		exit 1
 	fi
-	BRANCH=hotfix/$VERSION
+	PREFIX=$(git config --get gitflow.prefix.hotfix || echo hotfix/)
+	BRANCH=$PREFIX$VERSION
 }
 
 cmd_help() {
@@ -48,8 +49,8 @@
 
 	# sanity checks
 	gitflow_check_clean_working_tree
-	git fetch origin
-	gitflow_require_branches_equal master origin/master
+	git fetch $ORIGIN
+	gitflow_require_branches_equal $MASTER_BRANCH $ORIGIN/$MASTER_BRANCH
 	gitflow_require_branch_absent $BRANCH
 
 	# create branch
@@ -74,10 +75,10 @@
 
 	# sanity checks
 	gitflow_check_clean_working_tree
-	git fetch origin master
-	git fetch origin develop
-	gitflow_require_branches_equal master origin/master
-	gitflow_require_branches_equal develop origin/develop
+	git fetch $ORIGIN $MASTER_BRANCH
+	git fetch $ORIGIN $DEVELOP_BRANCH
+	gitflow_require_branches_equal $MASTER_BRANCH $ORIGIN/$MASTER_BRANCH
+	gitflow_require_branches_equal $DEVELOP_BRANCH $ORIGIN/$DEVELOP_BRANCH
 
 	# merge into BASE
 	git checkout $BASE
@@ -86,8 +87,8 @@
 
 	# merge into develop if we fixed a master issue
 	# TODO: merge into support branch
-	if [ "$BASE" = "master" ]; then
-		git checkout develop
+	if [ "$BASE" = "$MASTER_BRANCH" ]; then
+		git checkout $DEVELOP_BRANCH
 		git merge --no-ff $BRANCH
 	fi
 
@@ -99,11 +100,11 @@
 
 	echo
 	echo "Summary of actions:"
-	echo "- Latest objects have been fetched from 'origin'"
+	echo "- Latest objects have been fetched from '$ORIGIN'"
 	echo "- Hotfix branch has been merged into '$BASE'"
 	echo "- The hotfix was tagged 'v$VERSION'"
-	if [ "$BASE" = "master" ]; then
-		echo "- Hotfix branch has been back-merged into 'develop'"
+	if [ "$BASE" = "$MASTER_BRANCH" ]; then
+		echo "- Hotfix branch has been back-merged into '$DEVELOP_BRANCH'"
 	fi
 	echo "- Hotfix branch '$BRANCH' has been deleted"
 	echo
diff --git a/git-flow-release b/git-flow-release
index 3f5683e..d42287d 100755
--- a/git-flow-release
+++ b/git-flow-release
@@ -35,7 +35,8 @@
 		usage
 		exit 1
 	fi
-	BRANCH=release/$VERSION
+	PREFIX=$(git config --get gitflow.prefix.release || echo release/)
+	BRANCH=$PREFIX$VERSION
 }
 
 cmd_help() {
@@ -48,16 +49,16 @@
 
 	# sanity checks
 	gitflow_check_clean_working_tree
-	git fetch origin
-	gitflow_require_branches_equal develop origin/develop
+	git fetch $ORIGIN
+	gitflow_require_branches_equal $DEVELOP_BRANCH $ORIGIN/$DEVELOP_BRANCH
 	gitflow_require_branch_absent $BRANCH
 
 	# create branch
-	git checkout -b $BRANCH develop
+	git checkout -b $BRANCH $DEVELOP_BRANCH
 
 	echo
 	echo "Summary of actions:"
-	echo "- A new branch '$BRANCH' was created, based on 'develop'"
+	echo "- A new branch '$BRANCH' was created, based on '$DEVELOP_BRANCH'"
 	echo "- You are now on branch '$BRANCH'"
 	echo
 	echo "Follow-up actions:"
@@ -74,17 +75,17 @@
 
 	# sanity checks
 	gitflow_check_clean_working_tree
-	git fetch origin
-	gitflow_require_branches_equal master origin/master
-	gitflow_require_branches_equal develop origin/develop
+	git fetch $ORIGIN
+	gitflow_require_branches_equal $MASTER_BRANCH $ORIGIN/$MASTER_BRANCH
+	gitflow_require_branches_equal $DEVELOP_BRANCH $ORIGIN/$DEVELOP_BRANCH
 
 	# merge into master
-	git checkout master
+	git checkout $MASTER_BRANCH
 	git merge --no-ff $BRANCH
 	git tag v$VERSION
 
 	# merge into develop
-	git checkout develop
+	git checkout $DEVELOP_BRANCH
 	git merge --no-ff $BRANCH
 
 	# delete branch
@@ -95,10 +96,10 @@
 
 	echo
 	echo "Summary of actions:"
-	echo "- Latest objects have been fetched from 'origin'"
-	echo "- Release branch has been merged into 'master'"
+	echo "- Latest objects have been fetched from '$ORIGIN'"
+	echo "- Release branch has been merged into '$MASTER_BRANCH'"
 	echo "- The release was tagged 'v$VERSION'"
-	echo "- Release branch has been back-merged into 'develop'"
+	echo "- Release branch has been back-merged into '$DEVELOP_BRANCH'"
 	echo "- Release branch '$BRANCH' has been deleted"
 	echo
 }
diff --git a/git-flow-support b/git-flow-support
index a3fc91e..55f595e 100644
--- a/git-flow-support
+++ b/git-flow-support
@@ -24,7 +24,8 @@
 		usage
 		exit 1
 	fi
-	BRANCH=support/$VERSION
+	PREFIX=$(git config --get gitflow.prefix.support || echo support/)
+	BRANCH=$PREFIX$VERSION
 }
 
 cmd_help() {
@@ -42,9 +43,9 @@
 	git checkout -b $BRANCH $BASE
 
 	# publish branch
-	git push origin $BRANCH:refs/heads/$BRANCH
-	git fetch origin
-	git config branch.$BRANCH.remote origin
+	git push $ORIGIN $BRANCH:refs/heads/$BRANCH
+	git fetch $ORIGIN
+	git config branch.$BRANCH.remote $ORIGIN
 	git config branch.$BRANCH.merge refs/heads/$BRANCH
 	git co $BRANCH