File tree Expand file tree Collapse file tree 2 files changed +47
-3
lines changed
Expand file tree Collapse file tree 2 files changed +47
-3
lines changed Original file line number Diff line number Diff line change @@ -2218,13 +2218,17 @@ static uintmax_t do_change_note_fanout(
22182218 char * fullpath , unsigned int fullpath_len ,
22192219 unsigned char fanout )
22202220{
2221- struct tree_content * t = root -> tree ;
2221+ struct tree_content * t ;
22222222 struct tree_entry * e , leaf ;
22232223 unsigned int i , tmp_hex_sha1_len , tmp_fullpath_len ;
22242224 uintmax_t num_notes = 0 ;
22252225 unsigned char sha1 [20 ];
22262226 char realpath [60 ];
22272227
2228+ if (!root -> tree )
2229+ load_tree (root );
2230+ t = root -> tree ;
2231+
22282232 for (i = 0 ; t && i < t -> entry_count ; i ++ ) {
22292233 e = t -> entries [i ];
22302234 tmp_hex_sha1_len = hex_sha1_len + e -> name -> str_len ;
@@ -2276,8 +2280,6 @@ static uintmax_t do_change_note_fanout(
22762280 leaf .tree );
22772281 } else if (S_ISDIR (e -> versions [1 ].mode )) {
22782282 /* This is a subdir that may contain note entries */
2279- if (!e -> tree )
2280- load_tree (e );
22812283 num_notes += do_change_note_fanout (orig_root , e ,
22822284 hex_sha1 , tmp_hex_sha1_len ,
22832285 fullpath , tmp_fullpath_len , fanout );
Original file line number Diff line number Diff line change @@ -483,6 +483,48 @@ test_expect_success 'verify that lots of notes trigger a fanout scheme' '
483483
484484'
485485
486+ # Create another notes tree from the one above
487+ SP=" "
488+ cat >> input << INPUT_END
489+ commit refs/heads/other_commits
490+ committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL > $GIT_COMMITTER_DATE
491+ data <<COMMIT
492+ commit #$(( $num_commit + 1 ))
493+ COMMIT
494+
495+ from refs/heads/many_commits
496+ M 644 inline file
497+ data <<EOF
498+ file contents in commit #$(( $num_commit + 1 ))
499+ EOF
500+
501+ commit refs/notes/other_notes
502+ committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL > $GIT_COMMITTER_DATE
503+ data <<COMMIT
504+ committing one more note on a tree imported from a previous notes tree
505+ COMMIT
506+
507+ M 040000 $( git log --no-walk --format=%T refs/notes/many_notes) $SP
508+ N inline :$(( $num_commit + 1 ))
509+ data <<EOF
510+ note for commit #$(( $num_commit + 1 ))
511+ EOF
512+ INPUT_END
513+
514+ test_expect_success ' verify that importing a notes tree respects the fanout scheme' '
515+ git fast-import <input &&
516+
517+ # None of the entries in the top-level notes tree should be a full SHA1
518+ git ls-tree --name-only refs/notes/other_notes |
519+ while read path
520+ do
521+ if test $(expr length "$path") -ge 40
522+ then
523+ return 1
524+ fi
525+ done
526+ '
527+
486528cat >> expect_non-note1 << EOF
487529This is not a note, but rather a regular file residing in a notes tree
488530EOF
You can’t perform that action at this time.
0 commit comments