зеркало из https://github.com/microsoft/git.git
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:
Родитель
a5b0c24f3e
Коммит
d9246d4303
|
@ -8,7 +8,7 @@ git-notes - Add/inspect commit notes
|
|||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git-notes' (edit | show) [commit]
|
||||
'git-notes' (edit [-F <file> | -m <msg>] | show) [commit]
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
|
@ -33,6 +33,20 @@ show::
|
|||
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
|
||||
------
|
||||
Written by Johannes Schindelin <johannes.schindelin@gmx.de>
|
||||
|
|
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"
|
||||
|
|
|
@ -110,5 +110,41 @@ test_expect_success 'show multi-line notes' '
|
|||
git log -2 > 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
|
||||
|
|
Загрузка…
Ссылка в новой задаче