Browse Source

git-commit: log parameter updates.

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>
maint
Junio C Hamano 20 years ago
parent
commit
0c091296c0
  1. 2
      git-cherry
  2. 127
      git-commit-script
  3. 2
      git-rebase-script

2
git-cherry

@ -23,7 +23,7 @@ The output is intended to be used as:
while read commit while read commit
do do
GIT_EXTERNAL_DIFF=git-apply-patch-script git-diff-tree -p "$commit" && GIT_EXTERNAL_DIFF=git-apply-patch-script git-diff-tree -p "$commit" &&
git-commit-script -m "$commit" git-commit-script -C "$commit"
done done
' '



127
git-commit-script

@ -6,44 +6,105 @@
. git-sh-setup-script || die "Not a git archive" . git-sh-setup-script || die "Not a git archive"


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


files=() all= logfile= use_commit= no_edit= log_given= log_message=
while case "$#" in 0) break ;; esac while case "$#" in 0) break;; esac
do do
case "$1" in case "$1" in
-m) shift -a|--a|--al|--all)
case "$#" in all=t
0) usage ;; shift ;;
*) use_commit=`git-rev-parse --verify "$1"` || -F=*|--f=*|--fi=*|--fil=*|--file=*)
exit ;; log_given=t$log_given
esac logfile=`expr "$1" : '-[^=]*=\(.*\)'`
;; no_edit=t
--all) shift ;;
files=($(git-diff-files --name-only))\ -F|--f|--fi|--fil|--file)
;; case "$#" in 1) usage ;; esac; shift
*) break log_given=t$log_given
;; logfile="$1"
esac 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 shift
break ;;
-*)
usage ;;
*)
break ;;
esac
done 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" PARENTS="-p HEAD"
if [ ! -r "$GIT_DIR/HEAD" ]; then if [ ! -r "$GIT_DIR/HEAD" ]; then
if [ -z "$(git-ls-files)" ]; then if [ -z "$(git-ls-files)" ]; then
echo Nothing to commit 1>&2 echo Nothing to commit 1>&2
exit 1 exit 1
fi fi
( {
echo "#" echo "#"
echo "# Initial commit" echo "# Initial commit"
case "$no_edit" in
t) echo "# (ignoring your commit message for initial commit)"
no_edit=
esac
echo "#" echo "#"
git-ls-files | sed 's/^/# New file: /' git-ls-files | sed 's/^/# New file: /'
echo "#" echo "#"
) > .editmsg } >.editmsg
PARENTS="" PARENTS=""
no_edit=
else else
if [ -f "$GIT_DIR/MERGE_HEAD" ]; then if [ -f "$GIT_DIR/MERGE_HEAD" ]; then
echo "#" echo "#"
@ -51,8 +112,25 @@ else
echo "# If this is not correct, please remove the file" echo "# If this is not correct, please remove the file"
echo "# $GIT_DIR/MERGE_HEAD" echo "# $GIT_DIR/MERGE_HEAD"
echo "# and try again" echo "# and try again"
case "$no_edit" in
t) echo "# (ignoring your commit message for merge commit)"
no_edit=
esac
echo "#" echo "#"
PARENTS="-p HEAD -p MERGE_HEAD" 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" != "" elif test "$use_commit" != ""
then then
pick_author_script=' pick_author_script='
@ -92,17 +170,22 @@ then
rm .editmsg rm .editmsg
exit 1 exit 1
fi fi
case "$use_commit" in case "$no_edit" in
'') '')
${VISUAL:-${EDITOR:-vi}} .editmsg ${VISUAL:-${EDITOR:-vi}} .editmsg
;; ;;
esac esac
grep -v '^#' < .editmsg | git-stripspace > .cmitmsg grep -v '^#' < .editmsg | git-stripspace > .cmitmsg
[ -s .cmitmsg ] && if test -s .cmitmsg
then
tree=$(git-write-tree) && tree=$(git-write-tree) &&
commit=$(cat .cmitmsg | git-commit-tree $tree $PARENTS) && commit=$(cat .cmitmsg | git-commit-tree $tree $PARENTS) &&
echo $commit > "$GIT_DIR/HEAD" && echo $commit > "$GIT_DIR/HEAD" &&
rm -f -- "$GIT_DIR/MERGE_HEAD" rm -f -- "$GIT_DIR/MERGE_HEAD"
else
echo >&2 "* no commit message? aborting commit."
false
fi
ret="$?" ret="$?"
rm -f .cmitmsg .editmsg rm -f .cmitmsg .editmsg
exit "$ret" exit "$ret"

2
git-rebase-script

@ -37,7 +37,7 @@ do
esac esac
S=`cat "$GIT_DIR/HEAD"` && S=`cat "$GIT_DIR/HEAD"` &&
GIT_EXTERNAL_DIFF=git-apply-patch-script git-diff-tree -p $commit && 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 echo $commit >>$fail
git-read-tree --reset -u $S git-read-tree --reset -u $S
} }

Loading…
Cancel
Save