Merge branch 'jh/note-trees-record-blobs'

"git notes -C <blob>" should not take an object that is not a blob.

* jh/note-trees-record-blobs:
  notes: disallow reusing non-blob as a note object
This commit is contained in:
Junio C Hamano 2014-03-14 14:25:39 -07:00
commit b37f81b7b6
2 changed files with 32 additions and 1 deletions

View File

@ -269,7 +269,11 @@ static int parse_reuse_arg(const struct option *opt, const char *arg, int unset)
die(_("Failed to resolve '%s' as a valid ref."), arg); die(_("Failed to resolve '%s' as a valid ref."), arg);
if (!(buf = read_sha1_file(object, &type, &len)) || !len) { if (!(buf = read_sha1_file(object, &type, &len)) || !len) {
free(buf); free(buf);
die(_("Failed to read object '%s'."), arg);; die(_("Failed to read object '%s'."), arg);
}
if (type != OBJ_BLOB) {
free(buf);
die(_("Cannot read note data from non-blob object '%s'."), arg);
} }
strbuf_add(&(msg->buf), buf, len); strbuf_add(&(msg->buf), buf, len);
free(buf); free(buf);

View File

@ -812,6 +812,33 @@ test_expect_success 'create note from non-existing note with "git notes add -C"
test_must_fail git notes list HEAD test_must_fail git notes list HEAD
' '
test_expect_success 'create note from non-blob with "git notes add -C" fails' '
commit=$(git rev-parse --verify HEAD) &&
tree=$(git rev-parse --verify HEAD:) &&
test_must_fail git notes add -C $commit &&
test_must_fail git notes add -C $tree &&
test_must_fail git notes list HEAD
'
cat > expect << EOF
commit 80d796defacd5db327b7a4e50099663902fbdc5c
Author: A U Thor <author@example.com>
Date: Thu Apr 7 15:20:13 2005 -0700
8th
Notes (other):
This is a blob object
EOF
test_expect_success 'create note from blob with "git notes add -C" reuses blob id' '
blob=$(echo "This is a blob object" | git hash-object -w --stdin) &&
git notes add -C $blob &&
git log -1 > actual &&
test_cmp expect actual &&
test "$(git notes list HEAD)" = "$blob"
'
cat > expect << EOF cat > expect << EOF
commit 016e982bad97eacdbda0fcbd7ce5b0ba87c81f1b commit 016e982bad97eacdbda0fcbd7ce5b0ba87c81f1b
Author: A U Thor <author@example.com> Author: A U Thor <author@example.com>