private void AddBuildJob(IPipelineRunManager pipelineRunManager, BuildJob job, List <RunnableJob> runnableJobs, HashSet <BuildJob> dependentJobs, IDictionary <BuildJob, IJobStatus> jobMap) { if (dependentJobs.Contains(job)) { throw new CircularDependencyException(); } if (jobMap.ContainsKey(job)) { return; } dependentJobs.Add(job); foreach (var input in job.Input) { switch (input.Source) { case ArtifactBuildInput artifact: AddBuildJob(pipelineRunManager, artifact.Job, runnableJobs, dependentJobs, jobMap); break; } } dependentJobs.Remove(job); var runnable = new RunnableJob(pipelineRunManager, job, jobMap); jobMap.Add(job, runnable.JobStatus); runnableJobs.Add(runnable); }
/// <summary>Run the job on the current thread</summary> /// <param name="jobManager">The parent job manager.</param> /// <param name="workerThread">Cancellation pending?</param> internal void Run(JobManager jobManager, BackgroundWorker workerThread) { try { RunnableJob.Run(jobManager, workerThread); } catch (Exception err) { Error = err; } finally { worker = null; isCompleted = true; } }