Teach "-m <msg>" and "-F <file>" to "git notes edit"
The "-m" and "-F" options are already the established method (in both git-commit and git-tag) to specify a commit/tag message without invoking the editor. This patch teaches "git notes edit" to respect the same options for specifying a notes message without invoking the editor. Multiple "-m" and/or "-F" options are concatenated as separate paragraphs. The patch also updates the "git notes" documentation and adds selftests for the new functionality. Unfortunately, the added selftests include a couple of lines with trailing whitespace (without these the test will fail). This may cause git to warn about "whitespace errors". This patch has been improved by the following contributions: - Thomas Rast: fix trailing whitespace in t3301 Signed-off-by: Johan Herland <johan@herland.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
a5b0c24f3e
commit
d9246d4303
64
git-notes.sh
64
git-notes.sh
@ -1,16 +1,59 @@
|
||||
#!/bin/sh
|
||||
|
||||
USAGE="(edit | show) [commit]"
|
||||
USAGE="(edit [-F <file> | -m <msg>] | show) [commit]"
|
||||
. git-sh-setup
|
||||
|
||||
test -n "$3" && usage
|
||||
|
||||
test -z "$1" && usage
|
||||
ACTION="$1"; shift
|
||||
|
||||
test -z "$GIT_NOTES_REF" && GIT_NOTES_REF="$(git config core.notesref)"
|
||||
test -z "$GIT_NOTES_REF" && GIT_NOTES_REF="refs/notes/commits"
|
||||
|
||||
MESSAGE=
|
||||
while test $# != 0
|
||||
do
|
||||
case "$1" in
|
||||
-m)
|
||||
test "$ACTION" = "edit" || usage
|
||||
shift
|
||||
if test "$#" = "0"; then
|
||||
die "error: option -m needs an argument"
|
||||
else
|
||||
if [ -z "$MESSAGE" ]; then
|
||||
MESSAGE="$1"
|
||||
else
|
||||
MESSAGE="$MESSAGE
|
||||
|
||||
$1"
|
||||
fi
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-F)
|
||||
test "$ACTION" = "edit" || usage
|
||||
shift
|
||||
if test "$#" = "0"; then
|
||||
die "error: option -F needs an argument"
|
||||
else
|
||||
if [ -z "$MESSAGE" ]; then
|
||||
MESSAGE="$(cat "$1")"
|
||||
else
|
||||
MESSAGE="$MESSAGE
|
||||
|
||||
$(cat "$1")"
|
||||
fi
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
-*)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
COMMIT=$(git rev-parse --verify --default HEAD "$@") ||
|
||||
die "Invalid commit: $@"
|
||||
|
||||
@ -29,19 +72,24 @@ edit)
|
||||
test -f "$GIT_INDEX_FILE" && rm "$GIT_INDEX_FILE"
|
||||
' 0
|
||||
|
||||
GIT_NOTES_REF= git log -1 $COMMIT | sed "s/^/#/" > "$MSG_FILE"
|
||||
|
||||
CURRENT_HEAD=$(git show-ref "$GIT_NOTES_REF" | cut -f 1 -d ' ')
|
||||
if [ -z "$CURRENT_HEAD" ]; then
|
||||
PARENT=
|
||||
else
|
||||
PARENT="-p $CURRENT_HEAD"
|
||||
git read-tree "$GIT_NOTES_REF" || die "Could not read index"
|
||||
git cat-file blob :$COMMIT >> "$MSG_FILE" 2> /dev/null
|
||||
fi
|
||||
|
||||
core_editor="$(git config core.editor)"
|
||||
${GIT_EDITOR:-${core_editor:-${VISUAL:-${EDITOR:-vi}}}} "$MSG_FILE"
|
||||
if [ -z "$MESSAGE" ]; then
|
||||
GIT_NOTES_REF= git log -1 $COMMIT | sed "s/^/#/" > "$MSG_FILE"
|
||||
if [ ! -z "$CURRENT_HEAD" ]; then
|
||||
git cat-file blob :$COMMIT >> "$MSG_FILE" 2> /dev/null
|
||||
fi
|
||||
core_editor="$(git config core.editor)"
|
||||
${GIT_EDITOR:-${core_editor:-${VISUAL:-${EDITOR:-vi}}}} "$MSG_FILE"
|
||||
else
|
||||
echo "$MESSAGE" > "$MSG_FILE"
|
||||
fi
|
||||
|
||||
grep -v ^# < "$MSG_FILE" | git stripspace > "$MSG_FILE".processed
|
||||
mv "$MSG_FILE".processed "$MSG_FILE"
|
||||
|
||||
Reference in New Issue
Block a user