Skip to content

Commit

Permalink
Add a script to edit/inspect notes
Browse files Browse the repository at this point in the history
The script 'git notes' allows you to edit and show commit notes, by
calling either

	git notes show <commit>

or

	git notes edit <commit>

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
dscho authored and gitster committed Dec 21, 2008
1 parent 879ef24 commit 055a597
Show file tree
Hide file tree
Showing 6 changed files with 179 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -82,6 +82,7 @@ git-mktag
git-mktree
git-name-rev
git-mv
git-notes
git-pack-redundant
git-pack-objects
git-pack-refs
Expand Down
46 changes: 46 additions & 0 deletions Documentation/git-notes.txt
@@ -0,0 +1,46 @@
git-notes(1)
============

NAME
----
git-notes - Add/inspect commit notes

SYNOPSIS
--------
[verse]
'git-notes' (edit | show) [commit]

DESCRIPTION
-----------
This command allows you to add notes to commit messages, without
changing the commit. To discern these notes from the message stored
in the commit object, the notes are indented like the message, after
an unindented line saying "Notes:".

To disable commit notes, you have to set the config variable
core.notesRef to the empty string. Alternatively, you can set it
to a different ref, something like "refs/notes/bugzilla". This setting
can be overridden by the environment variable "GIT_NOTES_REF".


SUBCOMMANDS
-----------

edit::
Edit the notes for a given commit (defaults to HEAD).

show::
Show the notes for a given commit (defaults to HEAD).


Author
------
Written by Johannes Schindelin <johannes.schindelin@gmx.de>

Documentation
-------------
Documentation by Johannes Schindelin

GIT
---
Part of the gitlink:git[7] suite
1 change: 1 addition & 0 deletions Makefile
Expand Up @@ -258,6 +258,7 @@ SCRIPT_SH += git-merge-octopus.sh
SCRIPT_SH += git-merge-one-file.sh
SCRIPT_SH += git-merge-resolve.sh
SCRIPT_SH += git-mergetool.sh
SCRIPT_SH += git-notes.sh
SCRIPT_SH += git-parse-remote.sh
SCRIPT_SH += git-pull.sh
SCRIPT_SH += git-quiltimport.sh
Expand Down
1 change: 1 addition & 0 deletions command-list.txt
Expand Up @@ -73,6 +73,7 @@ git-mktag plumbingmanipulators
git-mktree plumbingmanipulators
git-mv mainporcelain common
git-name-rev plumbinginterrogators
git-notes mainporcelain
git-pack-objects plumbingmanipulators
git-pack-redundant plumbinginterrogators
git-pack-refs ancillarymanipulators
Expand Down
65 changes: 65 additions & 0 deletions git-notes.sh
@@ -0,0 +1,65 @@
#!/bin/sh

USAGE="(edit | 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"

COMMIT=$(git rev-parse --verify --default HEAD "$@") ||
die "Invalid commit: $@"

MESSAGE="$GIT_DIR"/new-notes-$COMMIT
trap '
test -f "$MESSAGE" && rm "$MESSAGE"
' 0

case "$ACTION" in
edit)
GIT_NOTES_REF= git log -1 $COMMIT | sed "s/^/#/" > "$MESSAGE"

GIT_INDEX_FILE="$MESSAGE".idx
export GIT_INDEX_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 >> "$MESSAGE" 2> /dev/null
fi

${VISUAL:-${EDITOR:-vi}} "$MESSAGE"

grep -v ^# < "$MESSAGE" | git stripspace > "$MESSAGE".processed
mv "$MESSAGE".processed "$MESSAGE"
if [ -s "$MESSAGE" ]; then
BLOB=$(git hash-object -w "$MESSAGE") ||
die "Could not write into object database"
git update-index --add --cacheinfo 0644 $BLOB $COMMIT ||
die "Could not write index"
else
test -z "$CURRENT_HEAD" &&
die "Will not initialise with empty tree"
git update-index --force-remove $COMMIT ||
die "Could not update index"
fi

TREE=$(git write-tree) || die "Could not write tree"
NEW_HEAD=$(echo Annotate $COMMIT | git commit-tree $TREE $PARENT) ||
die "Could not annotate"
git update-ref -m "Annotate $COMMIT" \
"$GIT_NOTES_REF" $NEW_HEAD $CURRENT_HEAD
;;
show)
git show "$GIT_NOTES_REF":$COMMIT
;;
*)
usage
esac
65 changes: 65 additions & 0 deletions t/t3301-notes.sh
@@ -0,0 +1,65 @@
#!/bin/sh
#
# Copyright (c) 2007 Johannes E. Schindelin
#

test_description='Test commit notes'

. ./test-lib.sh

cat > fake_editor.sh << \EOF
echo "$MSG" > "$1"
echo "$MSG" >& 2
EOF
chmod a+x fake_editor.sh
VISUAL=./fake_editor.sh
export VISUAL

test_expect_success 'cannot annotate non-existing HEAD' '
! MSG=3 git notes edit
'

test_expect_success setup '
: > a1 &&
git add a1 &&
test_tick &&
git commit -m 1st &&
: > a2 &&
git add a2 &&
test_tick &&
git commit -m 2nd
'

test_expect_success 'need valid notes ref' '
! MSG=1 GIT_NOTES_REF='/' git notes edit &&
! MSG=2 GIT_NOTES_REF='/' git notes show
'

test_expect_success 'create notes' '
git config core.notesRef refs/notes/commits &&
MSG=b1 git notes edit &&
test ! -f .git/new-notes &&
test 1 = $(git ls-tree refs/notes/commits | wc -l) &&
test b1 = $(git notes show) &&
git show HEAD^ &&
! git notes show HEAD^
'

cat > expect << EOF
commit 268048bfb8a1fb38e703baceb8ab235421bf80c5
Author: A U Thor <author@example.com>
Date: Thu Apr 7 15:14:13 2005 -0700
2nd
Notes:
b1
EOF

test_expect_success 'show notes' '
! (git cat-file commit HEAD | grep b1) &&
git log -1 > output &&
git diff expect output
'

test_done

0 comments on commit 055a597

Please sign in to comment.