@@ -879,6 +879,18 @@ void git_index_entry__init_from_stat(
879
879
entry -> file_size = st -> st_size ;
880
880
}
881
881
882
+ static void index_entry_adjust_namemask (
883
+ git_index_entry * entry ,
884
+ size_t path_length )
885
+ {
886
+ entry -> flags &= ~GIT_IDXENTRY_NAMEMASK ;
887
+
888
+ if (path_length < GIT_IDXENTRY_NAMEMASK )
889
+ entry -> flags |= path_length & GIT_IDXENTRY_NAMEMASK ;
890
+ else
891
+ entry -> flags |= GIT_IDXENTRY_NAMEMASK ;
892
+ }
893
+
882
894
static int index_entry_create (
883
895
git_index_entry * * out ,
884
896
git_repository * repo ,
@@ -1279,13 +1291,7 @@ static int index_insert(
1279
1291
1280
1292
/* make sure that the path length flag is correct */
1281
1293
path_length = ((struct entry_internal * )entry )-> pathlen ;
1282
-
1283
- entry -> flags &= ~GIT_IDXENTRY_NAMEMASK ;
1284
-
1285
- if (path_length < GIT_IDXENTRY_NAMEMASK )
1286
- entry -> flags |= path_length & GIT_IDXENTRY_NAMEMASK ;
1287
- else
1288
- entry -> flags |= GIT_IDXENTRY_NAMEMASK ;
1294
+ index_entry_adjust_namemask (entry , path_length );
1289
1295
1290
1296
/* this entry is now up-to-date and should not be checked for raciness */
1291
1297
entry -> flags_extended |= GIT_IDXENTRY_UPTODATE ;
@@ -1550,21 +1556,28 @@ int git_index__fill(git_index *index, const git_vector *source_entries)
1550
1556
1551
1557
assert (index );
1552
1558
1559
+ if (!source_entries -> length )
1560
+ return 0 ;
1561
+
1553
1562
if (git_mutex_lock (& index -> lock ) < 0 ) {
1554
1563
giterr_set (GITERR_OS , "Unable to acquire index lock" );
1555
1564
return -1 ;
1556
1565
}
1557
1566
1567
+ git_vector_size_hint (& index -> entries , source_entries -> length );
1568
+ git_idxmap_resize (index -> entries_map , source_entries -> length * 1.3 );
1569
+
1558
1570
git_vector_foreach (source_entries , i , source_entry ) {
1559
1571
git_index_entry * entry = NULL ;
1560
1572
1561
1573
if ((ret = index_entry_dup (& entry , index , source_entry )) < 0 )
1562
1574
break ;
1563
1575
1576
+ index_entry_adjust_namemask (entry , ((struct entry_internal * )entry )-> pathlen );
1564
1577
entry -> flags_extended |= GIT_IDXENTRY_UPTODATE ;
1578
+ entry -> mode = git_index__create_mode (entry -> mode );
1565
1579
1566
- ret = git_vector_insert (& index -> entries , entry );
1567
- if (ret < 0 )
1580
+ if ((ret = git_vector_insert (& index -> entries , entry )) < 0 )
1568
1581
break ;
1569
1582
1570
1583
INSERT_IN_MAP (index , entry , ret );
@@ -2889,11 +2902,7 @@ static int read_tree_cb(
2889
2902
entry -> flags_extended = 0 ;
2890
2903
}
2891
2904
2892
- if (path .size < GIT_IDXENTRY_NAMEMASK )
2893
- entry -> flags = path .size & GIT_IDXENTRY_NAMEMASK ;
2894
- else
2895
- entry -> flags = GIT_IDXENTRY_NAMEMASK ;
2896
-
2905
+ index_entry_adjust_namemask (entry , path .size );
2897
2906
git_buf_free (& path );
2898
2907
2899
2908
if (git_vector_insert (data -> new_entries , entry ) < 0 ) {
0 commit comments