public void GetBuildRuns() { BuildProject project = Instance.Create.BuildProject("My Project", "Project"); BuildRun run1 = project.CreateBuildRun("Run 1", new DateTime(2008, 1, 1)); BuildRun run2 = project.CreateBuildRun("Run 2", new DateTime(2008, 1, 2)); BuildRun run3 = project.CreateBuildRun("Run 3", new DateTime(2008, 1, 3)); run1.Reference = "A"; run2.Reference = "A"; run3.Reference = "B"; run1.Status.CurrentValue = "Passed"; run2.Status.CurrentValue = "Passed"; run3.Status.CurrentValue = "Failed"; run1.Save(); run2.Save(); run3.Save(); BuildRunFilter filter = new BuildRunFilter(); filter.References.Add("A"); filter.Status.Add("Passed"); ICollection <BuildRun> runs = project.GetBuildRuns(filter); CollectionAssert.AreEquivalent(new string[] { "Run 1", "Run 2" }, DeriveListOfNamesFromAssets(runs)); }
public void AddChangeSetsToBuildRun(BuildRun buildRun, IEnumerable <ChangeSet> changeSets) { var changeSetIds = new List <ValueId>(buildRun.ChangeSets); changeSetIds.AddRange(changeSets.Select(ValueId.FromEntity)); buildRun.ChangeSets = changeSetIds.ToArray(); }
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(); } } } }
void OnWorkerLost(object sender, EventArgs e) { BuildRun buildRun; lock (lockObject) { workerProcessCount--; freeWorkerProcesses.Remove(this); if (workerProcessCount == 0 && currentBuildRun == null) { // error starting worker => we must // cancel all outstanding build runs to prevent them from waiting // for a worker becoming ready when all workers are dead while (workerProcessCount == 0 && outstandingBuildRuns.Count > 0) { BuildRun r = outstandingBuildRuns.Dequeue(); Monitor.Exit(lockObject); r.RaiseError("Error starting worker process."); r.Done(false); Monitor.Enter(lockObject); } } buildRun = Interlocked.Exchange(ref currentBuildRun, null); } if (buildRun != null) { buildRun.RaiseError("Worker process lost during build"); buildRun.Done(false); } }
public int UpdateSolution_Begin(ref int pfCancelUpdate) { _ongoingBuild = new BuildRun { SolutionName = SolutionName, BuildStarted = DateTime.Now }; return(VSConstants.S_OK); }
[Test] public void GetBuildRuns() { ChangeSet changeSet = Instance.Create.ChangeSet(_name, _reference); ChangeSet notMyChangeSet = Instance.Create.ChangeSet("Other ChangeSet", "abcd"); BuildProject buildProject = Instance.Create.BuildProject("BP", "1234"); BuildRun buildRun = buildProject.CreateBuildRun("BR", DateTime.Now); BuildRun notMyBuildRun = buildProject.CreateBuildRun("Not My BR", DateTime.Now); buildRun.ChangeSets.Add(changeSet); notMyBuildRun.ChangeSets.Add(notMyChangeSet); AssetID changeSetId = changeSet.ID; AssetID buildRunId = buildRun.ID; ResetInstance(); changeSet = Instance.Get.ChangeSetByID(changeSetId); ICollection <BuildRun> buildRuns = changeSet.GetBuildRuns(null); Assert.AreEqual(1, buildRuns.Count); IEnumerator <BuildRun> enumerator = buildRuns.GetEnumerator(); enumerator.MoveNext(); Assert.AreEqual(buildRunId, enumerator.Current.ID); }
public void ReportEvent(BuildEventArgs e) { BuildRun buildRun = currentBuildRun; if (buildRun != null) { buildRun.RaiseEvent(e); } }
public int UpdateSolution_Done(int fSucceeded, int fModified, int fCancelCommand) { _ongoingBuild.BuildEnded = DateTime.Now; BuildSession.BuildRuns.Add(_ongoingBuild); WriteToOutputWindow($"========== Build Time : {_ongoingBuild.BuildTimeInSeconds:0.000} seconds ==========\r\n"); _ongoingBuild = null; _buildFileManager.WriteBuildSessionFile(BuildSession); return(VSConstants.S_OK); }
void OnReady(object sender, EventArgs e) { BuildRun nextBuildRun = null; lock (lockObject) { if (outstandingBuildRuns.Count > 0) { nextBuildRun = outstandingBuildRuns.Dequeue(); } else { freeWorkerProcesses.Add(this); } } if (nextBuildRun != null) { StartBuild(nextBuildRun); } }
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(); } } } }
// runs in lock(lockObject) internal void StartBuild(BuildRun nextBuildRun) { Debug.Assert(currentBuildRun == null); currentBuildRun = nextBuildRun; process.CallMethodOnWorker("StartBuild", currentBuildRun.job); }