Commit aa93d234 authored by Vincent Driessen's avatar Vincent Driessen

Be git-describe friendly.

This patch tags commits on the original (release/hotfix branch) instead
of tagging the merge commit on the master branch.  This keeps the
history git-describe friendly.  (For related discussions, see #49, #85,
parents afb191f7 aec48189
...@@ -19,5 +19,6 @@ Authors are (ordered by first commit date): ...@@ -19,5 +19,6 @@ Authors are (ordered by first commit date):
- Emre Berge Ergenekon - Emre Berge Ergenekon
- Eric Holmes - Eric Holmes
- Vedang Manerikar - Vedang Manerikar
- Myke Hines
Portions derived from other open source works are clearly marked. Portions derived from other open source works are clearly marked.
...@@ -138,7 +138,7 @@ Showing your appreciation ...@@ -138,7 +138,7 @@ Showing your appreciation
A few people already requested it, so now it's here: a Flattr button. A few people already requested it, so now it's here: a Flattr button.
Of course, the best way to show your appreciation for the original Of course, the best way to show your appreciation for the original
[blog post](http://nvie.com/git-model) or the git-flow tool itself remains [blog post](http://nvie.com/posts/a-successful-git-branching-model/) or the git-flow tool itself remains
contributing to the community. If you'd like to show your appreciation in contributing to the community. If you'd like to show your appreciation in
another way, however, consider Flattr'ing me: another way, however, consider Flattr'ing me:
......
...@@ -63,6 +63,7 @@ goto :End ...@@ -63,6 +63,7 @@ goto :End
:ChkGetopt :ChkGetopt
:: %1 is getopt.exe :: %1 is getopt.exe
if exist "%GIT_HOME%\bin\%1" goto :EOF if exist "%GIT_HOME%\bin\%1" goto :EOF
if exist "%USERPROFILE%\bin\%1" goto :EOF
if exist "%~f$PATH:1" goto :EOF if exist "%~f$PATH:1" goto :EOF
echo %GIT_HOME%\bin\%1 not found.>&2 echo %GIT_HOME%\bin\%1 not found.>&2
echo You have to install this file manually. See the GitFlow README. echo You have to install this file manually. See the GitFlow README.
......
...@@ -109,6 +109,9 @@ main() { ...@@ -109,6 +109,9 @@ main() {
fi fi
# run the specified action # run the specified action
if [ $SUBACTION != "help" ]; then
init
fi
cmd_$SUBACTION "$@" cmd_$SUBACTION "$@"
} }
......
...@@ -36,15 +36,17 @@ ...@@ -36,15 +36,17 @@
# policies, either expressed or implied, of Vincent Driessen. # policies, either expressed or implied, of Vincent Driessen.
# #
require_git_repo init() {
require_gitflow_initialized require_git_repo
gitflow_load_settings require_gitflow_initialized
PREFIX=$(git config --get gitflow.prefix.feature) gitflow_load_settings
PREFIX=$(git config --get gitflow.prefix.feature)
}
usage() { usage() {
echo "usage: git flow feature [list] [-v]" echo "usage: git flow feature [list] [-v]"
echo " git flow feature start [-F] <name> [<base>]" echo " git flow feature start [-F] <name> [<base>]"
echo " git flow feature finish [-rFkD] [<name|nameprefix>]" echo " git flow feature finish [-rFkDS] [<name|nameprefix>]"
echo " git flow feature publish <name>" echo " git flow feature publish <name>"
echo " git flow feature track <name>" echo " git flow feature track <name>"
echo " git flow feature diff [<name|nameprefix>]" echo " git flow feature diff [<name|nameprefix>]"
...@@ -232,6 +234,7 @@ cmd_finish() { ...@@ -232,6 +234,7 @@ cmd_finish() {
DEFINE_boolean rebase false "rebase instead of merge" r DEFINE_boolean rebase false "rebase instead of merge" r
DEFINE_boolean keep false "keep branch after performing finish" k DEFINE_boolean keep false "keep branch after performing finish" k
DEFINE_boolean force_delete false "force delete feature branch after finish" D DEFINE_boolean force_delete false "force delete feature branch after finish" D
DEFINE_boolean squash false "squash feature during merge" S
parse_args "$@" parse_args "$@"
expand_nameprefix_arg_or_current expand_nameprefix_arg_or_current
...@@ -312,7 +315,13 @@ cmd_finish() { ...@@ -312,7 +315,13 @@ cmd_finish() {
if [ "$(git rev-list -n2 "$DEVELOP_BRANCH..$BRANCH" | wc -l)" -eq 1 ]; then if [ "$(git rev-list -n2 "$DEVELOP_BRANCH..$BRANCH" | wc -l)" -eq 1 ]; then
git merge --ff "$BRANCH" git merge --ff "$BRANCH"
else else
if noflag squash; then
git merge --no-ff "$BRANCH" git merge --no-ff "$BRANCH"
else
git merge --squash "$BRANCH"
git commit
git merge "$BRANCH"
fi
fi fi
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
...@@ -507,7 +516,7 @@ cmd_pull() { ...@@ -507,7 +516,7 @@ cmd_pull() {
exit 1 exit 1
fi fi
else else
it pull -q "$REMOTE" "$BRANCH" || die "Failed to pull from remote '$REMOTE'." git pull -q "$REMOTE" "$BRANCH" || die "Failed to pull from remote '$REMOTE'."
fi fi
echo "Pulled $REMOTE's changes into $BRANCH." echo "Pulled $REMOTE's changes into $BRANCH."
......
...@@ -36,17 +36,20 @@ ...@@ -36,17 +36,20 @@
# policies, either expressed or implied, of Vincent Driessen. # policies, either expressed or implied, of Vincent Driessen.
# #
require_git_repo init() {
require_gitflow_initialized require_git_repo
gitflow_load_settings require_gitflow_initialized
VERSION_PREFIX=$(eval "echo `git config --get gitflow.prefix.versiontag`") gitflow_load_settings
PREFIX=$(git config --get gitflow.prefix.hotfix) VERSION_PREFIX=$(eval "echo `git config --get gitflow.prefix.versiontag`")
PREFIX=$(git config --get gitflow.prefix.hotfix)
}
usage() { usage() {
echo "usage: git flow hotfix [list] [-v]" echo "usage: git flow hotfix [list] [-v]"
echo " git flow hotfix start [-F] <version> [<base>]" echo " git flow hotfix start [-F] <version> [<base>]"
echo " git flow hotfix finish [-Fsumpk] <version>" echo " git flow hotfix finish [-Fsumpk] <version>"
echo " git flow hotfix publish <version>" echo " git flow hotfix publish <version>"
echo " git flow hotfix track <version>"
} }
cmd_default() { cmd_default() {
...@@ -216,11 +219,32 @@ cmd_publish() { ...@@ -216,11 +219,32 @@ cmd_publish() {
echo 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
}
cmd_finish() { cmd_finish() {
DEFINE_boolean fetch false "fetch from $ORIGIN before performing finish" F DEFINE_boolean fetch false "fetch from $ORIGIN before performing finish" F
DEFINE_boolean sign false "sign the release tag cryptographically" s DEFINE_boolean sign false "sign the release tag cryptographically" s
DEFINE_string signingkey "" "use the given GPG-key for the digital signature (implies -s)" u DEFINE_string signingkey "" "use the given GPG-key for the digital signature (implies -s)" u
DEFINE_string message "" "use the given tag message" m DEFINE_string message "" "use the given tag message" m
DEFINE_string messagefile "" "use the contents of the given file as tag message" f
DEFINE_boolean push false "push to $ORIGIN after performing finish" p DEFINE_boolean push false "push to $ORIGIN after performing finish" p
DEFINE_boolean keep false "keep branch after performing finish" k DEFINE_boolean keep false "keep branch after performing finish" k
DEFINE_boolean notag false "don't tag this release" n DEFINE_boolean notag false "don't tag this release" n
...@@ -269,6 +293,7 @@ cmd_finish() { ...@@ -269,6 +293,7 @@ cmd_finish() {
flag sign && opts="$opts -s" flag sign && opts="$opts -s"
[ "$FLAGS_signingkey" != "" ] && opts="$opts -u '$FLAGS_signingkey'" [ "$FLAGS_signingkey" != "" ] && opts="$opts -u '$FLAGS_signingkey'"
[ "$FLAGS_message" != "" ] && opts="$opts -m '$FLAGS_message'" [ "$FLAGS_message" != "" ] && opts="$opts -m '$FLAGS_message'"
[ "$FLAGS_messagefile" != "" ] && opts="$opts -F '$FLAGS_messagefile'"
eval git tag $opts "$VERSION_PREFIX$VERSION" "$BRANCH" || \ eval git tag $opts "$VERSION_PREFIX$VERSION" "$BRANCH" || \
die "Tagging failed. Please run finish again to retry." die "Tagging failed. Please run finish again to retry."
fi fi
......
...@@ -153,11 +153,17 @@ cmd_default() { ...@@ -153,11 +153,17 @@ cmd_default() {
default_suggestion= default_suggestion=
for guess in $(git config --get gitflow.branch.develop) \ for guess in $(git config --get gitflow.branch.develop) \
'develop' 'int' 'integration' 'master'; do 'develop' 'int' 'integration' 'master'; do
if git_local_branch_exists "$guess"; then if git_local_branch_exists "$guess" && [ "$guess" != "$master_branch" ]; then
default_suggestion="$guess" default_suggestion="$guess"
break break
fi fi
done done
if [ -z $default_suggestion ]; then
should_check_existence=NO
default_suggestion=$(git config --get gitflow.branch.develop || echo develop)
fi
fi fi
printf "Branch name for \"next release\" development: [$default_suggestion] " printf "Branch name for \"next release\" development: [$default_suggestion] "
......
...@@ -36,16 +36,18 @@ ...@@ -36,16 +36,18 @@
# policies, either expressed or implied, of Vincent Driessen. # policies, either expressed or implied, of Vincent Driessen.
# #
require_git_repo init() {
require_gitflow_initialized require_git_repo
gitflow_load_settings require_gitflow_initialized
VERSION_PREFIX=$(eval "echo `git config --get gitflow.prefix.versiontag`") gitflow_load_settings
PREFIX=$(git config --get gitflow.prefix.release) VERSION_PREFIX=$(eval "echo `git config --get gitflow.prefix.versiontag`")
PREFIX=$(git config --get gitflow.prefix.release)
}
usage() { usage() {
echo "usage: git flow release [list] [-v]" echo "usage: git flow release [list] [-v]"
echo " git flow release start [-F] <version> [<base>]" echo " git flow release start [-F] <version> [<base>]"
echo " git flow release finish [-Fsumpk] <version>" echo " git flow release finish [-FsumpkS] <version>"
echo " git flow release publish <name>" echo " git flow release publish <name>"
echo " git flow release track <name>" echo " git flow release track <name>"
} }
...@@ -190,9 +192,11 @@ cmd_finish() { ...@@ -190,9 +192,11 @@ cmd_finish() {
DEFINE_boolean sign false "sign the release tag cryptographically" s DEFINE_boolean sign false "sign the release tag cryptographically" s
DEFINE_string signingkey "" "use the given GPG-key for the digital signature (implies -s)" u DEFINE_string signingkey "" "use the given GPG-key for the digital signature (implies -s)" u
DEFINE_string message "" "use the given tag message" m DEFINE_string message "" "use the given tag message" m
DEFINE_string messagefile "" "use the contents of the given file as a tag message" f
DEFINE_boolean push false "push to $ORIGIN after performing finish" p DEFINE_boolean push false "push to $ORIGIN after performing finish" p
DEFINE_boolean keep false "keep branch after performing finish" k DEFINE_boolean keep false "keep branch after performing finish" k
DEFINE_boolean notag false "don't tag this release" n DEFINE_boolean notag false "don't tag this release" n
DEFINE_boolean squash false "squash release during merge" S
parse_args "$@" parse_args "$@"
require_version_arg require_version_arg
...@@ -224,9 +228,15 @@ cmd_finish() { ...@@ -224,9 +228,15 @@ cmd_finish() {
if ! git_is_branch_merged_into "$BRANCH" "$MASTER_BRANCH"; then if ! git_is_branch_merged_into "$BRANCH" "$MASTER_BRANCH"; then
git checkout "$MASTER_BRANCH" || \ git checkout "$MASTER_BRANCH" || \
die "Could not check out $MASTER_BRANCH." die "Could not check out $MASTER_BRANCH."
if noflag squash; then
git merge --no-ff "$BRANCH" || \ git merge --no-ff "$BRANCH" || \
die "There were merge conflicts." die "There were merge conflicts."
# TODO: What do we do now? # TODO: What do we do now?
else
git merge --squash "$BRANCH" || \
die "There were merge conflicts."
git commit
fi
fi fi
if noflag notag; then if noflag notag; then
...@@ -239,6 +249,7 @@ cmd_finish() { ...@@ -239,6 +249,7 @@ cmd_finish() {
flag sign && opts="$opts -s" flag sign && opts="$opts -s"
[ "$FLAGS_signingkey" != "" ] && opts="$opts -u '$FLAGS_signingkey'" [ "$FLAGS_signingkey" != "" ] && opts="$opts -u '$FLAGS_signingkey'"
[ "$FLAGS_message" != "" ] && opts="$opts -m '$FLAGS_message'" [ "$FLAGS_message" != "" ] && opts="$opts -m '$FLAGS_message'"
[ "$FLAGS_messagefile" != "" ] && opts="$opts -F '$FLAGS_messagefile'"
eval git tag $opts "$tagname" "$BRANCH" || \ eval git tag $opts "$tagname" "$BRANCH" || \
die "Tagging failed. Please run finish again to retry." die "Tagging failed. Please run finish again to retry."
fi fi
...@@ -253,9 +264,16 @@ cmd_finish() { ...@@ -253,9 +264,16 @@ cmd_finish() {
# TODO: Actually, accounting for 'git describe' pays, so we should # TODO: Actually, accounting for 'git describe' pays, so we should
# ideally git merge --no-ff $tagname here, instead! # ideally git merge --no-ff $tagname here, instead!
if noflag squash; then
git merge --no-ff "$BRANCH" || \ git merge --no-ff "$BRANCH" || \
die "There were merge conflicts." die "There were merge conflicts."
# TODO: What do we do now? # TODO: What do we do now?
else
git merge --squash "$BRANCH" || \
die "There were merge conflicts."
# TODO: What do we do now?
git commit
fi
fi fi
# delete branch # delete branch
......
...@@ -36,11 +36,13 @@ ...@@ -36,11 +36,13 @@
# policies, either expressed or implied, of Vincent Driessen. # policies, either expressed or implied, of Vincent Driessen.
# #
require_git_repo init() {
require_gitflow_initialized require_git_repo
gitflow_load_settings require_gitflow_initialized
VERSION_PREFIX=$(eval "echo `git config --get gitflow.prefix.versiontag`") gitflow_load_settings
PREFIX=$(git config --get gitflow.prefix.support) VERSION_PREFIX=$(eval "echo `git config --get gitflow.prefix.versiontag`")
PREFIX=$(git config --get gitflow.prefix.support)
}
warn "note: The support subcommand is still very EXPERIMENTAL!" warn "note: The support subcommand is still very EXPERIMENTAL!"
warn "note: DO NOT use it in a production situation." warn "note: DO NOT use it in a production situation."
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment