The semantics for "git notes edit -m/-F" overlap with those for "git notes add -f", and the behaviour (i.e. overwriting existing notes with the given message/file) is more intuitively captured by (and better documented with) "git notes add -f". Suggested-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Johan Herland <johan@herland.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			207 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
test_description='Test notes trees that also contain non-notes'
 | 
						|
 | 
						|
. ./test-lib.sh
 | 
						|
 | 
						|
number_of_commits=100
 | 
						|
 | 
						|
start_note_commit () {
 | 
						|
	test_tick &&
 | 
						|
	cat <<INPUT_END
 | 
						|
commit refs/notes/commits
 | 
						|
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
 | 
						|
data <<COMMIT
 | 
						|
notes
 | 
						|
COMMIT
 | 
						|
 | 
						|
from refs/notes/commits^0
 | 
						|
deleteall
 | 
						|
INPUT_END
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
verify_notes () {
 | 
						|
	git log | grep "^    " > output &&
 | 
						|
	i=$number_of_commits &&
 | 
						|
	while [ $i -gt 0 ]; do
 | 
						|
		echo "    commit #$i" &&
 | 
						|
		echo "    note for commit #$i" &&
 | 
						|
		i=$(($i-1));
 | 
						|
	done > expect &&
 | 
						|
	test_cmp expect output
 | 
						|
}
 | 
						|
 | 
						|
test_expect_success "setup: create a couple of commits" '
 | 
						|
 | 
						|
	test_tick &&
 | 
						|
	cat <<INPUT_END >input &&
 | 
						|
commit refs/heads/master
 | 
						|
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
 | 
						|
data <<COMMIT
 | 
						|
commit #1
 | 
						|
COMMIT
 | 
						|
 | 
						|
M 644 inline file
 | 
						|
data <<EOF
 | 
						|
file in commit #1
 | 
						|
EOF
 | 
						|
 | 
						|
INPUT_END
 | 
						|
 | 
						|
	test_tick &&
 | 
						|
	cat <<INPUT_END >>input &&
 | 
						|
commit refs/heads/master
 | 
						|
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
 | 
						|
data <<COMMIT
 | 
						|
commit #2
 | 
						|
COMMIT
 | 
						|
 | 
						|
M 644 inline file
 | 
						|
data <<EOF
 | 
						|
file in commit #2
 | 
						|
EOF
 | 
						|
 | 
						|
INPUT_END
 | 
						|
	git fast-import --quiet <input
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success "create a notes tree with both notes and non-notes" '
 | 
						|
 | 
						|
	commit1=$(git rev-parse refs/heads/master^) &&
 | 
						|
	commit2=$(git rev-parse refs/heads/master) &&
 | 
						|
	test_tick &&
 | 
						|
	cat <<INPUT_END >input &&
 | 
						|
commit refs/notes/commits
 | 
						|
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
 | 
						|
data <<COMMIT
 | 
						|
notes commit #1
 | 
						|
COMMIT
 | 
						|
 | 
						|
N inline $commit1
 | 
						|
data <<EOF
 | 
						|
note for commit #1
 | 
						|
EOF
 | 
						|
 | 
						|
N inline $commit2
 | 
						|
data <<EOF
 | 
						|
note for commit #2
 | 
						|
EOF
 | 
						|
 | 
						|
INPUT_END
 | 
						|
	test_tick &&
 | 
						|
	cat <<INPUT_END >>input &&
 | 
						|
commit refs/notes/commits
 | 
						|
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
 | 
						|
data <<COMMIT
 | 
						|
notes commit #2
 | 
						|
COMMIT
 | 
						|
 | 
						|
M 644 inline foobar/non-note.txt
 | 
						|
data <<EOF
 | 
						|
A non-note in a notes tree
 | 
						|
EOF
 | 
						|
 | 
						|
N inline $commit2
 | 
						|
data <<EOF
 | 
						|
edited note for commit #2
 | 
						|
EOF
 | 
						|
 | 
						|
INPUT_END
 | 
						|
	test_tick &&
 | 
						|
	cat <<INPUT_END >>input &&
 | 
						|
commit refs/notes/commits
 | 
						|
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
 | 
						|
data <<COMMIT
 | 
						|
notes commit #3
 | 
						|
COMMIT
 | 
						|
 | 
						|
N inline $commit1
 | 
						|
data <<EOF
 | 
						|
edited note for commit #1
 | 
						|
EOF
 | 
						|
 | 
						|
M 644 inline deadbeef
 | 
						|
data <<EOF
 | 
						|
non-note with SHA1-like name
 | 
						|
EOF
 | 
						|
 | 
						|
M 644 inline de/adbeef
 | 
						|
data <<EOF
 | 
						|
another non-note with SHA1-like name
 | 
						|
EOF
 | 
						|
 | 
						|
M 644 inline de/adbeefdeadbeefdeadbeefdeadbeefdeadbeef
 | 
						|
data <<EOF
 | 
						|
This is actually a valid note, albeit to a non-existing object.
 | 
						|
It is needed in order to trigger the "mishandling" of the dead/beef non-note.
 | 
						|
EOF
 | 
						|
 | 
						|
M 644 inline dead/beef
 | 
						|
data <<EOF
 | 
						|
yet another non-note with SHA1-like name
 | 
						|
EOF
 | 
						|
 | 
						|
INPUT_END
 | 
						|
	git fast-import --quiet <input &&
 | 
						|
	git config core.notesRef refs/notes/commits
 | 
						|
'
 | 
						|
 | 
						|
cat >expect <<EXPECT_END
 | 
						|
    commit #2
 | 
						|
    edited note for commit #2
 | 
						|
    commit #1
 | 
						|
    edited note for commit #1
 | 
						|
EXPECT_END
 | 
						|
 | 
						|
test_expect_success "verify contents of notes" '
 | 
						|
 | 
						|
	git log | grep "^    " > actual &&
 | 
						|
	test_cmp expect actual
 | 
						|
'
 | 
						|
 | 
						|
cat >expect_nn1 <<EXPECT_END
 | 
						|
A non-note in a notes tree
 | 
						|
EXPECT_END
 | 
						|
cat >expect_nn2 <<EXPECT_END
 | 
						|
non-note with SHA1-like name
 | 
						|
EXPECT_END
 | 
						|
cat >expect_nn3 <<EXPECT_END
 | 
						|
another non-note with SHA1-like name
 | 
						|
EXPECT_END
 | 
						|
cat >expect_nn4 <<EXPECT_END
 | 
						|
yet another non-note with SHA1-like name
 | 
						|
EXPECT_END
 | 
						|
 | 
						|
test_expect_success "verify contents of non-notes" '
 | 
						|
 | 
						|
	git cat-file -p refs/notes/commits:foobar/non-note.txt > actual_nn1 &&
 | 
						|
	test_cmp expect_nn1 actual_nn1 &&
 | 
						|
	git cat-file -p refs/notes/commits:deadbeef > actual_nn2 &&
 | 
						|
	test_cmp expect_nn2 actual_nn2 &&
 | 
						|
	git cat-file -p refs/notes/commits:de/adbeef > actual_nn3 &&
 | 
						|
	test_cmp expect_nn3 actual_nn3 &&
 | 
						|
	git cat-file -p refs/notes/commits:dead/beef > actual_nn4 &&
 | 
						|
	test_cmp expect_nn4 actual_nn4
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success "git-notes preserves non-notes" '
 | 
						|
 | 
						|
	test_tick &&
 | 
						|
	git notes add -f -m "foo bar"
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success "verify contents of non-notes after git-notes" '
 | 
						|
 | 
						|
	git cat-file -p refs/notes/commits:foobar/non-note.txt > actual_nn1 &&
 | 
						|
	test_cmp expect_nn1 actual_nn1 &&
 | 
						|
	git cat-file -p refs/notes/commits:deadbeef > actual_nn2 &&
 | 
						|
	test_cmp expect_nn2 actual_nn2 &&
 | 
						|
	git cat-file -p refs/notes/commits:de/adbeef > actual_nn3 &&
 | 
						|
	test_cmp expect_nn3 actual_nn3 &&
 | 
						|
	git cat-file -p refs/notes/commits:dead/beef > actual_nn4 &&
 | 
						|
	test_cmp expect_nn4 actual_nn4
 | 
						|
'
 | 
						|
 | 
						|
test_done
 |