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(
2218
2218
char * fullpath , unsigned int fullpath_len ,
2219
2219
unsigned char fanout )
2220
2220
{
2221
- struct tree_content * t = root -> tree ;
2221
+ struct tree_content * t ;
2222
2222
struct tree_entry * e , leaf ;
2223
2223
unsigned int i , tmp_hex_sha1_len , tmp_fullpath_len ;
2224
2224
uintmax_t num_notes = 0 ;
2225
2225
unsigned char sha1 [20 ];
2226
2226
char realpath [60 ];
2227
2227
2228
+ if (!root -> tree )
2229
+ load_tree (root );
2230
+ t = root -> tree ;
2231
+
2228
2232
for (i = 0 ; t && i < t -> entry_count ; i ++ ) {
2229
2233
e = t -> entries [i ];
2230
2234
tmp_hex_sha1_len = hex_sha1_len + e -> name -> str_len ;
@@ -2276,8 +2280,6 @@ static uintmax_t do_change_note_fanout(
2276
2280
leaf .tree );
2277
2281
} else if (S_ISDIR (e -> versions [1 ].mode )) {
2278
2282
/* This is a subdir that may contain note entries */
2279
- if (!e -> tree )
2280
- load_tree (e );
2281
2283
num_notes += do_change_note_fanout (orig_root , e ,
2282
2284
hex_sha1 , tmp_hex_sha1_len ,
2283
2285
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' '
483
483
484
484
'
485
485
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
+
486
528
cat >> expect_non-note1 << EOF
487
529
This is not a note, but rather a regular file residing in a notes tree
488
530
EOF
You can’t perform that action at this time.
0 commit comments