@@ -1218,30 +1218,48 @@ def test_index_add_non_normalized_path(self, rw_repo):
12181218
12191219 rw_repo .index .add (non_normalized_path )
12201220
1221+ def test_index_file_v3 (self ):
1222+ index = IndexFile (self .rorepo , fixture_path ("index_extended_flags" ))
1223+ assert index .entries
1224+ assert index .version == 3
1225+ assert len (index .entries ) == 4
1226+ assert index .entries [('init.t' , 0 )].skip_worktree
1227+
1228+ # Write the data - it must match the original.
1229+ tmpfile = tempfile .mktemp ()
1230+ index .write (tmpfile )
1231+ assert Path (tmpfile ).read_bytes () == Path (fixture_path ("index_extended_flags" )).read_bytes ()
1232+ os .remove (tmpfile )
1233+
12211234 @with_rw_directory
1222- def test_index_version_v3 (self , tmp_dir ):
1235+ def test_index_file_v3_with_git_command (self , tmp_dir ):
12231236 tmp_dir = Path (tmp_dir )
12241237 with cwd (tmp_dir ):
1225- subprocess .run (["git" , "init" , "-q" ], check = True )
1238+ git = Git (tmp_dir )
1239+ git .init ()
1240+
12261241 file = tmp_dir / "file.txt"
12271242 file .write_text ("hello" )
1228- subprocess . run ([ "git" , " add" , "-N" , " file.txt"], check = True )
1243+ git . add ( "--intent-to- add" , "file.txt" ) # intent-to-add sets extended flag
12291244
12301245 repo = Repo (tmp_dir )
1246+ index = repo .index
12311247
1232- assert len (repo .index .entries ) == 1
1233- entry = list (repo .index .entries .values ())[0 ]
1248+ assert len (index .entries ) == 1
1249+ assert index .version == 3
1250+ entry = list (index .entries .values ())[0 ]
12341251 assert entry .path == "file.txt"
12351252 assert entry .intent_to_add
12361253
12371254 file2 = tmp_dir / "file2.txt"
12381255 file2 .write_text ("world" )
1239- repo . index .add (["file2.txt" ])
1240- repo . index .write ()
1256+ index .add (["file2.txt" ])
1257+ index .write ()
12411258
1242- status_str = subprocess .check_output (["git" , "status" , "--porcelain" ], text = True )
1243- assert " A file.txt\n " in status_str
1244- assert "A file2.txt\n " in status_str
1259+ status_str = git .status (porcelain = True )
1260+ status_lines = status_str .splitlines ()
1261+ assert " A file.txt" in status_lines
1262+ assert "A file2.txt" in status_lines
12451263
12461264
12471265class TestIndexUtils :
0 commit comments