Merge branch 'feature/track-publish-for-release' into develop
diff --git a/git-flow-release b/git-flow-release
index 85ff542..b28bf42 100644
--- a/git-flow-release
+++ b/git-flow-release
@@ -46,6 +46,8 @@
echo "usage: git flow release [list] [-v]"
echo " git flow release start [-F] <version>"
echo " git flow release finish [-Fsump] <version>"
+ echo " git flow release publish <name>"
+ echo " git flow release track <name>"
}
cmd_default() {
@@ -147,6 +149,12 @@
die "There is an existing release branch ($first_branch). Finish that one first."
}
+require_not_on_release_branch() {
+ if [ "$BRANCH" = "$(git_current_branch)"]; then
+ die "You cannot be in the '$BRANCH' branch when you finish it."
+ fi
+}
+
cmd_start() {
DEFINE_boolean fetch false "fetch from $ORIGIN before performing finish" F
parse_args "$@"
@@ -201,6 +209,7 @@
# sanity checks
require_branch "$BRANCH"
require_clean_working_tree
+ require_not_on_release_branch
if flag fetch; then
git fetch -q "$ORIGIN" "$MASTER_BRANCH" || \
die "Could not fetch $MASTER_BRANCH from $ORIGIN."
@@ -262,6 +271,8 @@
die "Could not push to $MASTER_BRANCH from $ORIGIN."
git push --tags "$ORIGIN" || \
die "Could not push tags to $ORIGIN."
+ git push "$ORIGIN" :"$BRANCH" || \
+ die "Could not delete the remote $BRANCH in $ORIGIN."
fi
echo
@@ -273,6 +284,54 @@
echo "- Release branch '$BRANCH' has been deleted"
if flag push; then
echo "- '$DEVELOP_BRANCH', '$MASTER_BRANCH' and tags have been pushed to '$ORIGIN'"
+ echo "- Release branch '$BRANCH' in '$ORIGIN' has been deleted."
fi
echo
}
+
+cmd_publish() {
+ parse_args "$@"
+ require_version_arg
+
+ # sanity checks
+ require_clean_working_tree
+ require_branch "$BRANCH"
+ git fetch -q "$ORIGIN"
+ require_branch_absent "$ORIGIN/$BRANCH"
+
+ # create remote branch
+ git push "$ORIGIN" "$BRANCH:refs/heads/$BRANCH"
+ git fetch -q "$ORIGIN"
+
+ # configure remote tracking
+ git config "branch.$BRANCH.remote" "$ORIGIN"
+ git config "branch.$BRANCH.merge" "refs/heads/$BRANCH"
+ git checkout "$BRANCH"
+
+ echo
+ echo "Summary of actions:"
+ echo "- A new remote branch '$BRANCH' was created"
+ echo "- The local branch '$BRANCH' was configured to track the remote branch"
+ echo "- You are now on branch '$BRANCH'"
+ echo
+}
+
+cmd_track() {
+ parse_args "$@"
+ require_version_arg
+
+ # sanity checks
+ require_clean_working_tree
+ require_branch_absent "$BRANCH"
+ git fetch -q "$ORIGIN"
+ require_branch "$ORIGIN/$BRANCH"
+
+ # create tracking branch
+ git checkout -b "$BRANCH" "$ORIGIN/$BRANCH"
+
+ echo
+ echo "Summary of actions:"
+ echo "- A new remote tracking branch '$BRANCH' was created"
+ echo "- You are now on branch '$BRANCH'"
+ echo
+}