private IList<ChangeScript> IdentificarScriptsQueFaltamExecutar(UniqueChange lastChangeToApply, IEnumerable<ChangeScript> scripts, IList<ChangeEntry> aplicados)
        {
            var listaScriptsParaAplicar = new List<ChangeScript>();

            // Re-run any scripts that have not been run, or are failed or resolved.
            // The check to exit on previous failure is done before this call.
            foreach (var script in scripts)
            {
                // If script has not been run yet, add it to the list.
                bool applyScript = false;
                var changeEntry = aplicados.FirstOrDefault(a => a.CompareTo(script) == 0);
                if (changeEntry == null)
                {
                    applyScript = true;
                }
                else
                {
                    // If the script has already been run check if it should be run again.
                    if (!changeEntry.ExecutedSuccessfully)
                    {
                        // Assign the ID so the record can be updated.
                        script.ChangeId = changeEntry.ChangeId;
                        applyScript = true;
                    }
                }

                if (applyScript)
                {
                    // Just add script if there is no cap specified.
                    if (lastChangeToApply == null)
                    {
                        listaScriptsParaAplicar.Add(script);
                    }
                    else if (script.CompareTo(lastChangeToApply) <= 0)
                    {
                        // Script is less than last change to apply.
                        listaScriptsParaAplicar.Add(script);
                    }
                    else
                    {
                        // Stop adding scripts as last change to apply has been met.
                        break;
                    }
                }
            }
            return listaScriptsParaAplicar;
        }
 /// <summary>
 /// Compara os scritps aplicados e os scripts que se encontram no diretório e retorna uma lista dos scripts pendentes de execução
 /// </summary>
 /// <param name="lastChangeToApply"></param>
 /// <returns></returns>
 public IList<ChangeScript> ObterScriptsPendenteExecucao(UniqueChange lastChangeToApply)
 {
     var scriptsAplicados = ObterScriptsAplicados();
     var todosScripts = ObterTodosOsScripts();
     return IdentificarScriptsQueFaltamExecutar(lastChangeToApply, todosScripts, scriptsAplicados);
 }