Ejemplo n.º 1
0
        private static async Task <int> RunScript(string file, bool debugMode, LogFactory logFactory, OptimizationLevel optimizationLevel, IEnumerable <string> args, bool interactive, string[] packageSources)
        {
            if (!File.Exists(file))
            {
                if (IsHttpUri(file))
                {
                    var downloader = new ScriptDownloader();
                    var code       = await downloader.Download(file);

                    return(await RunCode(code, debugMode, logFactory, optimizationLevel, args, Directory.GetCurrentDirectory(), packageSources));
                }

                throw new Exception($"Couldn't find file '{file}'");
            }

            var absoluteFilePath = Path.IsPathRooted(file) ? file : Path.Combine(Directory.GetCurrentDirectory(), file);
            var directory        = Path.GetDirectoryName(absoluteFilePath);

            using (var filestream = new FileStream(absoluteFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                var sourceText = SourceText.From(filestream);
                var context    = new ScriptContext(sourceText, directory, args, absoluteFilePath, optimizationLevel, packageSources: packageSources);
                if (interactive)
                {
                    var compiler = GetScriptCompiler(debugMode, logFactory);

                    var runner = new InteractiveRunner(compiler, logFactory, ScriptConsole.Default, packageSources);
                    await runner.RunLoopWithSeed(context);

                    return(0);
                }

                return(await Run(debugMode, logFactory, context));
            }
        }
        private InteractiveTestContext GetRunner(string[] commands)
        {
            var reader = new StringReader(string.Join(Environment.NewLine, commands));
            var writer = new StringWriter();
            var error  = new StringWriter();

            var console = new ScriptConsole(writer, reader, error);
            var logger  = new ScriptLogger(console.Error, true);
            var runtimeDependencyResolver = new RuntimeDependencyResolver(type => ((level, message) =>
            {
                if (level == LogLevel.Debug)
                {
                    logger.Verbose(message);
                }
                if (level == LogLevel.Info)
                {
                    logger.Log(message);
                }
            }));

            var compiler = new ScriptCompiler(logger, runtimeDependencyResolver);
            var runner   = new InteractiveRunner(compiler, logger, console);

            return(new InteractiveTestContext(console, runner));
        }
Ejemplo n.º 3
0
        private static async Task <int> RunScript(string file, bool debugMode, bool useRestoreCache, LogFactory logFactory, OptimizationLevel optimizationLevel, IEnumerable <string> args, bool interactive, string[] packageSources)
        {
            if (!File.Exists(file))
            {
                if (IsHttpUri(file))
                {
                    var downloader = new ScriptDownloader();
                    var code       = await downloader.Download(file);

                    return(await RunCode(code, debugMode, useRestoreCache, logFactory, optimizationLevel, args, Directory.GetCurrentDirectory(), packageSources));
                }

                throw new Exception($"Couldn't find file '{file}'");
            }

            var absoluteFilePath = file.GetRootedPath();
            var directory        = Path.GetDirectoryName(absoluteFilePath);

            var sourceText = absoluteFilePath.ToSourceText();
            var context    = new ScriptContext(sourceText, directory, args, absoluteFilePath, optimizationLevel, packageSources: packageSources);

            if (interactive)
            {
                var compiler = GetScriptCompiler(debugMode, useRestoreCache, logFactory);

                var runner = new InteractiveRunner(compiler, logFactory, ScriptConsole.Default, packageSources);
                await runner.RunLoopWithSeed(context);

                return(0);
            }

            return(await Run(debugMode, useRestoreCache, logFactory, context));
        }
Ejemplo n.º 4
0
        private static async Task <int> RunScript(string file, bool debugMode, IEnumerable <string> args, bool interactive)
        {
            if (!File.Exists(file))
            {
                throw new Exception($"Couldn't find file '{file}'");
            }

            var absoluteFilePath = Path.IsPathRooted(file) ? file : Path.Combine(Directory.GetCurrentDirectory(), file);
            var directory        = Path.GetDirectoryName(absoluteFilePath);

            using (var filestream = new FileStream(absoluteFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                var sourceText = SourceText.From(filestream);
                var context    = new ScriptContext(sourceText, directory, args, absoluteFilePath, debugMode);

                if (interactive)
                {
                    var compiler = GetScriptCompiler(debugMode);
                    var runner   = new InteractiveRunner(compiler, compiler.Logger, ScriptConsole.Default);
                    await runner.RunLoopWithSeed(debugMode, context);

                    return(0);
                }

                return(await Run(debugMode, context));
            }
        }
Ejemplo n.º 5
0
        private async Task <EnvironmentDeployment> InteractivePrompt(Channel channel, Channel defaultChannel, OctoPlusCore.Models.Environment environment, IList <Project> projects)
        {
            InteractiveRunner runner = PopulateRunner(String.Format(languageProvider.GetString(LanguageSection.UiStrings, "DeployingTo"), channel.Name, environment.Name), languageProvider.GetString(LanguageSection.UiStrings, "PackageNotSelectable"), projects);
            var indexes = runner.GetSelectedIndexes();

            if (!indexes.Any())
            {
                System.Console.WriteLine(languageProvider.GetString(LanguageSection.UiStrings, "NothingSelected"));
                return(null);
            }

            var deployment = await PrepareEnvironmentDeployment(channel, defaultChannel, environment, projects, indexes);

            return(deployment);
        }
Ejemplo n.º 6
0
        private InteractiveTestContext GetRunner(params string[] commands)
        {
            var reader = new StringReader(string.Join(Environment.NewLine, commands));
            var writer = new StringWriter();
            var error  = new StringWriter();

            var console = new ScriptConsole(writer, reader, error);

            var logFactory = TestOutputHelper.CreateTestLogFactory();

            var compiler = new ScriptCompiler(logFactory, useRestoreCache: false);
            var runner   = new InteractiveRunner(compiler, logFactory, console, Array.Empty <string>());

            return(new InteractiveTestContext(console, runner));
        }
        public async Task <int> Execute(ExecuteInteractiveCommandOptions options)
        {
            var compiler = new ScriptCompiler(_logFactory, useRestoreCache: false);
            var runner   = new InteractiveRunner(compiler, _logFactory, _scriptConsole, options.PackageSources);

            if (options.ScriptFile == null)
            {
                await runner.RunLoop();
            }
            else
            {
                var context = new ScriptContext(options.ScriptFile.Path.ToSourceText(), Path.GetDirectoryName(options.ScriptFile.Path), options.Arguments, options.ScriptFile.Path, OptimizationLevel.Debug, packageSources: options.PackageSources);
                await runner.RunLoopWithSeed(context);
            }

            return(0);
        }
Ejemplo n.º 8
0
        private InteractiveRunner PopulateRunner(string prompt, IList <Project> projects, IList <Project> targetProjects)
        {
            var runner = new InteractiveRunner(prompt, languageProvider.GetString(LanguageSection.UiStrings, "PackageNotSelectable"), languageProvider, languageProvider.GetString(LanguageSection.UiStrings, "ProjectName"), languageProvider.GetString(LanguageSection.UiStrings, "OnSource"), languageProvider.GetString(LanguageSection.UiStrings, "OnTarget"));

            foreach (var project in projects)
            {
                var packagesAvailable = project.CurrentRelease != null;

                runner.AddRow(project.Checked, packagesAvailable, new[] {
                    project.ProjectName,
                    project.CurrentRelease.Version,
                    targetProjects.FirstOrDefault(p => p.ProjectId == project.ProjectId)?.CurrentRelease?.Version
                });
            }
            runner.Run();
            return(runner);
        }
Ejemplo n.º 9
0
        private InteractiveRunner PopulateRunner(string prompt, string unselectableText, IEnumerable <Project> projects)
        {
            var runner = new InteractiveRunner(prompt, unselectableText, languageProvider, languageProvider.GetString(LanguageSection.UiStrings, "ProjectName"), languageProvider.GetString(LanguageSection.UiStrings, "CurrentRelease"), languageProvider.GetString(LanguageSection.UiStrings, "CurrentPackage"), languageProvider.GetString(LanguageSection.UiStrings, "NewPackage"));

            foreach (var project in projects)
            {
                var packagesAvailable = project.AvailablePackages.Count > 0 && project.AvailablePackages.All(p => p.SelectedPackage != null);

                runner.AddRow(project.Checked, packagesAvailable, new[] {
                    project.ProjectName,
                    project.CurrentRelease.Version,
                    project.AvailablePackages.Count > 1 ? languageProvider.GetString(LanguageSection.UiStrings, "Multi") : project.CurrentRelease.DisplayPackageVersion,
                    project.AvailablePackages.Count > 1 ? languageProvider.GetString(LanguageSection.UiStrings, "Multi") : (packagesAvailable ? project.AvailablePackages.First().SelectedPackage.Version : string.Empty)
                });
            }
            runner.Run();
            return(runner);
        }
Ejemplo n.º 10
0
        private EnvironmentDeployment InteractivePrompt(OctoPlusCore.Models.Environment environment, OctoPlusCore.Models.Environment targetEnvironment, IList <Project> projects, IList <Project> targetProjects)
        {
            InteractiveRunner runner = PopulateRunner(String.Format(languageProvider.GetString(LanguageSection.UiStrings, "PromotingTo"), environment.Name, targetEnvironment.Name), projects, targetProjects);
            var indexes = runner.GetSelectedIndexes();

            if (!indexes.Any())
            {
                System.Console.WriteLine(languageProvider.GetString(LanguageSection.UiStrings, "NothingSelected"));
                return(null);
            }

            var deployment = new EnvironmentDeployment
            {
                ChannelName     = string.Empty,
                DeployAsync     = true,
                EnvironmentId   = targetEnvironment.Id,
                EnvironmentName = targetEnvironment.Name
            };

            foreach (var index in indexes)
            {
                var current       = projects[index];
                var currentTarget = targetProjects[index];

                if (current.CurrentRelease != null)
                {
                    deployment.ProjectDeployments.Add(new ProjectDeployment
                    {
                        ProjectId   = currentTarget.ProjectId,
                        ProjectName = currentTarget.ProjectName,
                        LifeCycleId = currentTarget.LifeCycleId,
                        ReleaseId   = current.CurrentRelease.Id
                    });
                }
            }

            return(deployment);
        }
 public InteractiveTestContext(ScriptConsole console, InteractiveRunner runner)
 {
     Console = console;
     Runner  = runner;
 }
Ejemplo n.º 12
0
 private static async Task RunInteractive(bool debugMode, bool useRestoreCache, LogFactory logFactory, string[] packageSources)
 {
     var compiler = GetScriptCompiler(debugMode, useRestoreCache, logFactory);
     var runner   = new InteractiveRunner(compiler, logFactory, ScriptConsole.Default, packageSources);
     await runner.RunLoop();
 }
Ejemplo n.º 13
0
 private static async Task RunInteractive(bool debugMode)
 {
     var compiler = GetScriptCompiler(debugMode);
     var runner   = new InteractiveRunner(compiler, compiler.Logger, ScriptConsole.Default);
     await runner.RunLoop(debugMode);
 }
Ejemplo n.º 14
0
 private static async Task RunInteractive(bool debugMode, string[] packageSources)
 {
     var compiler = GetScriptCompiler(debugMode);
     var runner   = new InteractiveRunner(compiler, compiler.Logger, ScriptConsole.Default, packageSources);
     await runner.RunLoop();
 }
Ejemplo n.º 15
0
 public CommandContext(ScriptConsole console, InteractiveRunner runner)
 {
     Console = console;
     Runner  = runner;
 }