@@ -879,6 +879,18 @@ void git_index_entry__init_from_stat(
879879 entry -> file_size = st -> st_size ;
880880}
881881
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+
882894static int index_entry_create (
883895 git_index_entry * * out ,
884896 git_repository * repo ,
@@ -1279,13 +1291,7 @@ static int index_insert(
12791291
12801292 /* make sure that the path length flag is correct */
12811293 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 );
12891295
12901296 /* this entry is now up-to-date and should not be checked for raciness */
12911297 entry -> flags_extended |= GIT_IDXENTRY_UPTODATE ;
@@ -1561,10 +1567,11 @@ int git_index__fill(git_index *index, const git_vector *source_entries)
15611567 if ((ret = index_entry_dup (& entry , index , source_entry )) < 0 )
15621568 break ;
15631569
1570+ index_entry_adjust_namemask (entry , ((struct entry_internal * )entry )-> pathlen );
15641571 entry -> flags_extended |= GIT_IDXENTRY_UPTODATE ;
1572+ entry -> mode = git_index__create_mode (entry -> mode );
15651573
1566- ret = git_vector_insert (& index -> entries , entry );
1567- if (ret < 0 )
1574+ if ((ret = git_vector_insert (& index -> entries , entry )) < 0 )
15681575 break ;
15691576
15701577 INSERT_IN_MAP (index , entry , ret );
@@ -2889,11 +2896,7 @@ static int read_tree_cb(
28892896 entry -> flags_extended = 0 ;
28902897 }
28912898
2892- if (path .size < GIT_IDXENTRY_NAMEMASK )
2893- entry -> flags = path .size & GIT_IDXENTRY_NAMEMASK ;
2894- else
2895- entry -> flags = GIT_IDXENTRY_NAMEMASK ;
2896-
2899+ index_entry_adjust_namemask (entry , path .size );
28972900 git_buf_free (& path );
28982901
28992902 if (git_vector_insert (data -> new_entries , entry ) < 0 ) {
0 commit comments