public static IEnumerable <string> Find(string addinsBaseDir) { return(Directory .EnumerateDirectories(addinsBaseDir, "Cake.Tasks.*", SearchOption.TopDirectoryOnly) .Select(dir => { Match versionMatch = VersionPattern.Match(dir); return (path: dir, name: dir.Substring(0, versionMatch.Index - 1), version: SemVersion.Parse(versionMatch.Value)); }) .ToLookup(addin => addin.name) .Select(addinSet => addinSet.OrderByDescending(addin => addin.version).First().path)); }
public static TsVersionSigned?TryParse(string version, string platform, string sign) { var match = VersionPattern.Match(version); if (!match.Success) { return(null); } if (!ulong.TryParse(match.Groups[2].Value, out var build)) { return(null); } var prelim = new TsVersionSigned(version, platform, build, sign); if (!prelim.CheckValid()) { return(null); } return(prelim); }