in src/common/details/helpers/file_helpers.cs [97:159]
public static IEnumerable<string> FindFiles(string fileNames, INamedValues? values = null, bool checkOverrides = true, bool checkResources = true, bool httpLinksOk = false)
{
var currentDir = Directory.GetCurrentDirectory();
foreach (var item in fileNames.Split(new char[] { ';', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries))
{
if (checkOverrides)
{
var overrides = FindOverrides(item);
foreach (var name in overrides)
{
yield return name;
}
}
if (checkResources)
{
var resources = FindResources(item);
foreach (var resource in resources)
{
yield return resource;
}
}
var isHttpLink = item.StartsWith("http://") || item.StartsWith("https://");
if (isHttpLink && httpLinksOk)
{
yield return item;
continue;
}
if (IsResource(item) || IsOverride(item)) continue;
if (Program.Debug) Console.WriteLine($" Searching for files '{fileNames}'");
var i1 = item.LastIndexOf(Path.DirectorySeparatorChar);
var i2 = item.LastIndexOf(Path.AltDirectorySeparatorChar);
var hasPath = i1 >= 0 || i2 >= 0;
var pathLen = Math.Max(i1, i2);
var path = !hasPath ? currentDir : item.Substring(0, pathLen);
var pattern = !hasPath ? item : item.Substring(pathLen + 1);
EnumerationOptions? recursiveOptions = null;
if (path.EndsWith("**"))
{
path = path.Substring(0, path.Length - 2).TrimEnd('/', '\\');
if (string.IsNullOrEmpty(path)) path = ".";
recursiveOptions = new EnumerationOptions() { RecurseSubdirectories = true };
}
if (!Directory.Exists(path)) continue;
var files = recursiveOptions != null
? Directory.EnumerateFiles(path, pattern, recursiveOptions)
: Directory.EnumerateFiles(path, pattern);
foreach (var file in files)
{
yield return file;
}
}
yield break;
}