Example #1
0
        private static void MainInternal(string[] args)
        {
            var options = new HortonOptions();
            bool showHelp = false;
            bool printVersion = false;

            var p = new OptionSet()
            {
                { "m|migrations=", "path to migration scripts.\n(leave blank for current directory)", v => options.MigrationsDirectoryPath = v },
                { "s|server=", "server hostname.\n(leave blank for \"localhost\")", v => options.ServerHostname = v },
                { "d|database=", "database name.\n(leave blank to look for \"database.name\")", v => options.DatabaseName = v },
                { "u|username="******"username of the database connection.\n(leave blank for integrated security)", v => options.Username = v },
                { "p|password="******"password of the database connection.\n(required if username is provided)", v => options.Password = v },
                { "c|connectionString=", "ADO.NET connection string.\n(optional, overrides other parameters)", v => options.ConnectionString = v },
                { "U|UNATTEND", "Surpress user acknowledgement during\nexecution.", v => options.Unattend = v != null },
                { "v|version",  "Print version number and exit.", v => printVersion = v != null },
                { "h|help|?",  "show help message and exit.", v => showHelp = v != null },
            };

            if (args.Length == 0)
            {
                showHelp = true;
            }

            List<string> extra;
            try
            {
                extra = p.Parse(args);
            }
            catch (OptionException e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `horton.exe --help' for more information.");
                return;
            }

            if (!options.Unattend)
            {
                Console.WriteLine("Horton. The simple database migration utility.");
            }

            if (showHelp)
            {
                ShowHelp(p);
                return;
            }

            if (printVersion)
            {
                Console.WriteLine("Version: " + typeof(Program).Assembly.GetName().Version.ToString());
                return;
            }

            options.Command = HortonCommands.TryParseCommand(extra.FirstOrDefault() ?? "");
            options.ExtraArguments = extra.Skip(1).ToArray();

            string firstValidationMessage = "";
            if (!options.AssertValid(out firstValidationMessage))
            {
                Console.WriteLine(firstValidationMessage);
                Console.WriteLine("Try `horton.exe --help' for more information.");
                Environment.Exit(1);
            }

            options.Command.Execute(options);
        }