예제 #1
0
 protected void RemoveSlaveMonitor(ProgressMonitor monitor)
 {
     if (slaveMonitors == null)
     {
         return;
     }
     slaveMonitors.Remove(monitor);
     logWriter.UnchainWriter(monitor.Log);
     errorLogWriter.UnchainWriter(monitor.ErrorLog);
 }
예제 #2
0
 protected void RemoveFollowerMonitor(ProgressMonitor monitor)
 {
     if (followerMonitors == null)
     {
         return;
     }
     followerMonitors.Remove(monitor);
     logWriter.UnchainWriter(monitor.Log);
     errorLogWriter.UnchainWriter(monitor.ErrorLog);
 }
        protected override Task <TargetEvaluationResult> OnRunTarget(ProgressMonitor monitor, string target, ConfigurationSelector configuration, TargetEvaluationContext context)
        {
            if (target == ProjectService.BuildTarget)
            {
                target = "all";
            }
            else if (target == ProjectService.CleanTarget)
            {
                target = "clean";
            }

            DotNetProjectConfiguration conf = (DotNetProjectConfiguration)Project.GetConfiguration(configuration);

            return(Task <TargetEvaluationResult> .Factory.StartNew(delegate {
                using (var output = new StringWriter()) {
                    using (var tw = new LogTextWriter()) {
                        tw.ChainWriter(output);
                        tw.ChainWriter(monitor.Log);

                        using (ProcessWrapper proc = Runtime.ProcessService.StartProcess("make", "PROFILE=" + conf.Id + " " + target, conf.OutputDirectory, monitor.Log, tw, null))
                            proc.WaitForOutput();

                        tw.UnchainWriter(output);
                        tw.UnchainWriter(monitor.Log);

                        CompilerResults cr = new CompilerResults(null);
                        string[] lines = output.ToString().Split('\n');
                        foreach (string line in lines)
                        {
                            CompilerError err = CreateErrorFromString(line);
                            if (err != null)
                            {
                                cr.Errors.Add(err);
                            }
                        }

                        return new TargetEvaluationResult(new BuildResult(cr, output.ToString()));
                    }
                }
            }));
        }
        public BuildResult RunTarget(MonoDevelop.Core.IProgressMonitor monitor, string target, ConfigurationSelector configuration)
        {
            if (target == ProjectService.BuildTarget)
            {
                target = "all";
            }
            else if (target == ProjectService.CleanTarget)
            {
                target = "clean";
            }

            DotNetProjectConfiguration conf = (DotNetProjectConfiguration)project.GetConfiguration(configuration);

            using (var output = new StringWriter()) {
                using (var tw = new LogTextWriter()) {
                    tw.ChainWriter(output);
                    tw.ChainWriter(monitor.Log);

                    using (ProcessWrapper proc = Runtime.ProcessService.StartProcess("make", "PROFILE=" + conf.Id + " " + target, conf.OutputDirectory, monitor.Log, tw, null))
                        proc.WaitForOutput();

                    tw.UnchainWriter(output);
                    tw.UnchainWriter(monitor.Log);

                    var result = new BuildResult(output.ToString(), 1, 0);

                    string[] lines = result.CompilerOutput.Split('\n');
                    foreach (string line in lines)
                    {
                        var err = CreateErrorFromString(line);
                        if (err != null)
                        {
                            result.Append(err);
                        }
                    }

                    return(result);
                }
            }
        }
예제 #5
0
        int ExecuteCommand(string command, string args, string baseDirectory, IProgressMonitor monitor, out string errorOutput)
        {
            errorOutput = string.Empty;
            int exitCode = -1;

            using (var swError = new StringWriter()) {
                using (var chainedError = new LogTextWriter()) {
                    chainedError.ChainWriter(monitor.Log);
                    chainedError.ChainWriter(swError);

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

                    using (var operationMonitor = new AggregatedOperationMonitor(monitor)) {
                        using (ProcessWrapper p = Runtime.ProcessService.StartProcess(command, args, baseDirectory, monitor.Log, chainedError, null)) {
                            operationMonitor.AddOperation(p);                              //handles cancellation

                            p.WaitForOutput();
                            chainedError.UnchainWriter(monitor.Log);
                            chainedError.UnchainWriter(swError);

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

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

            return(exitCode);
        }
예제 #6
0
		//FIXME: Check whether autogen.sh is required or not
		protected override BuildResult Build (IProgressMonitor monitor, SolutionEntityItem entry, ConfigurationSelector configuration)
		{
			Project project = entry as Project;
			if (project == null)
				return base.Build (monitor, entry, configuration);

			MakefileData data = project.ExtendedProperties ["MonoDevelop.Autotools.MakefileInfo"] as MakefileData;
			if (data == null || !data.SupportsIntegration || String.IsNullOrEmpty (data.BuildTargetName))
				return base.Build (monitor, entry, configuration);

			//FIXME: Gen autofoo ? autoreconf?

			string output = String.Empty;
			int exitCode = 0;
			monitor.BeginTask (GettextCatalog.GetString ("Building {0}", project.Name), 1);
			try
			{
				string baseDir = project.BaseDirectory;
				string args = string.Format ("-j {0} {1}", data.ParallelProcesses, data.BuildTargetName);
	
				using (var swOutput = new StringWriter ()) {
					using (var chainedOutput = new LogTextWriter ()) {
						chainedOutput.ChainWriter (monitor.Log);
						chainedOutput.ChainWriter (swOutput);

						using (ProcessWrapper process = Runtime.ProcessService.StartProcess ("make",
								args,
								baseDir, 
								chainedOutput, 
								chainedOutput,
							null)) {
							process.WaitForOutput ();

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

							exitCode = process.ExitCode;
							output = swOutput.ToString ();
							monitor.Step ( 1 );
						}
					}
				}
			}
			catch ( Exception e )
			{
				monitor.ReportError ( GettextCatalog.GetString ("Project could not be built: "), e );
				return null;
			}
			finally 
			{
				monitor.EndTask ();
			}

			TempFileCollection tf = new TempFileCollection ();
			Regex regexError = data.GetErrorRegex (false);
			Regex regexWarning = data.GetWarningRegex (false);

			BuildResult cr = ParseOutput (tf, output, project.BaseDirectory, regexError, regexWarning);
			if (exitCode != 0 && cr.FailedBuildCount == 0)
				cr.AddError (GettextCatalog.GetString ("Build failed. See Build Output panel."));

			return cr;
		}
예제 #7
0
        public bool Deploy(DeployContext ctx, Solution solution, string defaultConf, string targetDir, bool generateFiles, ProgressMonitor monitor)
        {
            if (generateFiles)
            {
                if (!GenerateFiles(ctx, solution, defaultConf, monitor))
                {
                    return(false);
                }
            }

            monitor.BeginTask(GettextCatalog.GetString("Deploying Solution to Tarball"), 3);
            try
            {
                string baseDir = Path.GetDirectoryName(solution.FileName);

                ProcessWrapper ag_process = Runtime.ProcessService.StartProcess("sh",
                                                                                generateAutotools ? "autogen.sh" : "configure",
                                                                                baseDir,
                                                                                monitor.Log,
                                                                                monitor.Log,
                                                                                null);
                ag_process.WaitForOutput();

                if (ag_process.ExitCode > 0)
                {
                    throw new Exception(GettextCatalog.GetString("An unspecified error occurred while running '{0}'", generateAutotools ? "autogen.sh" : "configure"));
                }

                monitor.Step(1);

                using (var sw = new StringWriter()) {
                    using (var chainedOutput = new LogTextWriter()) {
                        chainedOutput.ChainWriter(monitor.Log);
                        chainedOutput.ChainWriter(sw);

                        using (ProcessWrapper process = Runtime.ProcessService.StartProcess("make",
                                                                                            "dist",
                                                                                            baseDir,
                                                                                            chainedOutput,
                                                                                            monitor.Log,
                                                                                            null)) {
                            process.WaitForOutput();

                            chainedOutput.UnchainWriter(monitor.Log);
                            chainedOutput.UnchainWriter(sw);

                            if (process.ExitCode > 0)
                            {
                                throw new Exception(GettextCatalog.GetString("An unspecified error occurred while running '{0}'", "make dist"));
                            }
                        }

                        monitor.Step(1);

                        // FIXME: hackish way to get the created tarball's filename
                        string output = sw.ToString();
                        int    targz  = output.LastIndexOf("tar.gz");
                        int    begin  = output.LastIndexOf('>', targz);

                        string filename = output.Substring(begin + 1, (targz - begin) + 5).Trim();

                        FileService.CopyFile(Path.Combine(baseDir, filename), Path.Combine(targetDir, filename));
                        monitor.Step(1);
                    }
                }
            }
            catch (Exception e)
            {
                monitor.ReportError(GettextCatalog.GetString("Solution could not be deployed: "), e);
                return(false);
            }
            finally
            {
                monitor.EndTask();
            }
            monitor.ReportSuccess(GettextCatalog.GetString("Solution was successfully deployed."));
            return(true);
        }
        //FIXME: Check whether autogen.sh is required or not
        protected async override Task <BuildResult> OnBuild(ProgressMonitor monitor, ConfigurationSelector configuration, OperationContext operationContext)
        {
            if (data == null || !data.SupportsIntegration || String.IsNullOrEmpty(data.BuildTargetName))
            {
                return(await base.OnBuild(monitor, configuration, operationContext));
            }

            //FIXME: Gen autofoo ? autoreconf?

            string output   = String.Empty;
            int    exitCode = 0;

            monitor.BeginTask(GettextCatalog.GetString("Building {0}", Project.Name), 1);
            try
            {
                string baseDir = Project.BaseDirectory;
                string args    = string.Format("-j {0} {1}", data.ParallelProcesses, data.BuildTargetName);

                using (var swOutput = new StringWriter()) {
                    using (var chainedOutput = new LogTextWriter()) {
                        chainedOutput.ChainWriter(monitor.Log);
                        chainedOutput.ChainWriter(swOutput);

                        using (ProcessWrapper process = Runtime.ProcessService.StartProcess("make",
                                                                                            args,
                                                                                            baseDir,
                                                                                            chainedOutput,
                                                                                            chainedOutput,
                                                                                            null)) {
                            await process.Task;

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

                            exitCode = process.ExitCode;
                            output   = swOutput.ToString();
                            monitor.Step(1);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                monitor.ReportError(GettextCatalog.GetString("Project could not be built: "), e);
                return(null);
            }
            finally
            {
                monitor.EndTask();
            }

            TempFileCollection tf = new TempFileCollection();
            Regex regexError      = data.GetErrorRegex(false);
            Regex regexWarning    = data.GetWarningRegex(false);

            BuildResult cr = ParseOutput(tf, output, Project.BaseDirectory, regexError, regexWarning);

            if (exitCode != 0 && cr.FailedBuildCount == 0)
            {
                cr.AddError(GettextCatalog.GetString("Build failed. See Build Output panel."));
            }

            return(cr);
        }