public IEnumerable <MigrationScript> GetRepeatableMigrations(string prefix, string separator, string suffix, Encoding?encoding = null) { Check.NotNullOrEmpty(prefix, nameof(prefix)); // R Check.NotNullOrEmpty(separator, nameof(separator)); // __ Check.NotNullOrEmpty(suffix, nameof(suffix)); // .sql var migrations = new List <EmbeddedResourceMigrationScript>(); encoding ??= Encoding.UTF8; foreach (var assembly in _assemblies) { assembly.GetManifestResourceNames() .Where(x => _filters.Any() ? _filters.Any(f => x.StartsWith(f, StringComparison.OrdinalIgnoreCase)) : true) .Where(x => x.EndsWith(suffix, StringComparison.OrdinalIgnoreCase)) .Where(x => //GetFileName(x).StartsWith(prefix, StringComparison.OrdinalIgnoreCase) GetFileName(x).Substring(GetFileName(x).IndexOf(separator) + separator.Length, prefix.Length).Equals(prefix, StringComparison.OrdinalIgnoreCase) // "*R*" ) .Select(x => { MigrationUtil.ExtractDescription(GetFileName(x), prefix, separator, out string description); return(new EmbeddedResourceMigrationScript( version: null, description, name: GetFileName(x), content: assembly.GetManifestResourceStream(x), type: MetadataType.RepeatableMigration, encoding)); }) .ToList() .ForEach(x => migrations.Add(x)); } return(migrations.Cast <MigrationBase>() // NET 3.5 .CheckForDuplicateName() .OrderBy(x => x.Name) .Cast <MigrationScript>() // NET 3.5 .ToList()); }
public IEnumerable <MigrationScript> GetRepeatableMigrations(string prefix, string separator, string suffix, Encoding?encoding = null) { Check.NotNullOrEmpty(prefix, nameof(prefix)); // R Check.NotNullOrEmpty(separator, nameof(separator)); // __ Check.NotNullOrEmpty(suffix, nameof(suffix)); // .sql var migrations = new List <FileMigrationScript>(); encoding ??= Encoding.UTF8; foreach (string location in _locations.Distinct(StringComparer.OrdinalIgnoreCase)) // Remove duplicate locations if any { DirectoryInfo dirToScan = ResolveDirectory(location); if (!dirToScan.Exists) { continue; } dirToScan.GetFiles("*", SearchOption.AllDirectories) // Get scripts recursively .Where(f => !migrations.Any(m => m.Path == f.FullName) // Scripts not already loaded //&& f.Name.StartsWith(prefix, StringComparison.OrdinalIgnoreCase) // "R*" && f.Name.Substring(f.Name.IndexOf(separator) + separator.Length, prefix.Length).Equals(prefix, StringComparison.OrdinalIgnoreCase) && // "*R*" f.Name.EndsWith(suffix, StringComparison.OrdinalIgnoreCase)) // "*.sql" .Select(f => { MigrationUtil.ExtractDescription(f.FullName, prefix, separator, out string description); return(new FileMigrationScript(f.FullName, version: null, description, MetadataType.RepeatableMigration, encoding)); }) .ToList() .ForEach(x => migrations.Add(x)); } return(migrations.Cast <MigrationBase>() // NET 3.5 .CheckForDuplicateName() .OrderBy(x => x.Name) .Cast <MigrationScript>() // NET 3.5 .ToList()); }
public void When_repeatable_migration_gets_a_null_version_and_a_description(string script, string expectedDescription) { MigrationUtil.ExtractDescription(script, "R", "__", out string description); Assert.Equal(expectedDescription, description); }