Skip to content

Commit 270a6b1

Browse files
committed
Introduce StatusOptions.IncludeUnaltered
1 parent c9157e4 commit 270a6b1

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

LibGit2Sharp.Tests/StatusFixture.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,5 +536,17 @@ public void CanExcludeStatusOfFilesInSubmodule()
536536
Assert.Equal(expected, status.Modified.Select(x => x.FilePath).ToArray());
537537
}
538538
}
539+
540+
[Fact]
541+
public void CanIncludeStatusOfUnalteredFiles()
542+
{
543+
string path = CloneStandardTestRepo();
544+
using (var repo = new Repository(path))
545+
{
546+
RepositoryStatus status = repo.Index.RetrieveStatus(new StatusOptions() { IncludeUnaltered = true });
547+
548+
Assert.Equal(17, status.Unaltered.Count());
549+
}
550+
}
539551
}
540552
}

LibGit2Sharp/RepositoryStatus.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public class RepositoryStatus : IEnumerable<StatusEntry>
2626
private readonly List<StatusEntry> ignored = new List<StatusEntry>();
2727
private readonly List<StatusEntry> renamedInIndex = new List<StatusEntry>();
2828
private readonly List<StatusEntry> renamedInWorkDir = new List<StatusEntry>();
29+
private readonly List<StatusEntry> unaltered = new List<StatusEntry>();
2930
private readonly bool isDirty;
3031

3132
private readonly IDictionary<FileStatus, Action<RepositoryStatus, StatusEntry>> dispatcher = Build();
@@ -42,7 +43,8 @@ private static IDictionary<FileStatus, Action<RepositoryStatus, StatusEntry>> Bu
4243
{ FileStatus.Removed, (rs, s) => rs.removed.Add(s) },
4344
{ FileStatus.RenamedInIndex, (rs, s) => rs.renamedInIndex.Add(s) },
4445
{ FileStatus.Ignored, (rs, s) => rs.ignored.Add(s) },
45-
{ FileStatus.RenamedInWorkDir, (rs, s) => rs.renamedInWorkDir.Add(s) }
46+
{ FileStatus.RenamedInWorkDir, (rs, s) => rs.renamedInWorkDir.Add(s) },
47+
{ FileStatus.Unaltered, (rs, s) => rs.unaltered.Add(s) },
4648
};
4749
}
4850

@@ -81,7 +83,7 @@ internal RepositoryStatus(Repository repo, StatusOptions options)
8183
AddStatusEntryForDelta(entry.Status, deltaHeadToIndex, deltaIndexToWorkDir);
8284
}
8385

84-
isDirty = statusEntries.Any(entry => entry.State != FileStatus.Ignored);
86+
isDirty = statusEntries.Any(entry => entry.State != FileStatus.Ignored || entry.State != FileStatus.Unaltered);
8587
}
8688
}
8789

@@ -123,6 +125,12 @@ private static GitStatusOptions CreateStatusOptions(StatusOptions options)
123125
GitStatusOptionFlags.RecurseIgnoredDirs;
124126
}
125127

128+
if (options.IncludeUnaltered)
129+
{
130+
coreOptions.Flags |=
131+
GitStatusOptionFlags.IncludeUnmodified;
132+
}
133+
126134
return coreOptions;
127135
}
128136

@@ -278,6 +286,14 @@ public virtual IEnumerable<StatusEntry> RenamedInWorkDir
278286
get { return renamedInWorkDir; }
279287
}
280288

289+
/// <summary>
290+
/// List of files that were unmodified in the working directory.
291+
/// </summary>
292+
public virtual IEnumerable<StatusEntry> Unaltered
293+
{
294+
get { return unaltered; }
295+
}
296+
281297
/// <summary>
282298
/// True if the index or the working directory has been altered since the last commit. False otherwise.
283299
/// </summary>

LibGit2Sharp/StatusOptions.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,5 +66,10 @@ public StatusOptions()
6666
/// Recurse into ignored directories
6767
/// </summary>
6868
public bool RecurseIgnoredDirs { get; set; }
69+
70+
/// <summary>
71+
/// Include unaltered files when scanning for status
72+
/// </summary>
73+
public bool IncludeUnaltered { get; set; }
6974
}
7075
}

0 commit comments

Comments
 (0)