Skip to content

Commit e9060db

Browse files
committed
Make RepositoryStatus expose an indexer
1 parent 3fb4baf commit e9060db

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

LibGit2Sharp.Tests/StatusFixture.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ public void CanRetrieveTheStatusOfTheWholeWorkingDirectory()
3737

3838
RepositoryStatus status = repo.Index.RetrieveStatus();
3939

40-
IndexEntry indexEntry = repo.Index[file];
41-
Assert.Equal(FileStatus.Staged, indexEntry.State);
40+
Assert.Equal(FileStatus.Staged, status[file]);
4241

4342
Assert.NotNull(status);
4443
Assert.Equal(6, status.Count());
@@ -54,9 +53,10 @@ public void CanRetrieveTheStatusOfTheWholeWorkingDirectory()
5453
File.AppendAllText(Path.Combine(repo.Info.WorkingDirectory, file),
5554
"Tclem's favorite commit message: boom");
5655

57-
Assert.Equal(FileStatus.Staged | FileStatus.Modified, indexEntry.State);
56+
Assert.Equal(FileStatus.Staged | FileStatus.Modified, repo.Index.RetrieveStatus(file));
5857

5958
RepositoryStatus status2 = repo.Index.RetrieveStatus();
59+
Assert.Equal(FileStatus.Staged | FileStatus.Modified, status2[file]);
6060

6161
Assert.NotNull(status2);
6262
Assert.Equal(6, status2.Count());

LibGit2Sharp/RepositoryStatus.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections;
33
using System.Collections.Generic;
4+
using System.Diagnostics;
45
using System.Linq;
56
using LibGit2Sharp.Core;
67

@@ -68,6 +69,28 @@ private StatusEntry StateChanged(IntPtr filePathPtr, uint state)
6869
return new StatusEntry(filePath.Native, gitStatus);
6970
}
7071

72+
/// <summary>
73+
/// Gets the <see cref = "FileStatus" /> for the specified relative path.
74+
/// </summary>
75+
public virtual FileStatus this[string path]
76+
{
77+
get
78+
{
79+
Ensure.ArgumentNotNullOrEmptyString(path, "path");
80+
81+
var entries = statusEntries.Where(e => string.Equals(e.FilePath, path, StringComparison.Ordinal)).ToList();
82+
83+
Debug.Assert(!(entries.Count > 1));
84+
85+
if (entries.Count == 0)
86+
{
87+
return FileStatus.Nonexistent;
88+
}
89+
90+
return entries.Single().State;
91+
}
92+
}
93+
7194
/// <summary>
7295
/// Returns an enumerator that iterates through the collection.
7396
/// </summary>

0 commit comments

Comments
 (0)