| #!/bin/sh |
| # |
| # git-flow -- A collection of Git extensions to provide high-level |
| # repository operations for Vincent Driessen's branching model. |
| # |
| # Original blog post presenting this model is found at: |
| # http://nvie.com/git-model |
| # |
| # Feel free to contribute to this project at: |
| # http://github.com/nvie/gitflow |
| # |
| # Copyright 2010 Vincent Driessen. All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions are met: |
| # |
| # 1. Redistributions of source code must retain the above copyright notice, |
| # this list of conditions and the following disclaimer. |
| # |
| # 2. Redistributions in binary form must reproduce the above copyright |
| # notice, this list of conditions and the following disclaimer in the |
| # documentation and/or other materials provided with the distribution. |
| # |
| # THIS SOFTWARE IS PROVIDED BY VINCENT DRIESSEN ``AS IS'' AND ANY EXPRESS OR |
| # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO |
| # EVENT SHALL VINCENT DRIESSEN OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, |
| # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
| # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
| # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| # |
| # The views and conclusions contained in the software and documentation are |
| # those of the authors and should not be interpreted as representing official |
| # policies, either expressed or implied, of Vincent Driessen. |
| # |
| |
| # enable debug mode |
| if [ "$DEBUG" = "yes" ]; then |
| set -x |
| fi |
| |
| export GITFLOW_DIR=$(dirname "$0") |
| |
| usage() { |
| echo "usage: git flow <subcommand>" |
| echo |
| echo "Available subcommands are:" |
| echo " init Initialize a new git repo with support for the branching model." |
| echo " feature Manage your feature branches." |
| echo " release Manage your release branches." |
| echo " hotfix Manage your hotfix branches." |
| echo " support Manage your support branches." |
| echo " version Shows version information." |
| echo |
| echo "Try 'git flow <subcommand> help' for details." |
| } |
| |
| main() { |
| if [ $# -lt 1 ]; then |
| usage |
| exit 1 |
| fi |
| |
| # load common functionality |
| . "$GITFLOW_DIR/gitflow-common" |
| |
| # This environmental variable fixes non-POSIX getopt style argument |
| # parsing, effectively breaking git-flow subcommand parsing on several |
| # Linux platforms. |
| export POSIXLY_CORRECT=1 |
| |
| # use the shFlags project to parse the command line arguments |
| . "$GITFLOW_DIR/gitflow-shFlags" |
| FLAGS_PARENT="git flow" |
| FLAGS "$@" || exit $? |
| eval set -- "${FLAGS_ARGV}" |
| |
| # sanity checks |
| SUBCOMMAND="$1"; shift |
| |
| if [ ! -e "$GITFLOW_DIR/git-flow-$SUBCOMMAND" ]; then |
| usage |
| exit 1 |
| fi |
| |
| # run command |
| . "$GITFLOW_DIR/git-flow-$SUBCOMMAND" |
| FLAGS_PARENT="git flow $SUBCOMMAND" |
| |
| # test if the first argument is a flag (i.e. starts with '-') |
| # in that case, we interpret this arg as a flag for the default |
| # command |
| SUBACTION="default" |
| if [ "$1" != "" ] && { ! echo "$1" | grep -q "^-"; } then |
| SUBACTION="$1"; shift |
| fi |
| if ! type "cmd_$SUBACTION" >/dev/null 2>&1; then |
| warn "Unknown subcommand: '$SUBACTION'" |
| usage |
| exit 1 |
| fi |
| |
| # run the specified action |
| cmd_$SUBACTION "$@" |
| } |
| |
| main "$@" |