diff options
author | Junio C Hamano <gitster@pobox.com> | 2009-02-05 19:40:39 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-02-05 19:40:39 -0800 |
commit | 7b75b331f6744fbf953fe8913703378ef86a2189 (patch) | |
tree | 25154056da08462508e529a7ba92073775d295fd /git-notes.sh | |
parent | 5d680a67d7909c89af96eba4a2d77abed606292b (diff) | |
parent | 22a3d060937072b0f197a8084af879c753c68fe7 (diff) | |
download | git-7b75b331f6744fbf953fe8913703378ef86a2189.tar.gz |
Merge branch 'js/notes'
* js/notes:
git-notes: fix printing of multi-line notes
notes: fix core.notesRef documentation
Add an expensive test for git-notes
Speed up git notes lookup
Add a script to edit/inspect notes
Introduce commit notes
Conflicts:
pretty.c
Diffstat (limited to 'git-notes.sh')
-rwxr-xr-x | git-notes.sh | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/git-notes.sh b/git-notes.sh new file mode 100755 index 0000000000..bfdbaa8527 --- /dev/null +++ b/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 |