Skip to content

Commit

Permalink
git-commit: log parameter updates.
Browse files Browse the repository at this point in the history
While moving '-m' to make room for CVS compatible "here is the
log message", enhance source of log parameters.

  -m 'message': a command line parameter.
  -F <file>   : a file (use '-' to read from stdin).
  -C <commit> : message in existing commit.
  -c <commit> : message in existing commit (allows further editing).

Longer option names for these options are also available.

While we are at it, get rid of shell array bashism.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Aug 10, 2005
1 parent 5ccfb75 commit 0c09129
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 24 deletions.
2 changes: 1 addition & 1 deletion git-cherry
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ The output is intended to be used as:
while read commit
do
GIT_EXTERNAL_DIFF=git-apply-patch-script git-diff-tree -p "$commit" &&
git-commit-script -m "$commit"
git-commit-script -C "$commit"
done
'

Expand Down
127 changes: 105 additions & 22 deletions git-commit-script
Original file line number Diff line number Diff line change
Expand Up @@ -6,53 +6,131 @@
. git-sh-setup-script || die "Not a git archive"

usage () {
die 'git commit [--all] [-m existing-commit] [<path>...]'
die 'git commit [-a] [-m <message>] [-F <logfile>] [(-C|-c) <commit>] [<path>...]'
}

files=()
while case "$#" in 0) break ;; esac
all= logfile= use_commit= no_edit= log_given= log_message=
while case "$#" in 0) break;; esac
do
case "$1" in
-m) shift
case "$#" in
0) usage ;;
*) use_commit=`git-rev-parse --verify "$1"` ||
exit ;;
esac
;;
--all)
files=($(git-diff-files --name-only))\
;;
*) break
;;
esac
case "$1" in
-a|--a|--al|--all)
all=t
shift ;;
-F=*|--f=*|--fi=*|--fil=*|--file=*)
log_given=t$log_given
logfile=`expr "$1" : '-[^=]*=\(.*\)'`
no_edit=t
shift ;;
-F|--f|--fi|--fil|--file)
case "$#" in 1) usage ;; esac; shift
log_given=t$log_given
logfile="$1"
no_edit=t
shift ;;
-m=*|--m=*|--me=*|--mes=*|--mess=*|--messa=*|--messag=*|--message=*)
log_given=t$log_given
log_message=`expr "$1" : '-[^=]*=\(.*\)'`
no_edit=t
shift ;;
-m|--m|--me|--mes|--mess|--messa|--messag|--message)
case "$#" in 1) usage ;; esac; shift
log_given=t$log_given
log_message="$1"
no_edit=t
shift ;;
-c=*|--ree=*|--reed=*|--reedi=*|--reedit=*|--reedit-=*|--reedit-m=*|\
--reedit-me=*|--reedit-mes=*|--reedit-mess=*|--reedit-messa=*|\
--reedit-messag=*|--reedit-message=*)
log_given=t$log_given
use_commit=`expr "$1" : '-[^=]*=\(.*\)'`
shift ;;
-c|--ree|--reed|--reedi|--reedit|--reedit-|--reedit-m|--reedit-me|\
--reedit-mes|--reedit-mess|--reedit-messa|--reedit-messag|--reedit-message)
case "$#" in 1) usage ;; esac; shift
log_given=t$log_given
use_commit="$1"
shift ;;
-C=*|--reu=*|--reus=*|--reuse=*|--reuse-=*|--reuse-m=*|--reuse-me=*|\
--reuse-mes=*|--reuse-mess=*|--reuse-messa=*|--reuse-messag=*|\
--reuse-message=*)
log_given=t$log_given
use_commit=`expr "$1" : '-[^=]*=\(.*\)'`
no_edit=t
shift ;;
-C|--reu|--reus|--reuse|--reuse-|--reuse-m|--reuse-me|--reuse-mes|\
--reuse-mess|--reuse-messa|--reuse-messag|--reuse-message)
case "$#" in 1) usage ;; esac; shift
log_given=t$log_given
use_commit="$1"
no_edit=t
shift ;;
--)
shift
break ;;
-*)
usage ;;
*)
break ;;
esac
done

git-update-cache -q --refresh -- "$@" "${files[@]}" || exit 1
case "$log_given" in
tt*)
die "Only one of -c/-C/-F/-m can be used." ;;
esac

case "$all" in
t)
git-diff-files --name-only -z |
xargs -0 git-update-cache -q -- || exit 1 ;;
esac
git-update-cache -q --refresh -- "$@" || exit 1

PARENTS="-p HEAD"
if [ ! -r "$GIT_DIR/HEAD" ]; then
if [ -z "$(git-ls-files)" ]; then
echo Nothing to commit 1>&2
exit 1
fi
(
{
echo "#"
echo "# Initial commit"
case "$no_edit" in
t) echo "# (ignoring your commit message for initial commit)"
no_edit=
esac
echo "#"
git-ls-files | sed 's/^/# New file: /'
echo "#"
) > .editmsg
} >.editmsg
PARENTS=""
no_edit=
else
if [ -f "$GIT_DIR/MERGE_HEAD" ]; then
echo "#"
echo "# It looks like your may be committing a MERGE."
echo "# If this is not correct, please remove the file"
echo "# $GIT_DIR/MERGE_HEAD"
echo "# and try again"
case "$no_edit" in
t) echo "# (ignoring your commit message for merge commit)"
no_edit=
esac
echo "#"
PARENTS="-p HEAD -p MERGE_HEAD"
elif test "$log_message" != ''
then
echo "$log_message"
elif test "$logfile" != ""
then
if test "$logfile" = -
then
test -t 0 &&
echo >&2 "(reading log message from standard input)"
cat
else
cat <"$logfile"
fi
elif test "$use_commit" != ""
then
pick_author_script='
Expand Down Expand Up @@ -92,17 +170,22 @@ then
rm .editmsg
exit 1
fi
case "$use_commit" in
case "$no_edit" in
'')
${VISUAL:-${EDITOR:-vi}} .editmsg
;;
esac
grep -v '^#' < .editmsg | git-stripspace > .cmitmsg
[ -s .cmitmsg ] &&
if test -s .cmitmsg
then
tree=$(git-write-tree) &&
commit=$(cat .cmitmsg | git-commit-tree $tree $PARENTS) &&
echo $commit > "$GIT_DIR/HEAD" &&
rm -f -- "$GIT_DIR/MERGE_HEAD"
else
echo >&2 "* no commit message? aborting commit."
false
fi
ret="$?"
rm -f .cmitmsg .editmsg
exit "$ret"
2 changes: 1 addition & 1 deletion git-rebase-script
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ do
esac
S=`cat "$GIT_DIR/HEAD"` &&
GIT_EXTERNAL_DIFF=git-apply-patch-script git-diff-tree -p $commit &&
git-commit-script -m "$commit" || {
git-commit-script -C "$commit" || {
echo $commit >>$fail
git-read-tree --reset -u $S
}
Expand Down

0 comments on commit 0c09129

Please sign in to comment.