Linus Torvalds | a3e870f | 2005-05-30 12:51:00 -0700 | [diff] [blame] | 1 | #!/bin/sh |
Junio C Hamano | 5fec3ef | 2005-06-25 02:22:05 -0700 | [diff] [blame^] | 2 | # |
| 3 | # Copyright (c) 2005 Linus Torvalds |
| 4 | # |
| 5 | |
| 6 | usage () { |
| 7 | echo 'git commit [-m existing-commit] [<path>...]' |
| 8 | exit 1 |
| 9 | } |
| 10 | |
Linus Torvalds | 9c06531 | 2005-06-08 13:33:15 -0700 | [diff] [blame] | 11 | : ${GIT_DIR=.git} |
Junio C Hamano | 5fec3ef | 2005-06-25 02:22:05 -0700 | [diff] [blame^] | 12 | if [ ! -d "$GIT_DIR" ]; then |
Linus Torvalds | 96069cf | 2005-06-14 10:20:14 -0700 | [diff] [blame] | 13 | echo Not a git directory 1>&2 |
| 14 | exit 1 |
| 15 | fi |
Junio C Hamano | 5fec3ef | 2005-06-25 02:22:05 -0700 | [diff] [blame^] | 16 | while case "$#" in 0) break ;; esac |
| 17 | do |
| 18 | case "$1" in |
| 19 | -m) shift |
| 20 | case "$#" in |
| 21 | 0) usage ;; |
| 22 | *) use_commit=`git-rev-parse "$1"` || |
| 23 | exit ;; |
| 24 | esac |
| 25 | ;; |
| 26 | *) break |
| 27 | ;; |
| 28 | esac |
| 29 | shift |
| 30 | done |
| 31 | |
Linus Torvalds | 0795495 | 2005-06-20 21:20:41 -0700 | [diff] [blame] | 32 | git-update-cache -q --refresh -- "$@" || exit 1 |
Linus Torvalds | 96069cf | 2005-06-14 10:20:14 -0700 | [diff] [blame] | 33 | PARENTS="-p HEAD" |
Junio C Hamano | 5fec3ef | 2005-06-25 02:22:05 -0700 | [diff] [blame^] | 34 | if [ ! -r "$GIT_DIR/HEAD" ]; then |
Linus Torvalds | 96069cf | 2005-06-14 10:20:14 -0700 | [diff] [blame] | 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="" |
| 47 | else |
Junio C Hamano | 5fec3ef | 2005-06-25 02:22:05 -0700 | [diff] [blame^] | 48 | if [ -f "$GIT_DIR/MERGE_HEAD" ]; then |
Linus Torvalds | 96069cf | 2005-06-14 10:20:14 -0700 | [diff] [blame] | 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" |
Junio C Hamano | 5fec3ef | 2005-06-25 02:22:05 -0700 | [diff] [blame^] | 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 |
Linus Torvalds | 96069cf | 2005-06-14 10:20:14 -0700 | [diff] [blame] | 88 | fi |
Linus Torvalds | a3e870f | 2005-05-30 12:51:00 -0700 | [diff] [blame] | 89 | if [ "$?" != "0" ] |
| 90 | then |
| 91 | cat .editmsg |
Linus Torvalds | 170241b | 2005-06-19 19:57:01 -0700 | [diff] [blame] | 92 | rm .editmsg |
Linus Torvalds | a3e870f | 2005-05-30 12:51:00 -0700 | [diff] [blame] | 93 | exit 1 |
| 94 | fi |
Junio C Hamano | 5fec3ef | 2005-06-25 02:22:05 -0700 | [diff] [blame^] | 95 | case "$use_commit" in |
| 96 | '') |
| 97 | ${VISUAL:-${EDITOR:-vi}} .editmsg |
| 98 | ;; |
| 99 | esac |
Linus Torvalds | a3e870f | 2005-05-30 12:51:00 -0700 | [diff] [blame] | 100 | grep -v '^#' < .editmsg | git-stripspace > .cmitmsg |
Linus Torvalds | 170241b | 2005-06-19 19:57:01 -0700 | [diff] [blame] | 101 | [ -s .cmitmsg ] && |
| 102 | tree=$(git-write-tree) && |
| 103 | commit=$(cat .cmitmsg | git-commit-tree $tree $PARENTS) && |
Junio C Hamano | 5fec3ef | 2005-06-25 02:22:05 -0700 | [diff] [blame^] | 104 | echo $commit > "$GIT_DIR/HEAD" && |
| 105 | rm -f -- "$GIT_DIR/MERGE_HEAD" |
Linus Torvalds | 170241b | 2005-06-19 19:57:01 -0700 | [diff] [blame] | 106 | ret="$?" |
| 107 | rm -f .cmitmsg .editmsg |
| 108 | exit "$ret" |