Example #1
0
        protected override PolicyResult CheckPolicy(DirectoryInfo databaseScriptsRoot)
        {
            PolicyResult result = new PolicyResult();

            IEnumerable <FileInfo> allFiles =
                FileListFilter.FilterFileListWithIgnoreDirectoryFilter(
                    databaseScriptsRoot.GetFiles(ToolConfiguration.SqlFileSearchPattern, SearchOption.AllDirectories));

            IEnumerable <FileInfo> allFilesWithoutCreateDatabase =
                allFiles.Where(x => !ToolConfiguration.CreateDatabaseSqlFileSearchPattern.Equals(x.Name));

            IEnumerable <FileInfo> invalidFilenames = (from fileInfo in allFilesWithoutCreateDatabase
                                                       where VersionNumberHelper.FilenameHasValidVersionPrefix(fileInfo.Name) == false
                                                       select fileInfo).ToList();

            if (!invalidFilenames.Any())
            {
                result.Success = true;
            }
            else
            {
                result.Messages.Add(
                    string.Format(
                        "FilenamePrefixPolicy failed. The following files do not have a valid prefix: {0}.",
                        string.Join(",", invalidFilenames.Select(fileinfo => fileinfo.FullName).ToArray())));
            }

            return(result);
        }
Example #2
0
 private static void AssertThatFilenameHasValidPrefix(string filenameToTest)
 {
     Assert.IsTrue(
         VersionNumberHelper.FilenameHasValidVersionPrefix(filenameToTest),
         string.Format("{0} does not contains a valid version number.", filenameToTest));
 }
        public virtual ExcecutionResult ExecuteAllScriptsForDatabase(
            string fromVersion,
            string toVersion,
            DatabaseConnectionParameters connectionParameters,
            Encoding encodingForReadingSqlScripts)
        {
            if (string.IsNullOrEmpty(fromVersion))
            {
                throw new ArgumentException(@"Cannot be null or empty.", "fromVersion");
            }

            if (string.IsNullOrEmpty(toVersion))
            {
                throw new ArgumentException(@"Cannot be null or empty.", "toVersion");
            }

            if (encodingForReadingSqlScripts == null)
            {
                encodingForReadingSqlScripts = Encoding.Default;
            }

            Version fromVersionObject;
            Version toVersionObject;

            try
            {
                fromVersionObject = VersionNumberHelper.RemoveNegativeNumbersFromVersionObject(new Version(fromVersion));
            }
            catch (Exception ex)
            {
                var result = new ExcecutionResult {
                    Success = false
                };
                result.Errors.Add(
                    string.Format("Invalid fromVersion. Could not parse fromVersion to a usable version object. {0}", ex.Message));
                return(result);
            }

            try
            {
                toVersionObject = VersionNumberHelper.RemoveNegativeNumbersFromVersionObject(new Version(toVersion));
            }
            catch (Exception ex)
            {
                var result = new ExcecutionResult {
                    Success = false
                };
                result.Errors.Add(string.Format("Invalid toVersion. Could not parse toVersion to a usable version object. {0}", ex.Message));
                return(result);
            }

            // Execute optional FileStructurePolicy
            if (_fileStructurePolicy != null)
            {
                PolicyResult policyResult = _fileStructurePolicy.Check(_databaseScriptsDirInfo);

                if (!policyResult.Success)
                {
                    // Policy failed Return errors
                    ExcecutionResult result = new ExcecutionResult {
                        Success = false
                    };
                    result.Errors.AddRange(policyResult.Messages);
                    return(result);
                }
            }

            SqlFilesListReader            filesReader    = new SqlFilesListReader(_databaseScriptsDirInfo);
            Dictionary <string, FileInfo> filesToExecute = filesReader.GetSpecificVersionedFilesToExecute(fromVersionObject, toVersionObject);

            return(ExecuteSqlScripts(connectionParameters, filesToExecute, encodingForReadingSqlScripts));
        }