Skip to content

Commit 10badbf

Browse files
fix: catch errors in EnumerateFiles
1 parent a20245b commit 10badbf

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using Microsoft.Extensions.Logging;
2+
3+
namespace Arius.Core.Shared.Extensions;
4+
5+
internal static class IEnumerableExtensions
6+
{
7+
public static IEnumerable<T> WithErrorLogging<T>(this IEnumerable<T> source, ILogger logger, string msg)
8+
{
9+
using var e = source.GetEnumerator();
10+
11+
while (true)
12+
{
13+
bool moved;
14+
try
15+
{
16+
moved = e.MoveNext();
17+
}
18+
catch (Exception ex)
19+
{
20+
logger.LogError(ex, msg);
21+
throw;
22+
}
23+
24+
if (!moved) yield break;
25+
yield return e.Current;
26+
}
27+
}
28+
}

src/Arius.Core/Shared/FileSystem/FilePairFileSystem.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Microsoft.Extensions.Logging;
1+
using Arius.Core.Shared.Extensions;
2+
using Microsoft.Extensions.Logging;
23
using Zio;
34
using Zio.FileSystems;
45

@@ -109,7 +110,7 @@ private IEnumerable<FileEntry> EnumerateFiles(DirectoryEntry directory, SearchOp
109110
yield break;
110111
}
111112

112-
foreach (var fe in directory.EnumerateFiles())
113+
foreach (var fe in directory.EnumerateFiles().WithErrorLogging(logger, $"Error enumerating files in directory {directory.FullName}"))
113114
{
114115
if (ShouldSkipFile(fe))
115116
{
@@ -123,9 +124,9 @@ private IEnumerable<FileEntry> EnumerateFiles(DirectoryEntry directory, SearchOp
123124
// Only recurse into subdirectories if AllDirectories is specified
124125
if (searchOption == SearchOption.AllDirectories)
125126
{
126-
foreach (var subDir in directory.EnumerateDirectories())
127+
foreach (var subDir in directory.EnumerateDirectories().WithErrorLogging(logger, $"Error enumerating directories in directory {directory.FullName}"))
127128
{
128-
foreach (var file in EnumerateFiles(subDir, searchOption))
129+
foreach (var file in EnumerateFiles(subDir, searchOption).WithErrorLogging(logger, $"Error enumerating files in directory {subDir.FullName}"))
129130
{
130131
yield return file;
131132
}

0 commit comments

Comments
 (0)