Skip to content
Browse files

Added -v (--verbose) flags to list subaction of all subcommands.

  • Loading branch information...
1 parent c7ea9b2 commit 3c337fb5e40cc035f6fe6b09b16e54de72de3b0b @nvie committed
Showing with 166 additions and 30 deletions.
  1. +3 −0 git-flow
  2. +1 −3 git-flow-feature
  3. +53 −8 git-flow-hotfix
  4. +50 −8 git-flow-release
  5. +59 −11 git-flow-support
View
3 git-flow
@@ -202,6 +202,9 @@ gitflow_is_branch_merged_into() {
has $BASE $ALL_MERGES
}
+# helper functions for common reuse
+max() { if [ "$1" -gt "$2" ]; then echo "$1"; else echo "$2"; fi; }
+
# convenience functions for checking whether flags have been set or not
flag() { eval FLAG=\$FLAGS_$1; [ $FLAG -eq $FLAGS_TRUE ]; }
noflag() { eval FLAG=\$FLAGS_$1; [ $FLAG -ne $FLAGS_TRUE ]; }
View
4 git-flow-feature
@@ -28,8 +28,6 @@ cmd_default() {
cmd_list "$@"
}
-max() { if [ "$1" -gt "$2" ]; then echo "$1"; else echo "$2"; fi; }
-
cmd_list() {
DEFINE_boolean verbose false 'verbose (more) output' v
parse_args "$@"
@@ -113,7 +111,7 @@ resolve_name_by_prefix() {
require_name() {
if [ "$NAME" = "" ]; then
- echo "Missing argument <name>"
+ warn "Missing argument <name>"
usage
exit 1
fi
View
61 git-flow-hotfix
@@ -17,7 +17,7 @@ PREFIX=$(git config --get gitflow.prefix.hotfix || echo hotfix/)
FLAG_FETCH=1
usage() {
- echo "usage: git flow hotfix [list]"
+ echo "usage: git flow hotfix [list] [-v]"
echo " git flow hotfix start <version> [<base>]"
echo " git flow hotfix finish <version> [<base>]"
# TODO
@@ -37,12 +37,53 @@ cmd_default() {
}
cmd_list() {
+ DEFINE_boolean verbose false 'verbose (more) output' v
+ parse_args "$@"
+
HOTFIX_BRANCHES="$(echo "$LOCAL_BRANCHES" | grep "^$PREFIX")"
if [ -z "$HOTFIX_BRANCHES" ]; then
warn "No hotfix branches exist."
exit 0
fi
- echo "$HOTFIX_BRANCHES" | sed "s?^$PREFIX??g"
+
+ CURRENT_BRANCH=$(git branch | grep '^\* ' | grep -v 'no branch' | sed 's/^* //g')
+ SHORT_NAMES=$(echo "$HOTFIX_BRANCHES" | sed "s?^$PREFIX??g")
+ # determine column width first
+ width=0
+ for branch in $SHORT_NAMES; do
+ len=$(($(echo "$branch" | wc -c) - 1))
+ width=$(max $width $len)
+ done
+ width=$(($width + 3))
+
+ for branch in $SHORT_NAMES; do
+ fullname="$PREFIX$branch"
+ base=$(git merge-base "$fullname" "$MASTER_BRANCH")
+ master_sha=$(git rev-parse "$MASTER_BRANCH")
+ branch_sha=$(git rev-parse "$fullname")
+ if [ "$fullname" = "$CURRENT_BRANCH" ]; then
+ printf "* "
+ else
+ printf " "
+ fi
+ if flag verbose; then
+ printf "%-${width}s" "$branch"
+ if [ "$branch_sha" = "$master_sha" ]; then
+ printf "(no commits yet)"
+ else
+ tagname=$(git name-rev --tags --no-undefined --name-only $base)
+ if [ "$tagname" != "" ]; then
+ nicename="$tagname"
+ else
+ nicename="$(git rev-parse --short $base)"
+ fi
+ printf "(based on $nicename)"
+ fi
+ else
+ printf "%s" "$branch"
+ fi
+ echo
+ done
}
cmd_help() {
@@ -51,18 +92,22 @@ cmd_help() {
}
parse_args() {
- # TODO: When we have a nice structured way of parsing flags with getopt,
- # implement the following flags:
- # --fetch, to set FLAG_FETCH=1
- # --no-fetch, to set FLAG_FETCH=0
+ # parse options
+ FLAGS "$@" || exit $?
+ eval set -- "${FLAGS_ARGV}"
+
+ # read arguments into global variables
VERSION="$1"
BASE="${2:-$MASTER_BRANCH}"
+ BRANCH=$PREFIX$VERSION
+}
+
+require_version_arg() {
if [ "$VERSION" = "" ]; then
- echo "Missing argument <version>."
+ warn "Missing argument <version>"
usage
exit 1
fi
- BRANCH=$PREFIX$VERSION
}
cmd_start() {
View
58 git-flow-release
@@ -17,7 +17,7 @@ PREFIX=$(git config --get gitflow.prefix.release || echo release/)
FLAG_FETCH=1
usage() {
- echo "usage: git flow release [list]"
+ echo "usage: git flow release [list] [-v]"
echo " git flow release start <version>"
echo " git flow release finish <version>"
# TODO
@@ -38,12 +38,48 @@ cmd_default() {
}
cmd_list() {
+ DEFINE_boolean verbose false 'verbose (more) output' v
+ parse_args "$@"
+
RELEASE_BRANCHES="$(echo "$LOCAL_BRANCHES" | grep "^$PREFIX")"
if [ -z "$RELEASE_BRANCHES" ]; then
warn "No release branches exist."
exit 0
fi
- echo "$RELEASE_BRANCHES" | sed "s?^$PREFIX??g"
+
+ CURRENT_BRANCH=$(git branch | grep '^\* ' | grep -v 'no branch' | sed 's/^* //g')
+ SHORT_NAMES=$(echo "$RELEASE_BRANCHES" | sed "s?^$PREFIX??g")
+ # determine column width first
+ width=0
+ for branch in $SHORT_NAMES; do
+ len=$(($(echo "$branch" | wc -c) - 1))
+ width=$(max $width $len)
+ done
+ width=$(($width + 3))
+
+ for branch in $SHORT_NAMES; do
+ fullname="$PREFIX$branch"
+ base=$(git merge-base "$fullname" "$DEVELOP_BRANCH")
+ develop_sha=$(git rev-parse "$DEVELOP_BRANCH")
+ branch_sha=$(git rev-parse "$fullname")
+ if [ "$fullname" = "$CURRENT_BRANCH" ]; then
+ printf "* "
+ else
+ printf " "
+ fi
+ if flag verbose; then
+ printf "%-${width}s" "$branch"
+ if [ "$branch_sha" = "$develop_sha" ]; then
+ printf "(no commits yet)"
+ else
+ nicename="$(git rev-parse --short $base)"
+ printf "(based on $nicename)"
+ fi
+ else
+ printf "%s" "$branch"
+ fi
+ echo
+ done
}
cmd_help() {
@@ -52,21 +88,26 @@ cmd_help() {
}
parse_args() {
- # TODO: When we have a nice structured way of parsing flags with getopt,
- # implement the following flags:
- # --fetch, to set FLAG_FETCH=1
- # --no-fetch, to set FLAG_FETCH=0
+ # parse options
+ FLAGS "$@" || exit $?
+ eval set -- "${FLAGS_ARGV}"
+
+ # read arguments into global variables
VERSION="$1"
+ BRANCH="$PREFIX$VERSION"
+}
+
+require_version_arg() {
if [ "$VERSION" = "" ]; then
- echo "Missing argument <version>."
+ warn "Missing argument <version>"
usage
exit 1
fi
- BRANCH=$PREFIX$VERSION
}
cmd_start() {
parse_args "$@"
+ require_version_arg
# sanity checks
gitflow_require_clean_working_tree
@@ -95,6 +136,7 @@ cmd_start() {
cmd_finish() {
parse_args "$@"
+ require_version_arg
# sanity checks
gitflow_require_clean_working_tree
View
70 git-flow-support
@@ -16,8 +16,11 @@ VERSION_PREFIX=$(git config --get gitflow.prefix.versiontag)
PREFIX=$(git config --get gitflow.prefix.support || echo support/)
FLAG_FETCH=1
+warn "note: The support subcommand is still very EXPERIMENTAL!"
+warn "note: DO NOT use it in a production situation."
+
usage() {
- echo "usage: git flow support [list]"
+ echo "usage: git flow support [list] [-v]"
echo " git flow support start <version> [<base>]"
}
@@ -26,12 +29,53 @@ cmd_default() {
}
cmd_list() {
+ DEFINE_boolean verbose false 'verbose (more) output' v
+ parse_args "$@"
+
SUPPORT_BRANCHES="$(echo "$LOCAL_BRANCHES" | grep "^$PREFIX")"
if [ -z "$SUPPORT_BRANCHES" ]; then
warn "No support branches exist."
exit 0
fi
- echo "$SUPPORT_BRANCHES" | sed "s?^$PREFIX??g"
+
+ CURRENT_BRANCH=$(git branch | grep '^\* ' | grep -v 'no branch' | sed 's/^* //g')
+ SHORT_NAMES=$(echo "$SUPPORT_BRANCHES" | sed "s?^$PREFIX??g")
+ # determine column width first
+ width=0
+ for branch in $SHORT_NAMES; do
+ len=$(($(echo "$branch" | wc -c) - 1))
+ width=$(max $width $len)
+ done
+ width=$(($width + 3))
+
+ for branch in $SHORT_NAMES; do
+ fullname="$PREFIX$branch"
+ base=$(git merge-base "$fullname" "$MASTER_BRANCH")
+ master_sha=$(git rev-parse "$MASTER_BRANCH")
+ branch_sha=$(git rev-parse "$fullname")
+ if [ "$fullname" = "$CURRENT_BRANCH" ]; then
+ printf "* "
+ else
+ printf " "
+ fi
+ if flag verbose; then
+ printf "%-${width}s" "$branch"
+ if [ "$branch_sha" = "$master_sha" ]; then
+ printf "(no commits yet)"
+ else
+ tagname=$(git name-rev --tags --no-undefined --name-only $base)
+ if [ "$tagname" != "" ]; then
+ nicename="$tagname"
+ else
+ nicename="$(git rev-parse --short $base)"
+ fi
+ printf "(based on $nicename)"
+ fi
+ else
+ printf "%s" "$branch"
+ fi
+ echo
+ done
}
cmd_help() {
@@ -40,22 +84,27 @@ cmd_help() {
}
parse_args() {
- # TODO: When we have a nice structured way of parsing flags with getopt,
- # implement the following flags:
- # --fetch, to set FLAG_FETCH=1
- # --no-fetch, to set FLAG_FETCH=0
+ # parse options
+ FLAGS "$@" || exit $?
+ eval set -- "${FLAGS_ARGV}"
+
+ # read arguments into global variables
VERSION="$1"
BASE="${2:-${VERSION_PREFIX}${VERSION}}"
+ BRANCH=$PREFIX$VERSION
+}
+
+require_version_arg() {
if [ "$VERSION" = "" ]; then
- echo "Missing argument <version>."
+ warn "Missing argument <version>"
usage
exit 1
fi
- BRANCH=$PREFIX$VERSION
}
cmd_start() {
parse_args "$@"
+ require_version_arg
# sanity checks
gitflow_require_clean_working_tree
@@ -64,13 +113,12 @@ cmd_start() {
if [ $FLAG_FETCH -eq 1 ]; then
git fetch -q $ORIGIN $BASE
fi
- gitflow_require_branches_equal $BRANCH $ORIGIN/$BRANCH
# create branch
- git checkout -b $BRANCH $BASE
+ git checkout -b "$BRANCH" "$BASE"
# publish branch
- git push $ORIGIN $BRANCH:refs/heads/$BRANCH
+ #git push $ORIGIN $BRANCH:refs/heads/$BRANCH
git config branch.$BRANCH.remote $ORIGIN
git config branch.$BRANCH.merge refs/heads/$BRANCH

0 comments on commit 3c337fb

Please sign in to comment.
Something went wrong with that request. Please try again.