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:
parent
a5b0c24f3e
commit
d9246d4303
@ -8,7 +8,7 @@ git-notes - Add/inspect commit notes
|
|||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
[verse]
|
[verse]
|
||||||
'git-notes' (edit | show) [commit]
|
'git-notes' (edit [-F <file> | -m <msg>] | show) [commit]
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
@ -33,6 +33,20 @@ show::
|
|||||||
Show the notes for a given commit (defaults to HEAD).
|
Show the notes for a given commit (defaults to HEAD).
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
-m <msg>::
|
||||||
|
Use the given note message (instead of prompting).
|
||||||
|
If multiple `-m` (or `-F`) options are given, their
|
||||||
|
values are concatenated as separate paragraphs.
|
||||||
|
|
||||||
|
-F <file>::
|
||||||
|
Take the note message from the given file. Use '-' to
|
||||||
|
read the note message from the standard input.
|
||||||
|
If multiple `-F` (or `-m`) options are given, their
|
||||||
|
values are concatenated as separate paragraphs.
|
||||||
|
|
||||||
|
|
||||||
Author
|
Author
|
||||||
------
|
------
|
||||||
Written by Johannes Schindelin <johannes.schindelin@gmx.de>
|
Written by Johannes Schindelin <johannes.schindelin@gmx.de>
|
||||||
|
64
git-notes.sh
64
git-notes.sh
@ -1,16 +1,59 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
USAGE="(edit | show) [commit]"
|
USAGE="(edit [-F <file> | -m <msg>] | show) [commit]"
|
||||||
. git-sh-setup
|
. git-sh-setup
|
||||||
|
|
||||||
test -n "$3" && usage
|
|
||||||
|
|
||||||
test -z "$1" && usage
|
test -z "$1" && usage
|
||||||
ACTION="$1"; shift
|
ACTION="$1"; shift
|
||||||
|
|
||||||
test -z "$GIT_NOTES_REF" && GIT_NOTES_REF="$(git config core.notesref)"
|
test -z "$GIT_NOTES_REF" && GIT_NOTES_REF="$(git config core.notesref)"
|
||||||
test -z "$GIT_NOTES_REF" && GIT_NOTES_REF="refs/notes/commits"
|
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 "$@") ||
|
COMMIT=$(git rev-parse --verify --default HEAD "$@") ||
|
||||||
die "Invalid commit: $@"
|
die "Invalid commit: $@"
|
||||||
|
|
||||||
@ -29,19 +72,24 @@ edit)
|
|||||||
test -f "$GIT_INDEX_FILE" && rm "$GIT_INDEX_FILE"
|
test -f "$GIT_INDEX_FILE" && rm "$GIT_INDEX_FILE"
|
||||||
' 0
|
' 0
|
||||||
|
|
||||||
GIT_NOTES_REF= git log -1 $COMMIT | sed "s/^/#/" > "$MSG_FILE"
|
|
||||||
|
|
||||||
CURRENT_HEAD=$(git show-ref "$GIT_NOTES_REF" | cut -f 1 -d ' ')
|
CURRENT_HEAD=$(git show-ref "$GIT_NOTES_REF" | cut -f 1 -d ' ')
|
||||||
if [ -z "$CURRENT_HEAD" ]; then
|
if [ -z "$CURRENT_HEAD" ]; then
|
||||||
PARENT=
|
PARENT=
|
||||||
else
|
else
|
||||||
PARENT="-p $CURRENT_HEAD"
|
PARENT="-p $CURRENT_HEAD"
|
||||||
git read-tree "$GIT_NOTES_REF" || die "Could not read index"
|
git read-tree "$GIT_NOTES_REF" || die "Could not read index"
|
||||||
git cat-file blob :$COMMIT >> "$MSG_FILE" 2> /dev/null
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
core_editor="$(git config core.editor)"
|
if [ -z "$MESSAGE" ]; then
|
||||||
${GIT_EDITOR:-${core_editor:-${VISUAL:-${EDITOR:-vi}}}} "$MSG_FILE"
|
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
|
grep -v ^# < "$MSG_FILE" | git stripspace > "$MSG_FILE".processed
|
||||||
mv "$MSG_FILE".processed "$MSG_FILE"
|
mv "$MSG_FILE".processed "$MSG_FILE"
|
||||||
|
@ -110,5 +110,41 @@ test_expect_success 'show multi-line notes' '
|
|||||||
git log -2 > output &&
|
git log -2 > output &&
|
||||||
test_cmp expect-multiline output
|
test_cmp expect-multiline output
|
||||||
'
|
'
|
||||||
|
test_expect_success 'create -m and -F notes (setup)' '
|
||||||
|
: > a4 &&
|
||||||
|
git add a4 &&
|
||||||
|
test_tick &&
|
||||||
|
git commit -m 4th &&
|
||||||
|
echo "xyzzy" > note5 &&
|
||||||
|
git notes edit -m spam -F note5 -m "foo
|
||||||
|
bar
|
||||||
|
baz"
|
||||||
|
'
|
||||||
|
|
||||||
|
whitespace=" "
|
||||||
|
cat > expect-m-and-F << EOF
|
||||||
|
commit 15023535574ded8b1a89052b32673f84cf9582b8
|
||||||
|
Author: A U Thor <author@example.com>
|
||||||
|
Date: Thu Apr 7 15:16:13 2005 -0700
|
||||||
|
|
||||||
|
4th
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
spam
|
||||||
|
$whitespace
|
||||||
|
xyzzy
|
||||||
|
$whitespace
|
||||||
|
foo
|
||||||
|
bar
|
||||||
|
baz
|
||||||
|
EOF
|
||||||
|
|
||||||
|
printf "\n" >> expect-m-and-F
|
||||||
|
cat expect-multiline >> expect-m-and-F
|
||||||
|
|
||||||
|
test_expect_success 'show -m and -F notes' '
|
||||||
|
git log -3 > output &&
|
||||||
|
test_cmp expect-m-and-F output
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user