@@ -41,13 +41,15 @@ static inline int bitmap_writer_nr_selected_commits(struct bitmap_writer *writer
4141 return writer -> selected_nr - writer -> pseudo_merges_nr ;
4242}
4343
44- void bitmap_writer_init (struct bitmap_writer * writer , struct repository * r )
44+ void bitmap_writer_init (struct bitmap_writer * writer , struct repository * r ,
45+ struct packing_data * pdata )
4546{
4647 memset (writer , 0 , sizeof (struct bitmap_writer ));
4748 if (writer -> bitmaps )
4849 BUG ("bitmap writer already initialized" );
4950 writer -> bitmaps = kh_init_oid_map ();
5051 writer -> pseudo_merge_commits = kh_init_oid_map ();
52+ writer -> to_pack = pdata ;
5153
5254 string_list_init_dup (& writer -> pseudo_merge_groups );
5355
@@ -99,23 +101,21 @@ void bitmap_writer_show_progress(struct bitmap_writer *writer, int show)
99101 * Build the initial type index for the packfile or multi-pack-index
100102 */
101103void bitmap_writer_build_type_index (struct bitmap_writer * writer ,
102- struct packing_data * to_pack ,
103- struct pack_idx_entry * * index ,
104- uint32_t index_nr )
104+ struct pack_idx_entry * * index )
105105{
106106 uint32_t i ;
107107
108108 writer -> commits = ewah_new ();
109109 writer -> trees = ewah_new ();
110110 writer -> blobs = ewah_new ();
111111 writer -> tags = ewah_new ();
112- ALLOC_ARRAY (to_pack -> in_pack_pos , to_pack -> nr_objects );
112+ ALLOC_ARRAY (writer -> to_pack -> in_pack_pos , writer -> to_pack -> nr_objects );
113113
114- for (i = 0 ; i < index_nr ; ++ i ) {
114+ for (i = 0 ; i < writer -> to_pack -> nr_objects ; ++ i ) {
115115 struct object_entry * entry = (struct object_entry * )index [i ];
116116 enum object_type real_type ;
117117
118- oe_set_in_pack_pos (to_pack , entry , i );
118+ oe_set_in_pack_pos (writer -> to_pack , entry , i );
119119
120120 switch (oe_type (entry )) {
121121 case OBJ_COMMIT :
@@ -126,7 +126,7 @@ void bitmap_writer_build_type_index(struct bitmap_writer *writer,
126126 break ;
127127
128128 default :
129- real_type = oid_object_info (to_pack -> repo ,
129+ real_type = oid_object_info (writer -> to_pack -> repo ,
130130 & entry -> idx .oid , NULL );
131131 break ;
132132 }
@@ -569,8 +569,7 @@ static void store_selected(struct bitmap_writer *writer,
569569 kh_value (writer -> bitmaps , hash_pos ) = stored ;
570570}
571571
572- int bitmap_writer_build (struct bitmap_writer * writer ,
573- struct packing_data * to_pack )
572+ int bitmap_writer_build (struct bitmap_writer * writer )
574573{
575574 struct bitmap_builder bb ;
576575 size_t i ;
@@ -581,17 +580,15 @@ int bitmap_writer_build(struct bitmap_writer *writer,
581580 uint32_t * mapping ;
582581 int closed = 1 ; /* until proven otherwise */
583582
584- writer -> to_pack = to_pack ;
585-
586583 if (writer -> show_progress )
587584 writer -> progress = start_progress ("Building bitmaps" ,
588585 writer -> selected_nr );
589586 trace2_region_enter ("pack-bitmap-write" , "building_bitmaps_total" ,
590587 the_repository );
591588
592- old_bitmap = prepare_bitmap_git (to_pack -> repo );
589+ old_bitmap = prepare_bitmap_git (writer -> to_pack -> repo );
593590 if (old_bitmap )
594- mapping = create_bitmap_mapping (old_bitmap , to_pack );
591+ mapping = create_bitmap_mapping (old_bitmap , writer -> to_pack );
595592 else
596593 mapping = NULL ;
597594
@@ -697,6 +694,10 @@ void bitmap_writer_select_commits(struct bitmap_writer *writer,
697694 if (indexed_commits_nr < 100 ) {
698695 for (i = 0 ; i < indexed_commits_nr ; ++ i )
699696 bitmap_writer_push_commit (writer , indexed_commits [i ], 0 );
697+
698+ select_pseudo_merges (writer , indexed_commits ,
699+ indexed_commits_nr );
700+
700701 return ;
701702 }
702703
@@ -1001,7 +1002,6 @@ void bitmap_writer_set_checksum(struct bitmap_writer *writer,
10011002
10021003void bitmap_writer_finish (struct bitmap_writer * writer ,
10031004 struct pack_idx_entry * * index ,
1004- uint32_t index_nr ,
10051005 const char * filename ,
10061006 uint16_t options )
10071007{
@@ -1034,12 +1034,13 @@ void bitmap_writer_finish(struct bitmap_writer *writer,
10341034 dump_bitmap (f , writer -> tags );
10351035
10361036 if (options & BITMAP_OPT_LOOKUP_TABLE )
1037- CALLOC_ARRAY (offsets , index_nr );
1037+ CALLOC_ARRAY (offsets , writer -> to_pack -> nr_objects );
10381038
10391039 for (i = 0 ; i < bitmap_writer_nr_selected_commits (writer ); i ++ ) {
10401040 struct bitmapped_commit * stored = & writer -> selected [i ];
10411041 int commit_pos = oid_pos (& stored -> commit -> object .oid , index ,
1042- index_nr , oid_access );
1042+ writer -> to_pack -> nr_objects ,
1043+ oid_access );
10431044
10441045 if (commit_pos < 0 )
10451046 BUG (_ ("trying to write commit not in index" ));
@@ -1055,7 +1056,7 @@ void bitmap_writer_finish(struct bitmap_writer *writer,
10551056 write_lookup_table (writer , f , offsets );
10561057
10571058 if (options & BITMAP_OPT_HASH_CACHE )
1058- write_hash_cache (f , index , index_nr );
1059+ write_hash_cache (f , index , writer -> to_pack -> nr_objects );
10591060
10601061 finalize_hashfile (f , NULL , FSYNC_COMPONENT_PACK_METADATA ,
10611062 CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE );
0 commit comments