Esempio n. 1
0
        //may block while it's showing a GUI. project MUST be built before calling this
        public static MonoDroidUploadOperation SignAndUpload(IProgressMonitor monitor, MonoDroidProject project,
                                                             ConfigurationSelector configSel, bool forceReplace, ref AndroidDevice device)
        {
            var conf  = project.GetConfiguration(configSel);
            var opMon = new AggregatedOperationMonitor(monitor);

            InvokeSynch(() => MonoDroidFramework.EnsureSdksInstalled());

            IAsyncOperation signOp = null;

            if (project.PackageNeedsSigning(configSel))
            {
                ClearUploadFlags(conf);
                signOp = project.SignPackage(configSel);
                opMon.AddOperation(signOp);
            }

            if (device == null)
            {
                device = InvokeSynch(() => ChooseDevice(null));
            }

            if (device == null)
            {
                opMon.Dispose();
                return(null);
            }

            if (!device.IsEmulator && MonoDroidFramework.CheckTrial())
            {
                opMon.Dispose();
                return(null);
            }

            //copture the device for a later anonymous method
            AndroidDevice dev = device;

            bool replaceIfExists = forceReplace || !GetUploadFlag(conf, device);

            var uploadOp = Upload(device, conf.ApkSignedPath, conf.PackageName, signOp, replaceIfExists);

            opMon.AddOperation(uploadOp);
            uploadOp.Completed += delegate(IAsyncOperation op) {
                if (op.Success)
                {
                    SetUploadFlag(conf, dev);
                }
                opMon.Dispose();
            };
            return(uploadOp);
        }
Esempio n. 2
0
        // do this directly instead of relying on the commands handler
        // to stop MD from opening an output pad
        protected override void DoExecute(IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration)
        {
            var conf = (MoonlightProjectConfiguration)GetConfiguration(configuration);

            IConsole console = null;

            try {
                // The MoonlightExecutionHandler doesn't output anything to a console, so special-case it
                // Other handlers, like the debug handler, do need a console, so we still need to create one in that case
                // HACK: we can't get the type of the MoonlightExecutionHandler directly, so for now assume that
                // we don't want to show a console for DefaultExecutionHandler
                if (!(context.ExecutionHandler is MoonlightExecutionHandler) &&
                    !(context.ExecutionHandler.GetType().Name == "DefaultExecutionHandler"))
                {
                    console = conf.ExternalConsole
                                                ? context.ExternalConsoleFactory.CreateConsole(!conf.PauseConsoleOutput)
                                                : context.ConsoleFactory.CreateConsole(!conf.PauseConsoleOutput);
                }

                var cmd = CreateExecutionCommand(configuration, conf);
                using (var opMon = new AggregatedOperationMonitor(monitor)) {
                    var ex = context.ExecutionHandler.Execute(cmd, console);
                    opMon.AddOperation(ex);
                    ex.WaitForCompleted();
                }
            } finally {
                if (console != null)
                {
                    console.Dispose();
                }
            }
        }
Esempio n. 3
0
		protected override void OnExecute (IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configSel)
		{
			var conf = (IPhoneProjectConfiguration) GetConfiguration (configSel);
			bool isDevice = conf.IsDevicePlatform;
			
			if (!Directory.Exists (conf.AppDirectory) || (isDevice && !File.Exists (conf.AppDirectory.Combine ("PkgInfo")))) {
				Gtk.Application.Invoke (delegate {
					MessageService.ShowError (GettextCatalog.GetString ("The application has not been built."));
				});
				return;
			}
			
			if (isDevice) {
				var deviceId = "default";
				if (NeedsUploading (conf, deviceId)) {
					using (var opMon = new AggregatedOperationMonitor (monitor)) {
						using (var op = IPhoneUtility.Upload (TargetRuntime, TargetFramework, conf.AppDirectory)) {
							opMon.AddOperation (op);
							op.WaitForCompleted ();
							if (op.ExitCode != 0)
								return;
						}
						TouchUploadMarker (conf, deviceId);
					}
				}
			}
			
			base.OnExecute (monitor, context, configSel);
		}
Esempio n. 4
0
        protected override void OnExecute(IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configSel)
        {
            var conf = (IPhoneProjectConfiguration)GetConfiguration(configSel);

            if (!Directory.Exists(conf.AppDirectory))
            {
                Gtk.Application.Invoke(delegate {
                    MessageService.ShowError(GettextCatalog.GetString("The application has not been built."));
                });
                return;
            }

            if (conf.Platform == PLAT_IPHONE)
            {
                if (NeedsUploading(conf))
                {
                    using (var opMon = new AggregatedOperationMonitor(monitor)) {
                        using (var op = IPhoneUtility.Upload(TargetRuntime, TargetFramework, conf.AppDirectory)) {
                            opMon.AddOperation(op);
                            op.WaitForCompleted();
                            if (op.ExitCode != 0)
                            {
                                return;
                            }
                        }
                        TouchUploadMarker(conf);
                    }
                }
            }

            base.OnExecute(monitor, context, configSel);
        }
Esempio n. 5
0
        protected override void DoExecute(IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration)
        {
            var config = GetConfiguration(configuration) as DotNetProjectConfiguration;

            monitor.Log.WriteLine(GettextCatalog.GetString("Running {0} ...", Name));

            IConsole console = CreateConsole(config, context);
            var      aggregatedOperationMonitor = new AggregatedOperationMonitor(monitor);

            try {
                try {
                    ExecutionCommand executionCommand = CreateExecutionCommand(configuration, config);
                    if (context.ExecutionTarget != null)
                    {
                        executionCommand.Target = context.ExecutionTarget;
                    }

                    IProcessAsyncOperation asyncOp = new DnxExecutionHandler().Execute(executionCommand, console);
                    aggregatedOperationMonitor.AddOperation(asyncOp);
                    asyncOp.WaitForCompleted();

                    monitor.Log.WriteLine(GettextCatalog.GetString("The application exited with code: {0}", asyncOp.ExitCode));
                } finally {
                    console.Dispose();
                    aggregatedOperationMonitor.Dispose();
                }
            } catch (Exception ex) {
                LoggingService.LogError(string.Format("Cannot execute \"{0}\"", Name), ex);
                monitor.ReportError(GettextCatalog.GetString("Cannot execute \"{0}\"", Name), ex);
            }
        }
Esempio n. 6
0
        public static MonoDroidPublishOperation PublishPackage(IProgressMonitor monitor, MonoDroidProject project,
                                                               ConfigurationSelector configSel, AndroidSigningOptions options, string sourceApk, string destApk,
                                                               bool createNewKey, string dName, int keyValidity)
        {
            var conf  = project.GetConfiguration(configSel);
            var opMon = new AggregatedOperationMonitor(monitor);

            IAsyncOperation packageOp = null;

            // If we need signing, it means we don't have the apk ready
            if (project.PackageNeedsSigning(configSel))
            {
                ClearUploadFlags(conf);
                packageOp = project.SignPackage(configSel);
                opMon.AddOperation(packageOp);
            }

            var outputMonitor = IdeApp.Workbench.ProgressMonitors.GetOutputProgressMonitor(
                GettextCatalog.GetString("Publishing package"), MonoDevelop.Ide.Gui.Stock.RunProgramIcon, true, true);
            var op = new MonoDroidPublishOperation(outputMonitor, options, sourceApk, destApk, packageOp,
                                                   createNewKey, dName, keyValidity);

            op.Completed += delegate {
                opMon.Dispose();
                outputMonitor.Dispose();
            };
            op.Start();
            return(op);
        }
        internal protected override void OnExecute(IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration)
        {
            ProjectConfiguration conf = (ProjectConfiguration)GetConfiguration(configuration);

            monitor.Log.WriteLine(GettextCatalog.GetString("Running {0} ...", FileName));

            IConsole console = conf.ExternalConsole
                                ? context.ExternalConsoleFactory.CreateConsole(!conf.PauseConsoleOutput)
                                : context.ConsoleFactory.CreateConsole(!conf.PauseConsoleOutput);

            AggregatedOperationMonitor aggregatedOperationMonitor = new AggregatedOperationMonitor(monitor);

            try {
                try {
                    ExecutionCommand executionCommand = CreateExecutionCommand(configuration, conf);

                    if (!context.ExecutionHandler.CanExecute(executionCommand))
                    {
                        monitor.ReportError(GettextCatalog.GetString("Can not execute \"{0}\". The selected execution mode is not supported for .NET projects.", FileName), null);
                        return;
                    }

                    IProcessAsyncOperation asyncOp = context.ExecutionHandler.Execute(executionCommand, console);
                    aggregatedOperationMonitor.AddOperation(asyncOp);
                    asyncOp.WaitForCompleted();

                    monitor.Log.WriteLine(GettextCatalog.GetString("The application exited with code: {0}", asyncOp.ExitCode));
                } finally {
                    console.Dispose();
                    aggregatedOperationMonitor.Dispose();
                }
            } catch (Exception ex) {
                monitor.ReportError(GettextCatalog.GetString("Cannot execute \"{0}\"", FileName), ex);
            }
        }
Esempio n. 8
0
        protected override void DoExecute(IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration)
        {
            if (!CheckCanExecute(configuration))
            {
                return;
            }

            var      config  = (PythonConfiguration)GetConfiguration(configuration);
            IConsole console = config.ExternalConsole ?
                               context.ExternalConsoleFactory.CreateConsole(!config.PauseConsoleOutput) :
                               context.ConsoleFactory.CreateConsole(!config.PauseConsoleOutput);

            var aggregatedMonitor = new AggregatedOperationMonitor(monitor);

            try {
                var executionCommand = CreateExecutionCommand(configuration, config);
                if (!context.ExecutionHandler.CanExecute(executionCommand))
                {
                    monitor.ReportError(GettextCatalog.GetString("Cannot execute application. The selected execution mode " +
                                                                 "is not supported for IronPython projects"), null);
                    return;
                }

                var asyncOp = context.ExecutionHandler.Execute(executionCommand, console);
                aggregatedMonitor.AddOperation(asyncOp);
                asyncOp.WaitForCompleted();

                monitor.Log.WriteLine("The application exited with code: " + asyncOp.ExitCode);
            } catch (Exception exc) {
                monitor.ReportError(GettextCatalog.GetString("Cannot execute \"{0}\"", config.MainModule), exc);
            } finally {
                console.Dispose();
                aggregatedMonitor.Dispose();
            }
        }
Esempio n. 9
0
        internal static void ExecuteProject(DubProject prj, IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration)
        {
            bool isDebug = context.ExecutionHandler.GetType().Name.StartsWith("Debug");

            var      conf = prj.GetConfiguration(configuration) as DubProjectConfiguration;
            IConsole console;

            if (conf.ExternalConsole)
            {
                console = context.ExternalConsoleFactory.CreateConsole(!conf.PauseConsoleOutput);
            }
            else
            {
                console = context.ConsoleFactory.CreateConsole(true);
            }

            var operationMonitor = new AggregatedOperationMonitor(monitor);

            var sr = new StringBuilder();

            if (!isDebug)
            {
                sr.Append("run");
                BuildCommonArgAppendix(sr, prj, configuration);
            }

            try
            {
                var cmd = isDebug ? prj.CreateExecutionCommand(configuration) : new NativeExecutionCommand(DubSettings.Instance.DubCommand, sr.ToString(), prj.BaseDirectory.ToString());
                if (!context.ExecutionHandler.CanExecute(cmd))
                {
                    monitor.ReportError("Cannot execute \"" + cmd.Command + " " + cmd.Arguments + "\". The selected execution mode is not supported for Dub projects.", null);
                    return;
                }

                var op = context.ExecutionHandler.Execute(cmd, console);

                operationMonitor.AddOperation(op);
                op.WaitForCompleted();

                if (op.ExitCode != 0)
                {
                    monitor.ReportError(cmd.Command + " exited with code: " + op.ExitCode.ToString(), null);
                }
                else
                {
                    monitor.Log.WriteLine(cmd.Command + " exited with code: {0}", op.ExitCode);
                }
            }
            catch (Exception ex)
            {
                monitor.ReportError("Cannot execute \"" + sr.ToString() + "\"", ex);
            }
            finally
            {
                operationMonitor.Dispose();
                console.Dispose();
            }
        }
Esempio n. 10
0
        protected override void DoExecute(IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration)
        {
            var conf = GetConfiguration(configuration) as DProjectConfiguration;

            if (conf == null)
            {
                return;
            }

            bool     pause = conf.PauseConsoleOutput;
            IConsole console;

            if (CompileTarget != DCompileTarget.Executable)
            {
                MessageService.ShowMessage("Compile target is not an executable!");
                return;
            }

            monitor.Log.WriteLine("Running project...");

            if (conf.ExternalConsole)
            {
                console = context.ExternalConsoleFactory.CreateConsole(!pause);
            }
            else
            {
                console = context.ConsoleFactory.CreateConsole(!pause);
            }

            var operationMonitor = new AggregatedOperationMonitor(monitor);

            try
            {
                var cmd = CreateExecutionCommand(conf);
                if (!context.ExecutionHandler.CanExecute(cmd))
                {
                    monitor.ReportError("Cannot execute \"" + conf.Output + "\". The selected execution mode is not supported for D projects.", null);
                    return;
                }

                var op = context.ExecutionHandler.Execute(cmd, console);

                operationMonitor.AddOperation(op);
                op.WaitForCompleted();

                monitor.Log.WriteLine("The operation exited with code: {0}", op.ExitCode);
            }
            catch (Exception ex)
            {
                monitor.ReportError("Cannot execute \"" + conf.Output + "\"", ex);
            }
            finally
            {
                operationMonitor.Dispose();
                console.Dispose();
            }
        }
Esempio n. 11
0
        /// <summary>
        /// Executes a file and reports events related to the execution to the 'monitor' passed in the parameters.
        /// </summary>
        public static int ExecuteCommand(
            string command,
            string args,
            string baseDirectory,

            IProgressMonitor monitor,
            out string errorOutput,
            out string programOutput)
        {
            errorOutput = string.Empty;
            int exitCode = -1;

            var swError  = new StringWriter();
            var swOutput = new StringWriter();

            var chainedError = new LogTextWriter();

            chainedError.ChainWriter(monitor.Log);
            chainedError.ChainWriter(swError);

            var chainedOutput = new LogTextWriter();

            chainedOutput.ChainWriter(monitor.Log);
            chainedOutput.ChainWriter(swOutput);

            monitor.Log.WriteLine("{0} {1}", command, args);

            var operationMonitor = new AggregatedOperationMonitor(monitor);
            var p = Runtime.ProcessService.StartProcess(command, args, baseDirectory, chainedOutput, chainedError, null);

            operationMonitor.AddOperation(p);              //handles cancellation


            p.WaitForOutput();
            errorOutput   = swError.ToString();
            programOutput = swOutput.ToString();
            exitCode      = p.ExitCode;
            p.Dispose();

            if (monitor.IsCancelRequested)
            {
                monitor.Log.WriteLine(GettextCatalog.GetString("Build cancelled"));
                monitor.ReportError(GettextCatalog.GetString("Build cancelled"), null);
                if (exitCode == 0)
                {
                    exitCode = -1;
                }
            }
            {
                chainedError.Close();
                swError.Close();
                operationMonitor.Dispose();
            }

            return(exitCode);
        }
Esempio n. 12
0
        protected override void DoExecute(IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector config)
        {
            //check XSP is available

            var configuration = (AspNetAppProjectConfiguration)GetConfiguration(config);
            var cmd           = CreateExecutionCommand(config, configuration);

            IConsole console          = null;
            var      operationMonitor = new AggregatedOperationMonitor(monitor);

            try {
                if (configuration.ExternalConsole)
                {
                    console = context.ExternalConsoleFactory.CreateConsole(!configuration.PauseConsoleOutput);
                }
                else
                {
                    console = context.ConsoleFactory.CreateConsole(!configuration.PauseConsoleOutput);
                }

                string url = String.Format("http://{0}:{1}", this.XspParameters.Address, this.XspParameters.Port);

                bool isXsp = true;                 //FIXME: fix this when it might not be true

                if (isXsp)
                {
                    console = new XspBrowserLauncherConsole(console, delegate {
                        BrowserLauncher.LaunchDefaultBrowser(url);
                    });
                }

                monitor.Log.WriteLine("Running web server...");

                var op = context.ExecutionHandler.Execute(cmd, console);
                operationMonitor.AddOperation(op);                  //handles cancellation

                if (!isXsp)
                {
                    BrowserLauncher.LaunchDefaultBrowser(url);
                }

                op.WaitForCompleted();

                monitor.Log.WriteLine("The web server exited with code: {0}", op.ExitCode);
            } catch (Exception ex) {
                monitor.ReportError("Could not launch web server.", ex);
            } finally {
                operationMonitor.Dispose();
                if (console != null)
                {
                    console.Dispose();
                }
            }
        }
Esempio n. 13
0
        public static void Update(ProjectFile file, bool force)
        {
            ISingleFileCustomTool tool;
            ProjectFile           genFile;

            if (!ShouldRunGenerator(file, force, out tool, out genFile))
            {
                return;
            }

            TaskService.Errors.ClearByOwner(file);

            //if this file is already being run, cancel it
            lock (runningTasks) {
                IAsyncOperation runningTask;
                if (runningTasks.TryGetValue(file.FilePath, out runningTask))
                {
                    runningTask.Cancel();
                    runningTasks.Remove(file.FilePath);
                }
            }

            var monitor = IdeApp.Workbench.ProgressMonitors.GetToolOutputProgressMonitor(false);
            var result  = new SingleFileCustomToolResult();
            var aggOp   = new AggregatedOperationMonitor(monitor);

            try {
                monitor.BeginTask(GettextCatalog.GetString("Running generator '{0}' on file '{1}'...", file.Generator, file.Name), 1);
                IAsyncOperation op = tool.Generate(monitor, file, result);
                runningTasks.Add(file.FilePath, op);
                aggOp.AddOperation(op);
                op.Completed += delegate {
                    lock (runningTasks) {
                        IAsyncOperation runningTask;
                        if (runningTasks.TryGetValue(file.FilePath, out runningTask) && runningTask == op)
                        {
                            runningTasks.Remove(file.FilePath);
                            UpdateCompleted(monitor, aggOp, file, genFile, result, false);
                        }
                        else
                        {
                            //it was cancelled because another was run for the same file, so just clean up
                            aggOp.Dispose();
                            monitor.EndTask();
                            monitor.ReportWarning(GettextCatalog.GetString("Cancelled because generator ran again for the same file"));
                            monitor.Dispose();
                        }
                    }
                };
            } catch (Exception ex) {
                result.UnhandledException = ex;
                UpdateCompleted(monitor, aggOp, file, genFile, result, false);
            }
        }
Esempio n. 14
0
        protected override void DoExecute(IProgressMonitor monitor,
                                          ExecutionContext context,
                                          ConfigurationSelector configuration)
        {
            PythonConfiguration config;
            IConsole            console;

            config = (PythonConfiguration)GetConfiguration(configuration);

            // Make sure we have a module to execute
            if (config.Runtime == null || String.IsNullOrEmpty(config.Module))
            {
                MessageService.ShowMessage("No target module specified!");
                return;
            }

            monitor.Log.WriteLine("Running project...");

            // Create a console, external if needed
            if (config.ExternalConsole)
            {
                console = context.ExternalConsoleFactory.CreateConsole(!config.PauseConsoleOutput);
            }
            else
            {
                console = context.ConsoleFactory.CreateConsole(!config.PauseConsoleOutput);
            }

            AggregatedOperationMonitor operationMonitor = new AggregatedOperationMonitor(monitor);

            try {
                PythonExecutionCommand cmd = new PythonExecutionCommand(config);

                if (!context.ExecutionHandler.CanExecute(cmd))
                {
                    monitor.ReportError("The selected execution mode is not supported for Python projects.", null);
                    return;
                }

                IProcessAsyncOperation op = context.ExecutionHandler.Execute(cmd, console);
                operationMonitor.AddOperation(op);
                op.WaitForCompleted();

                monitor.Log.WriteLine("The operation exited with code: {0}", op.ExitCode);
            }
            catch (Exception ex) {
                monitor.ReportError("Cannot execute \"" + config.Runtime.Path + "\"", ex);
            }
            finally {
                operationMonitor.Dispose();
                console.Dispose();
            }
        }
Esempio n. 15
0
        protected override void DoExecute(IProgressMonitor monitor,
                                          ExecutionContext context)
        {
            CProjectConfiguration conf = (CProjectConfiguration)ActiveConfiguration;
            string   command           = conf.Output;
            string   args     = conf.CommandLineParameters;
            string   dir      = Path.GetFullPath(conf.OutputDirectory);
            string   platform = "Native";
            bool     pause    = conf.PauseConsoleOutput;
            IConsole console;

            if (conf.CompileTarget != CBinding.CompileTarget.Bin)
            {
                IdeApp.Services.MessageService.ShowMessage("Compile target is not an executable!");
                return;
            }

            monitor.Log.WriteLine("Running project...");

            if (conf.ExternalConsole)
            {
                console = context.ExternalConsoleFactory.CreateConsole(!pause);
            }
            else
            {
                console = context.ConsoleFactory.CreateConsole(!pause);
            }

            AggregatedOperationMonitor operationMonitor = new AggregatedOperationMonitor(monitor);

            try {
                IExecutionHandler handler = context.ExecutionHandlerFactory.CreateExecutionHandler(platform);

                if (handler == null)
                {
                    monitor.ReportError("Cannot execute \"" + command + "\". The selected execution mode is not supported in the " + platform + " platform.", null);
                    return;
                }

                IProcessAsyncOperation op = handler.Execute(Path.Combine(dir, command), args, dir, console);

                operationMonitor.AddOperation(op);
                op.WaitForCompleted();

                monitor.Log.WriteLine("The operation exited with code: {0}", op.ExitCode);
            } catch (Exception ex) {
                monitor.ReportError("Cannot execute \"" + command + "\"", ex);
            } finally {
                operationMonitor.Dispose();
                console.Dispose();
            }
        }
        public static void Run(HaxeProject project, HaxeProjectConfiguration configuration, IProgressMonitor monitor, ExecutionContext context)
        {
            ExecutionCommand cmd = CreateExecutionCommand(project, configuration);

            if (cmd is HaxeExecutionCommand)
            {
                IConsole console;
                if (configuration.ExternalConsole)
                {
                    console = context.ExternalConsoleFactory.CreateConsole(false);
                }
                else
                {
                    console = context.ConsoleFactory.CreateConsole(false);
                }

                AggregatedOperationMonitor operationMonitor = new AggregatedOperationMonitor(monitor);

                try
                {
                    if (!context.ExecutionHandler.CanExecute(cmd))
                    {
                        monitor.ReportError(String.Format("Cannot execute '{0}'.", cmd.Target), null);
                        return;
                    }

                    IProcessAsyncOperation operation = context.ExecutionHandler.Execute(cmd, console);

                    operationMonitor.AddOperation(operation);
                    operation.WaitForCompleted();

                    monitor.Log.WriteLine("Player exited with code {0}.", operation.ExitCode);
                }
                catch (Exception)
                {
                    monitor.ReportError(String.Format("Error while executing '{0}'.", cmd.Target), null);
                }
                finally
                {
                    operationMonitor.Dispose();
                    console.Dispose();
                }
            }
            //else
            //{
            //	Process.Start (cmd);
            //}
        }
Esempio n. 17
0
        internal static void ExecuteProject(DubProject prj, IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration)
        {
            var      conf = prj.GetConfiguration(configuration) as DubProjectConfiguration;
            IConsole console;

            if (conf.ExternalConsole)
            {
                console = context.ExternalConsoleFactory.CreateConsole(!conf.PauseConsoleOutput);
            }
            else
            {
                console = context.ConsoleFactory.CreateConsole(true);
            }

            var operationMonitor = new AggregatedOperationMonitor(monitor);

            var sr = new StringBuilder("run");

            Instance.BuildCommonArgAppendix(sr, prj, configuration);

            try
            {
                var cmd = new NativeExecutionCommand(Instance.DubExecutable, sr.ToString(), prj.BaseDirectory.ToString());
                if (!context.ExecutionHandler.CanExecute(cmd))
                {
                    monitor.ReportError("Cannot execute \"" + "\". The selected execution mode is not supported for Dub projects.", null);
                    return;
                }

                var op = context.ExecutionHandler.Execute(cmd, console);

                operationMonitor.AddOperation(op);
                op.WaitForCompleted();

                monitor.Log.WriteLine(Instance.DubExecutable + " exited with code: {0}", op.ExitCode);
            }
            catch (Exception ex)
            {
                monitor.ReportError("Cannot execute \"" + sr.ToString() + "\"", ex);
            }
            finally
            {
                operationMonitor.Dispose();
                console.Dispose();
            }
        }
Esempio n. 18
0
        //copied from MoonlightBuildExtension
        public static int ExecuteCommand(IProgressMonitor monitor, System.Diagnostics.ProcessStartInfo startInfo, out string errorOutput)
        {
            startInfo.UseShellExecute        = false;
            startInfo.RedirectStandardError  = true;
            startInfo.RedirectStandardOutput = true;

            errorOutput = string.Empty;
            int exitCode = -1;

            var swError      = new StringWriter();
            var chainedError = new LogTextWriter();

            chainedError.ChainWriter(monitor.Log);
            chainedError.ChainWriter(swError);

            var operationMonitor = new AggregatedOperationMonitor(monitor);

            try {
                var p = Runtime.ProcessService.StartProcess(startInfo, monitor.Log, chainedError, null);
                operationMonitor.AddOperation(p);                  //handles cancellation

                p.WaitForOutput();
                errorOutput = swError.ToString();
                exitCode    = p.ExitCode;
                p.Dispose();

                if (monitor.IsCancelRequested)
                {
                    monitor.Log.WriteLine(GettextCatalog.GetString("Build cancelled"));
                    monitor.ReportError(GettextCatalog.GetString("Build cancelled"), null);
                    if (exitCode == 0)
                    {
                        exitCode = -1;
                    }
                }
            } finally {
                chainedError.Close();
                swError.Close();
                operationMonitor.Dispose();
            }

            return(exitCode);
        }
        protected void RunFuseCommand(IProgressMonitor monitor, string command, string args)
        {
            LoggingService.LogInfo("Running FUSE command: {0} {1}", command, args);
            var log = new StringWriter();
            var psi = new System.Diagnostics.ProcessStartInfo(command, args)
            {
                RedirectStandardError  = true,
                RedirectStandardOutput = true,
                UseShellExecute        = false,
            };

            using (var opMon = new AggregatedOperationMonitor(monitor)) {
                using (var pWrapper = MonoDevelop.Core.Runtime.ProcessService.StartProcess(psi, log, log, null)) {
                    opMon.AddOperation(pWrapper);
                    pWrapper.WaitForOutput();
                    if (pWrapper.ExitCode != 0)
                    {
                        throw new Exception(log.ToString());
                    }
                }
            }
        }
        public static IAsyncOperation SignAndCopy(IProgressMonitor monitor, MonoDroidProject project,
                                                  ConfigurationSelector configSel)
        {
            var conf  = project.GetConfiguration(configSel);
            var opMon = new AggregatedOperationMonitor(monitor);

            IAsyncOperation signOp = null;

            if (project.PackageNeedsSigning(configSel))
            {
                ClearUploadFlags(conf);
                signOp = project.SignPackage(configSel);
                opMon.AddOperation(signOp);
            }

            string packageName = project.GetPackageName(conf);
            string targetFile  = InvokeSynch(() => ChooseApkLocation(null, project.BaseDirectory, packageName));

            if (String.IsNullOrEmpty(targetFile))
            {
                opMon.Dispose();
                return(null);
            }

            if (MonoDroidFramework.CheckTrial())
            {
                opMon.Dispose();
                return(null);
            }

            var copy = CopyApk(signOp, conf.ApkSignedPath, targetFile);

            copy.Completed += delegate {
                opMon.Dispose();
            };

            return(copy);
        }
Esempio n. 21
0
        protected override void DoExecute(IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration)
        {
            bool executeCustomCommand =
                ExtendedConfiguration != null &&
                !string.IsNullOrWhiteSpace(ExtendedConfiguration.RunCommand);

            var conf = GetConfiguration(configuration) as DProjectConfiguration;

            if (conf == null)
            {
                return;
            }

            if (!conf.UnittestMode && (conf.CompileTarget != DCompileTarget.Executable || executeCustomCommand))
            {
                MessageService.ShowMessage("Compile target is not an executable!");
                return;
            }

            bool     pause = conf.PauseConsoleOutput;
            IConsole console;

            if (conf.ExternalConsole)
            {
                console = context.ExternalConsoleFactory.CreateConsole(!pause);
            }
            else
            {
                console = context.ConsoleFactory.CreateConsole(!pause);
            }

            monitor.Log.WriteLine("Running project...");



            var operationMonitor = new AggregatedOperationMonitor(monitor);

            try {
                var cmd = CreateExecutionCommand(configuration);
                if (!context.ExecutionHandler.CanExecute(cmd))
                {
                    monitor.ReportError("Cannot execute \"" + conf.Output + "\". The selected execution mode is not supported for D projects.", null);
                    return;
                }

                var op = context.ExecutionHandler.Execute(cmd, console);

                operationMonitor.AddOperation(op);
                op.WaitForCompleted();

                if (op.ExitCode != 0)
                {
                    monitor.ReportError(cmd.Command + " exited with code: " + op.ExitCode.ToString(), null);
                }
                else
                {
                    monitor.Log.WriteLine(cmd.Command + " exited with code: {0}", op.ExitCode);
                }
            } catch (Exception ex) {
                monitor.ReportError("Cannot execute \"" + conf.Output + "\"", ex);
            } finally {
                operationMonitor.Dispose();
                console.Dispose();
            }

            if (ProfilerModeHandler.IsProfilerMode && Compiler.HasProfilerSupport)
            {
                IdeApp.CommandService.DispatchCommand("MonoDevelop.D.Profiler.Commands.ProfilerCommands.AnalyseTaceLog");
            }
        }
        protected override void DoExecute(IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector config)
        {
            //check XSP is available

            var configuration = (AspNetAppProjectConfiguration)GetConfiguration(config);
            var cmd           = CreateExecutionCommand(config, configuration);

            IConsole console          = null;
            var      operationMonitor = new AggregatedOperationMonitor(monitor);

            bool isXsp = true;             //FIXME: fix this when it might not be true - should delegate to the ExecutionHandler

            try {
                //HACK: check XSP exists first, because error UX is cleaner w/o displaying a blank console pad.
                if (isXsp)
                {
                    try {
                        AspNetExecutionHandler.GetXspPath((AspNetExecutionCommand)cmd);
                    } catch (UserException ex) {
                        MessageService.ShowError(
                            GettextCatalog.GetString("Could not launch ASP.NET web server"),
                            ex.Message);
                        throw;
                    }
                }

                if (configuration.ExternalConsole)
                {
                    console = context.ExternalConsoleFactory.CreateConsole(!configuration.PauseConsoleOutput);
                }
                else
                {
                    console = context.ConsoleFactory.CreateConsole(!configuration.PauseConsoleOutput);
                }

                string url = String.Format("http://{0}:{1}", this.XspParameters.Address, this.XspParameters.Port);


                if (isXsp)
                {
                    console = new XspBrowserLauncherConsole(console, delegate {
                        BrowserLauncher.LaunchDefaultBrowser(url);
                    });
                }

                monitor.Log.WriteLine("Running web server...");

                var op = context.ExecutionHandler.Execute(cmd, console);
                operationMonitor.AddOperation(op);                  //handles cancellation

                if (!isXsp)
                {
                    BrowserLauncher.LaunchDefaultBrowser(url);
                }

                op.WaitForCompleted();

                monitor.Log.WriteLine("The web server exited with code: {0}", op.ExitCode);
            } catch (Exception ex) {
                if (!(ex is UserException))
                {
                    LoggingService.LogError("Could not launch ASP.NET web server.", ex);
                }
                monitor.ReportError("Could not launch web server.", ex);
            } finally {
                operationMonitor.Dispose();
                if (console != null)
                {
                    console.Dispose();
                }
            }
        }
Esempio n. 23
0
        protected override void OnExecute(IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configSel)
        {
            var conf = (MonoBrickProjectConfiguration)GetConfiguration(configSel);
            var cmd  = (MonoBrickExecutionCommand)CreateExecutionCommand(configSel, conf);

            bool debugExecution = !(context.ExecutionHandler is MonoBrickExecutionHandler);

            var runtime = conf.TargetRuntime;

            if (runtime.RuntimeId != "Mono" && debugExecution)
            {
                monitor.ReportError("You must use the Mono runtime for debugging!", null);
                return;
            }

            using (var opMon = new AggregatedOperationMonitor(monitor))
            {
                IConsole console = null;

                try
                {
                    console = conf.ExternalConsole
                                                ? context.ExternalConsoleFactory.CreateConsole(!conf.PauseConsoleOutput)
                                                : context.ConsoleFactory.CreateConsole(!conf.PauseConsoleOutput);

                    cmd.Console = console;

                    if (!MonoBrickUtility.GetEV3Configuration(console))
                    {
                        string configError = "Invalid EV3 configuration. Check Preferences->MonoBrick for correct settings!";

                        console.Log.WriteLine(configError);
                        monitor.ReportError(configError, null);
                        return;
                    }

                    console.Log.WriteLine("Upload to brick...");

                    string EV3IPAddress = UserSettings.Instance.IPAddress;

                    var uploadOp = MonoBrickUtility.Upload(EV3IPAddress, cmd);
                    opMon.AddOperation(uploadOp);

                    uploadOp.WaitForCompleted();

                    if (!uploadOp.Success)
                    {
                        console.Log.WriteLine(uploadOp.ErrorMessage);
                        monitor.ReportError(uploadOp.ErrorMessage, null);
                        return;
                    }

                    console.Log.WriteLine("Running on brick...");

                    var ex = context.ExecutionHandler.Execute(cmd, console);
                    opMon.AddOperation(ex);
                    ex.WaitForCompleted();

                    console.Log.WriteLine("");
                    console.Log.WriteLine("Finished!");
                }
                finally
                {
                    if (console != null)
                    {
                        console.Dispose();
                    }
                }
            }
        }
Esempio n. 24
0
        protected override void DoExecute(IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration)
        {
            if (!CheckCanExecute(configuration))
            {
                return;
            }

            var      config  = (LuaConfiguration)GetConfiguration(configuration);
            IConsole console = config.ExternalConsole ?
                               context.ExternalConsoleFactory.CreateConsole(!config.PauseConsoleOutput) :
                               context.ConsoleFactory.CreateConsole(!config.PauseConsoleOutput);

            var aggregatedMonitor = new AggregatedOperationMonitor(monitor);

            try {
                string param;

                if (config.LangVersion != LangVersion.Love)
                {
                    param = string.Format("\"{0}\" {1}", config.MainFile, config.CommandLineParameters);
                }
                else
                {
                    param = string.Format("\"{0}\" {1}", ItemDirectory, config.CommandLineParameters);
                }

                IProcessAsyncOperation op =
                    Runtime.ProcessService.StartConsoleProcess(GetLuaPath(config),
                                                               param, (config.LangVersion != LangVersion.Love) ? BaseDirectory : ItemDirectory,
                                                               config.EnvironmentVariables, console, null);

                monitor.CancelRequested += delegate {
                    op.Cancel();
                };

                aggregatedMonitor.AddOperation(op);
                op.WaitForCompleted();
                monitor.Log.WriteLine("The application exited with code: " + op.ExitCode);

                /*
                 * var executionCommand = //CreateExecutionCommand( configuration, config );
                 *      new NativeExecutionCommand( GetLuaPath( config.LangVersion ),
                 *                                 config.CommandLineParameters,
                 *                                 BaseDirectory );
                 *
                 *
                 * if( !context.ExecutionHandler.CanExecute( executionCommand ) )
                 * {
                 *      monitor.ReportError( GettextCatalog.GetString( "Cannot execute application. The selected execution mode " +
                 *      "is not supported for Lua projects" ), null );
                 *      return;
                 * }
                 *
                 * IProcessAsyncOperation asyncOp = context.ExecutionHandler.Execute( executionCommand, console );
                 * aggregatedMonitor.AddOperation( asyncOp );
                 * asyncOp.WaitForCompleted();
                 *
                 * monitor.Log.WriteLine( "The application exited with code: " + asyncOp.ExitCode );
                 */
            } catch (Exception exc) {
                monitor.ReportError(GettextCatalog.GetString("Cannot execute \"{0}\"", config.MainFile), exc);
            } finally {
                console.Dispose();
                aggregatedMonitor.Dispose();
            }
        }
Esempio n. 25
0
        /// <summary>Executes a build command, writing output to the monitor.</summary>
        /// <returns>Whether the command executed successfully.</returns>
        /// <param name='monitor'>Progress monitor for writing output and handling cancellation.</param>
        /// <param name='startInfo'>Process start info. Redirection will be enabled if necessary.</param>
        /// <param name='stdout'>Text writer for stdout. May be null.</param>
        /// <param name='stderr'>Text writer for stderr. May be null.</param>
        public static int ExecuteBuildCommand(IProgressMonitor monitor, ProcessStartInfo startInfo,
                                              TextWriter stdout, TextWriter stderr)
        {
            monitor.Log.WriteLine(startInfo.FileName + " " + startInfo.Arguments);

            startInfo.UseShellExecute        = false;
            startInfo.RedirectStandardError  = true;
            startInfo.RedirectStandardOutput = true;

            int exitCode = -1;

            TextWriter    outWriter = monitor.Log, errWriter = monitor.Log;
            LogTextWriter chainedOut = null, chainedErr = null;

            if (stdout != null)
            {
                chainedOut = new LogTextWriter();
                chainedOut.ChainWriter(outWriter);
                chainedOut.ChainWriter(stdout);
                outWriter = chainedOut;
            }

            if (stderr != null)
            {
                chainedErr = new LogTextWriter();
                chainedErr.ChainWriter(errWriter);
                chainedErr.ChainWriter(stderr);
                errWriter = chainedErr;
            }

            var operationMonitor = new AggregatedOperationMonitor(monitor);

            IProcessAsyncOperation p = null;

            try {
                p = Runtime.ProcessService.StartProcess(startInfo, outWriter, errWriter, null);
                operationMonitor.AddOperation(p);                  //handles cancellation
                p.WaitForCompleted();
                exitCode = p.ExitCode;
            } finally {
                if (chainedErr != null)
                {
                    chainedErr.Dispose();
                }
                if (chainedOut != null)
                {
                    chainedOut.Dispose();
                }
                if (p != null)
                {
                    p.Dispose();
                }
                operationMonitor.Dispose();
            }

            if (exitCode != 0)
            {
                monitor.Log.WriteLine("{0} exited with code {1}", Path.GetFileName(startInfo.FileName), exitCode);
            }

            return(exitCode);
        }
        public static void Update(ProjectFile file, bool force)
        {
            var tool = GetGenerator(file);

            if (tool == null)
            {
                return;
            }

            ProjectFile genFile = null;

            if (!string.IsNullOrEmpty(file.LastGenOutput))
            {
                genFile = file.Project.Files.GetFile(file.FilePath.ParentDirectory.Combine(file.LastGenOutput));
            }

            if (!force && genFile != null && File.Exists(genFile.FilePath) &&
                File.GetLastWriteTime(file.FilePath) < File.GetLastWriteTime(genFile.FilePath))
            {
                return;
            }

            TaskService.Errors.ClearByOwner(file);

            //if this file is already being run, cancel it
            lock (runningTasks)
            {
                IAsyncOperation runningTask;
                if (runningTasks.TryGetValue(file.FilePath, out runningTask))
                {
                    runningTask.Cancel();
                    runningTasks.Remove(file.FilePath);
                }
            }

            var monitor = IdeApp.Workbench.ProgressMonitors.GetToolOutputProgressMonitor(false);
            var result  = new SingleFileCustomToolResult();
            var aggOp   = new AggregatedOperationMonitor(monitor);

            try
            {
                monitor.BeginTask(GettextCatalog.GetString("Running generator '{0}' on file '{1}'...", file.Generator, file.Name), 1);
                var op = tool.Generate(monitor, file, result);
                runningTasks.Add(file.FilePath, op);
                aggOp.AddOperation(op);
                op.Completed += delegate
                {
                    lock (runningTasks)
                    {
                        IAsyncOperation runningTask;
                        if (runningTasks.TryGetValue(file.FilePath, out runningTask) && runningTask == op)
                        {
                            runningTasks.Remove(file.FilePath);
                            UpdateCompleted(monitor, aggOp, file, genFile, result);
                        }
                        else
                        {
                            //it was cancelled because another was run for the same file, so just clean up
                            aggOp.Dispose();
                            monitor.EndTask();
                            monitor.ReportWarning(GettextCatalog.GetString("Cancelled because generator ran again for the same file"));
                            monitor.Dispose();
                        }
                    }
                };
            }
            catch (Exception ex)
            {
                result.UnhandledException = ex;
                UpdateCompleted(monitor, aggOp, file, genFile, result);
            }
        }
Esempio n. 27
0
        protected override void OnExecute(IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configSel)
        {
            var conf = (MonoDroidProjectConfiguration)GetConfiguration(configSel);

            IConsole console = null;
            var      opMon   = new AggregatedOperationMonitor(monitor);

            try {
                var  handler          = context.ExecutionHandler as MonoDroidExecutionHandler;
                bool useHandlerDevice = handler != null && handler.DeviceTarget != null;

                AndroidDevice device = null;

                if (useHandlerDevice)
                {
                    device = handler.DeviceTarget;
                }
                else
                {
                    var deviceId = GetDeviceTarget(conf);
                    if (deviceId != null)
                    {
                        device = MonoDroidFramework.DeviceManager.GetDevice(deviceId);
                    }
                    if (device == null)
                    {
                        SetDeviceTarget(conf, null);
                    }
                }

                var uploadOp = MonoDroidUtility.SignAndUpload(monitor, this, configSel, false, ref device);

                //user cancelled device selection
                if (device == null)
                {
                    return;
                }

                if (!device.IsEmulator && MonoDroidFramework.CheckTrial())
                {
                    return;
                }

                opMon.AddOperation(uploadOp);
                uploadOp.WaitForCompleted();

                if (!uploadOp.Success || monitor.IsCancelRequested)
                {
                    return;
                }

                //get the activity name after signing produced the final manifest
                string activity;
                if (!GetActivityNameFromManifest(monitor, conf, out activity))
                {
                    return;
                }

                //successful, persist the device choice
                if (!useHandlerDevice)
                {
                    SetDeviceTarget(conf, device.ID);
                }

                var command = (MonoDroidExecutionCommand)CreateExecutionCommand(configSel, conf);
                command.Device   = device;
                command.Activity = activity;

                //FIXME: would be nice to skip this if it's a debug handler, which will set another value later
                var propOp = MonoDroidFramework.Toolbox.SetProperty(device, "debug.mono.extra", string.Empty);
                opMon.AddOperation(propOp);
                propOp.WaitForCompleted();
                if (!propOp.Success)
                {
                    monitor.ReportError(GettextCatalog.GetString("Could not clear debug settings on device"),
                                        propOp.Error);
                    return;
                }

                console = context.ConsoleFactory.CreateConsole(false);
                var executeOp = context.ExecutionHandler.Execute(command, console);
                opMon.AddOperation(executeOp);
                executeOp.WaitForCompleted();
            } finally {
                opMon.Dispose();
                if (console != null)
                {
                    console.Dispose();
                }
            }
        }