using System; using GitCommands; using JetBrains.Annotations; namespace GitUI { public interface IFindFilePredicateProvider { /// <summary> /// Returns the names of files that match the specified search pattern /// </summary> /// <param name="searchPattern">The search string to match against the pathes of files</param> Func<string, bool> Get([NotNull] string searchPattern, [NotNull] string workingDir); } public sealed class FindFilePredicateProvider : IFindFilePredicateProvider { public Func<string, bool> Get(string searchPattern, string workingDir) { if (searchPattern == null) { throw new ArgumentNullException(nameof(searchPattern)); } if (workingDir == null) { throw new ArgumentNullException(nameof(workingDir)); } var pattern = searchPattern.ToPosixPath(); var dir = workingDir.ToPosixPath(); if (pattern.StartsWith(dir, StringComparison.OrdinalIgnoreCase)) { pattern = pattern.Substring(dir.Length).TrimStart('/'); return fileName => fileName != null && fileName.StartsWith(pattern, StringComparison.OrdinalIgnoreCase); } // Method Contains have no override with StringComparison parameter return fileName => fileName != null && fileName.IndexOf(pattern, StringComparison.OrdinalIgnoreCase) >= 0; } } }