git-commit-scripton commit [PATCH] git-branch: avoid getting confused by empty or nonexisting branches. (a38e727)
   1#!/bin/sh
   2#
   3# Copyright (c) 2005 Linus Torvalds
   4#
   5
   6. git-sh-setup-script || die "Not a git archive"
   7
   8usage () {
   9        die 'git commit [-m existing-commit] [<path>...]'
  10}
  11
  12files=()
  13while case "$#" in 0) break ;; esac
  14do
  15    case "$1" in
  16    -m) shift
  17        case "$#" in
  18        0) usage ;;
  19        *) use_commit=`git-rev-parse "$1"` ||
  20           exit ;;
  21        esac
  22        ;;
  23    --all)
  24        files=($(git-diff-files --name-only))\
  25        ;;
  26    *)  break
  27        ;;
  28    esac
  29    shift
  30done
  31
  32git-update-cache -q --refresh -- "$@" "${files[@]}" || exit 1
  33PARENTS="-p HEAD"
  34if [ ! -r "$GIT_DIR/HEAD" ]; then
  35        if [ -z "$(git-ls-files)" ]; then
  36                echo Nothing to commit 1>&2
  37                exit 1
  38        fi
  39        (
  40                echo "#"
  41                echo "# Initial commit"
  42                echo "#"
  43                git-ls-files | sed 's/^/# New file: /'
  44                echo "#"
  45        ) > .editmsg
  46        PARENTS=""
  47else
  48        if [ -f "$GIT_DIR/MERGE_HEAD" ]; then
  49                echo "#"
  50                echo "# It looks like your may be committing a MERGE."
  51                echo "# If this is not correct, please remove the file"
  52                echo "# $GIT_DIR/MERGE_HEAD"
  53                echo "# and try again"
  54                echo "#"
  55                PARENTS="-p HEAD -p MERGE_HEAD"
  56        elif test "$use_commit" != ""
  57        then
  58                pick_author_script='
  59                /^author /{
  60                        h
  61                        s/^author \([^<]*\) <[^>]*> .*$/\1/
  62                        s/'\''/'\''\'\'\''/g
  63                        s/.*/GIT_AUTHOR_NAME='\''&'\''/p
  64
  65                        g
  66                        s/^author [^<]* <\([^>]*\)> .*$/\1/
  67                        s/'\''/'\''\'\'\''/g
  68                        s/.*/GIT_AUTHOR_EMAIL='\''&'\''/p
  69
  70                        g
  71                        s/^author [^<]* <[^>]*> \(.*\)$/\1/
  72                        s/'\''/'\''\'\'\''/g
  73                        s/.*/GIT_AUTHOR_DATE='\''&'\''/p
  74
  75                        q
  76                }
  77                '
  78                set_author_env=`git-cat-file commit "$use_commit" |
  79                sed -ne "$pick_author_script"`
  80                eval "$set_author_env"
  81                export GIT_AUTHOR_NAME
  82                export GIT_AUTHOR_EMAIL
  83                export GIT_AUTHOR_DATE
  84                git-cat-file commit "$use_commit" |
  85                sed -e '1,/^$/d'
  86        fi >.editmsg
  87        git-status-script >>.editmsg
  88fi
  89if [ "$?" != "0" ]
  90then
  91        cat .editmsg
  92        rm .editmsg
  93        exit 1
  94fi
  95case "$use_commit" in
  96'')
  97        ${VISUAL:-${EDITOR:-vi}} .editmsg
  98        ;;
  99esac
 100grep -v '^#' < .editmsg | git-stripspace > .cmitmsg
 101[ -s .cmitmsg ] && 
 102        tree=$(git-write-tree) &&
 103        commit=$(cat .cmitmsg | git-commit-tree $tree $PARENTS) &&
 104        echo $commit > "$GIT_DIR/HEAD" &&
 105        rm -f -- "$GIT_DIR/MERGE_HEAD"
 106ret="$?"
 107rm -f .cmitmsg .editmsg
 108exit "$ret"