public static void RunBuildInProcess(BuildJob job, BuildSettings settings) { if (job == null) throw new ArgumentNullException("job"); if (settings == null) throw new ArgumentNullException("settings"); lock (lockObject) { if (inProcessBuildWorker == null) inProcessBuildWorker = new Program(); } inProcessBuildWorker.BuildInProcess(settings, job); }
public static void StartBuild(BuildJob job, BuildSettings settings) { if (job == null) throw new ArgumentNullException("job"); if (settings == null) throw new ArgumentNullException("settings"); BuildRun buildRun = new BuildRun(job, settings); lock (lockObject) { if (freeWorkerProcesses.Count > 0) { DequeueFreeWorkerProcess().StartBuild(buildRun); } else { outstandingBuildRuns.Enqueue(buildRun); if (workerProcessCount < MaxWorkerProcessCount) { workerProcessCount++; (new WorkerProcessHost()).Start(); } } } }
internal void BuildInProcess(BuildSettings settings, BuildJob job) { lock (this) { if (currentJob != null) throw new InvalidOperationException("Already running a job"); currentJob = job; requestCancellation = false; hostEventSource = new EventSource(); } job.CancelCallback = delegate { lock (this) { if (currentJob == job) { requestCancellation = true; } } }; bool success = false; try { foreach (ILogger logger in settings.Logger) { logger.Initialize(hostEventSource); } success = DoBuild(); foreach (ILogger logger in settings.Logger) { logger.Shutdown(); } } finally { lock (this) { currentJob = null; } if (settings.BuildDoneCallback != null) settings.BuildDoneCallback(success); } }
public BuildRun(BuildJob job, BuildSettings settings) { this.job = job; this.settings = settings; foreach (ILogger logger in settings.Logger) { logger.Initialize(eventSource); } }