Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[preview] Update/azure dev ops api 19 #1979

Merged
merged 2 commits into from
Mar 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Include="Microsoft.TeamFoundationServer.ExtendedClient" Version="16.205.1" />
<PackageReference Include="Microsoft.TeamFoundationServer.ExtendedClient" Version="19.225.1" />
<PackageReference Include="MSTest.TestAdapter" Version="3.2.2" />
<PackageReference Include="MSTest.TestFramework" Version="3.2.2" />
<PackageReference Include="coverlet.collector" Version="6.0.1">
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MigrationTools.DataContracts;
Expand Down Expand Up @@ -31,18 +32,16 @@ private static TfsRevisionManagerOptions GetTfsRevisionManagerOptions()
return migrationConfig;
}

private static WorkItemData GetWorkItemWithRevisions(DateTime currentDateTime, int startHours = 1, int endHours = 1, bool dateIncreasing = true)
private static List<RevisionItem> GetWorkItemWithRevisions(DateTime currentDateTime, int startHours = 1, int endHours = 1, bool dateIncreasing = true)
{
var fakeWorkItem = new WorkItemData();
fakeWorkItem.Id = Guid.NewGuid().ToString();
fakeWorkItem.Revisions = new System.Collections.Generic.SortedDictionary<int, RevisionItem>();
var revisions = new System.Collections.Generic.SortedDictionary<int, RevisionItem>();
for (int i = startHours; i < endHours + startHours; i++)
{
DateTime dateTime = dateIncreasing ? currentDateTime.AddHours(-i) : currentDateTime;
fakeWorkItem.Revisions.Add(i, new RevisionItem() { Index = i, Number = i, ChangedDate = dateTime, OriginalChangedDate = dateTime });
DateTime dateTime = dateIncreasing ? currentDateTime.AddHours(i) : currentDateTime;
revisions.Add(i, new RevisionItem() { Index = i, Number = i, ChangedDate = dateTime, OriginalChangedDate = dateTime });
}

return fakeWorkItem;
return revisions.Values.ToList();
}


Expand All @@ -54,8 +53,8 @@ public void TfsRevisionManagerInSync1()
processorEnricher.Configure(peOptions);

var currentDateTime = System.DateTime.Now;
WorkItemData source = GetWorkItemWithRevisions(currentDateTime, 1, 1);
WorkItemData target = GetWorkItemWithRevisions(currentDateTime, 1, 1);
List<RevisionItem> source = GetWorkItemWithRevisions(currentDateTime, 1, 1);
List<RevisionItem> target = GetWorkItemWithRevisions(currentDateTime, 1, 1);

var revs = processorEnricher.GetRevisionsToMigrate(source, target);

Expand All @@ -71,12 +70,12 @@ public void TfsRevisionManagerInSync10()
processorEnricher.Configure(peOptions);

var currentDateTime = System.DateTime.Now;
WorkItemData source = GetWorkItemWithRevisions(currentDateTime, 1, 10);
WorkItemData target = GetWorkItemWithRevisions(currentDateTime, 1, 10);
List<RevisionItem> source = GetWorkItemWithRevisions(currentDateTime, 1, 10);
List<RevisionItem> target = GetWorkItemWithRevisions(currentDateTime, 1, 10);

var revs = processorEnricher.GetRevisionsToMigrate(source, target);

Assert.AreEqual(revs.Count, 0);
Assert.AreEqual(0, revs.Count);

}

Expand All @@ -88,8 +87,8 @@ public void TfsRevisionManagerSync1()
processorEnricher.Configure(peOptions);

var currentDateTime = System.DateTime.Now;
WorkItemData source = GetWorkItemWithRevisions(currentDateTime, 1, 2);
WorkItemData target = GetWorkItemWithRevisions(currentDateTime, 2, 1);
List<RevisionItem> source = GetWorkItemWithRevisions(currentDateTime, 1, 2);
List<RevisionItem> target = GetWorkItemWithRevisions(currentDateTime, 1, 1);

var revs = processorEnricher.GetRevisionsToMigrate(source, target);

Expand All @@ -104,8 +103,8 @@ public void TfsRevisionManagerSync10()
processorEnricher.Configure(peOptions);

var currentDateTime = DateTime.Now;
WorkItemData source = GetWorkItemWithRevisions(currentDateTime, 1, 11);
WorkItemData target = GetWorkItemWithRevisions(currentDateTime, 11, 1);
List<RevisionItem> source = GetWorkItemWithRevisions(currentDateTime, 1, 11);
List<RevisionItem> target = GetWorkItemWithRevisions(currentDateTime, 1, 1);

var revs = processorEnricher.GetRevisionsToMigrate(source, target);

Expand All @@ -120,9 +119,9 @@ public void TfsRevisionManagerReplayRevisionsOff()
var processorEnricher = Services.GetRequiredService<TfsRevisionManager>();
processorEnricher.Configure(peOptions);

var currentDateTime = DateTime.Now;
WorkItemData source = GetWorkItemWithRevisions(currentDateTime, 1, 4);
WorkItemData target = GetWorkItemWithRevisions(currentDateTime, 4, 1);
var currentDateTime = DateTime.Now.AddDays(-100);
List<RevisionItem> source = GetWorkItemWithRevisions(currentDateTime, 1, 4);
List<RevisionItem> target = GetWorkItemWithRevisions(currentDateTime, 1, 1);

var revs = processorEnricher.GetRevisionsToMigrate(source, target);

Expand All @@ -139,12 +138,12 @@ public void TfsRevisionManagerMaxRevision51()
processorEnricher.Configure(peOptions);

var currentDateTime = DateTime.Now;
WorkItemData source = GetWorkItemWithRevisions(currentDateTime, 1, 2);
WorkItemData target = GetWorkItemWithRevisions(currentDateTime, 2, 1);
List<RevisionItem> source = GetWorkItemWithRevisions(currentDateTime, 1, 2);
List<RevisionItem> target = GetWorkItemWithRevisions(currentDateTime, 2, 2);

var revs = processorEnricher.GetRevisionsToMigrate(source, target);

Assert.AreEqual(1, revs.Count);
Assert.AreEqual(0, revs.Count);
}

[TestMethod(), TestCategory("L0"), TestCategory("AzureDevOps.ObjectModel")]
Expand All @@ -156,8 +155,8 @@ public void TfsRevisionManagerMaxRevision56()
processorEnricher.Configure(peOptions);

var currentDateTime = DateTime.Now;
WorkItemData source = GetWorkItemWithRevisions(currentDateTime, 1, 7);
WorkItemData target = GetWorkItemWithRevisions(currentDateTime, 7, 1);
List<RevisionItem> source = GetWorkItemWithRevisions(currentDateTime, 1, 7);
List<RevisionItem> target = GetWorkItemWithRevisions(currentDateTime, 1, 1);

var revs = processorEnricher.GetRevisionsToMigrate(source, target);

Expand All @@ -173,7 +172,7 @@ public void TfsRevisionManagerMaxRevision59()
processorEnricher.Configure(peOptions);

var currentDateTime = DateTime.Now;
WorkItemData source = GetWorkItemWithRevisions(currentDateTime, 1, 10);
List<RevisionItem> source = GetWorkItemWithRevisions(currentDateTime, 1, 10);

var revs = processorEnricher.GetRevisionsToMigrate(source, null);

Expand All @@ -188,7 +187,7 @@ public void TfsRevisionManagerDatesMustBeIncreasing()
processorEnricher.Configure(peOptions);

var currentDateTime = DateTime.Now;
WorkItemData source = GetWorkItemWithRevisions(currentDateTime.AddHours(-1000), 1, 10, false);
List<RevisionItem> source = GetWorkItemWithRevisions(currentDateTime, 1, 10, false);

var revs = processorEnricher.GetRevisionsToMigrate(source, null);
Assert.AreEqual(true, CheckDateIncreasing(revs));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@

<ItemGroup>
<PackageReference Include="Ben.Demystifier" Version="0.4.1" />
<PackageReference Include="Microsoft.TeamFoundation.DistributedTask.WebApi" Version="16.205.1" />
<PackageReference Include="Microsoft.TeamFoundationServer.ExtendedClient" Version="16.205.1" />
<PackageReference Include="Microsoft.TeamFoundation.DistributedTask.Common.Contracts" Version="19.225.1" />
<PackageReference Include="Microsoft.TeamFoundation.DistributedTask.WebApi" Version="19.225.1" />
<PackageReference Include="Microsoft.TeamFoundationServer.ExtendedClient" Version="19.225.1" />
<PackageReference Include="TfsUrlParser" Version="1.4.1" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,34 +74,32 @@ protected override void RefreshForProcessorType(IProcessor processor)
}
}

public List<RevisionItem> GetRevisionsToMigrate(WorkItemData sourceWorkItem, WorkItemData targetWorkItem)
public List<RevisionItem> GetRevisionsToMigrate(List<RevisionItem> sourceRevisions, List<RevisionItem> targetRevisions)
{
// Revisions have been sorted already on object creation. Values of the Dictionary are sorted by RevisionItem.Number
var sortedRevisions = sourceWorkItem.Revisions.Values.ToList();
EnforceDatesMustBeIncreasing(sourceRevisions);

EnforceDatesMustBeIncreasing(sortedRevisions);
LogDebugCurrentSortedRevisions(sourceRevisions, "Source");
LogDebugCurrentSortedRevisions(targetRevisions, "Target");
Log.LogDebug("TfsRevisionManager::GetRevisionsToMigrate: Raw {sourceWorkItem} Has {sortedRevisions} revisions", "Source", sourceRevisions.Count);

LogDebugCurrentSortedRevisions(sourceWorkItem, sortedRevisions);
Log.LogDebug("TfsRevisionManager::GetRevisionsToMigrate: Raw Source {sourceWorkItem} Has {sortedRevisions} revisions", sourceWorkItem.Id, sortedRevisions.Count);
sourceRevisions = RemoveRevisionsAlreadyOnTarget(targetRevisions, sourceRevisions);

sortedRevisions = RemoveRevisionsAlreadyOnTarget(targetWorkItem, sortedRevisions);
RemoveRevisionsAllExceptLatest(sourceRevisions);

RemoveRevisionsAllExceptLatest(sortedRevisions);
RemoveRevisionsMoreThanMaxRevisions(sourceRevisions);

RemoveRevisionsMoreThanMaxRevisions(sortedRevisions);
LogDebugCurrentSortedRevisions(sourceRevisions);

LogDebugCurrentSortedRevisions(sourceWorkItem, sortedRevisions);

return sortedRevisions;
return sourceRevisions;
}

private void EnforceDatesMustBeIncreasing(List<RevisionItem> sortedRevisions)
public void EnforceDatesMustBeIncreasing(List<RevisionItem> sortedRevisions)
{
Log.LogDebug("TfsRevisionManager::EnforceDatesMustBeIncreasing");
DateTime lastDateTime = DateTime.MinValue;
foreach (var revision in sortedRevisions)
{
if (revision.OriginalChangedDate == lastDateTime || revision.OriginalChangedDate < lastDateTime)
if (revision.ChangedDate == lastDateTime || revision.OriginalChangedDate < lastDateTime)
{
revision.ChangedDate = lastDateTime.AddSeconds(1);
Log.LogDebug("TfsRevisionManager::EnforceDatesMustBeIncreasing[{revision}]::Fix", revision.Number);
Expand All @@ -110,15 +108,20 @@ private void EnforceDatesMustBeIncreasing(List<RevisionItem> sortedRevisions)
}
}

private void LogDebugCurrentSortedRevisions(WorkItemData sourceWorkItem, List<RevisionItem> sortedRevisions)
public void LogDebugCurrentSortedRevisions(List<RevisionItem> sortedRevisions, string designation = "Source")
{
Log.LogInformation("Found {RevisionsCount} revisions to migrate on Work item:{sourceWorkItemId}", sortedRevisions.Count, sourceWorkItem.Id);
Log.LogDebug("RevisionsToMigrate:----------------------------------------------------");
if (sortedRevisions == null)
{
Log.LogDebug("{designation}: RevisionsToMigrate: No revisions to migrate", designation);
return;
}
Log.LogInformation("{designation}: Found {RevisionsCount} revisions to migrate on Work item:{sourceWorkItemId}", designation, sortedRevisions.Count, designation);
Log.LogDebug("{designation}: RevisionsToMigrate:----------------------------------------------------", designation);
foreach (RevisionItem item in sortedRevisions)
{
Log.LogDebug("RevisionsToMigrate: Index:{Index} - Number:{Number} - ChangedDate:{ChangedDate}", item.Index, item.Number, item.ChangedDate);
}
Log.LogDebug("RevisionsToMigrate:----------------------------------------------------");
Log.LogDebug("{designation}: RevisionsToMigrate:----------------------------------------------------", designation);
}

private void RemoveRevisionsMoreThanMaxRevisions(List<RevisionItem> sortedRevisions)
Expand All @@ -130,7 +133,7 @@ private void RemoveRevisionsMoreThanMaxRevisions(List<RevisionItem> sortedRevisi
{
var revisionsToRemove = sortedRevisions.Count - Options.MaxRevisions;
sortedRevisions.RemoveRange(0, revisionsToRemove);
Log.LogDebug("TfsRevisionManager::GetRevisionsToMigrate: MaxRevisions={MaxRevisions}! There are {sortedRevisionsCount} left", Options.MaxRevisions, sortedRevisions.Count);
Log.LogDebug("TfsRevisionManager::GetRevisionsToMigrate::RemoveRevisionsMoreThanMaxRevisions MaxRevisions={MaxRevisions}! There are {sortedRevisionsCount} left", Options.MaxRevisions, sortedRevisions.Count);
}
}

Expand All @@ -140,29 +143,32 @@ private void RemoveRevisionsAllExceptLatest(List<RevisionItem> sortedRevisions)
{
// Remove all but the latest revision if we are not replaying revisions
sortedRevisions.RemoveRange(0, sortedRevisions.Count - 1);
Log.LogDebug("TfsRevisionManager::GetRevisionsToMigrate: ReplayRevisions=false! There are {sortedRevisionsCount} left", sortedRevisions.Count);
Log.LogDebug("TfsRevisionManager::GetRevisionsToMigrate::RemoveRevisionsAllExceptLatest ReplayRevisions=false! There are {sortedRevisionsCount} left", sortedRevisions.Count);
}
}

private List<RevisionItem> RemoveRevisionsAlreadyOnTarget(WorkItemData targetWorkItem, List<RevisionItem> sortedRevisions)
private List<RevisionItem> RemoveRevisionsAlreadyOnTarget(List<RevisionItem> targetRevisions, List<RevisionItem> sourceRevisions)
{
if (targetWorkItem != null)
if (targetRevisions != null)
{
Log.LogDebug("TfsRevisionManager::GetRevisionsToMigrate: Raw Target {targetWorkItemId} Has {targetWorkItemRevCount} revisions", targetWorkItem.Id, targetWorkItem.Revisions.Count);
Log.LogDebug("TfsRevisionManager::GetRevisionsToMigrate::RemoveRevisionsAlreadyOnTarget Raw Target Has {targetWorkItemRevCount} revisions", targetRevisions.Count);
// Target exists so remove any Changed Date matches between them
var targetChangedDates = (from RevisionItem x in targetWorkItem.Revisions.Values select x.ChangedDate).ToList();
var targetChangedDates = (from RevisionItem x in targetRevisions select x.ChangedDate).ToList();
if (Options.ReplayRevisions)
{
sortedRevisions = sortedRevisions.Where(x => !targetChangedDates.Contains(x.ChangedDate)).ToList();
Log.LogDebug("TfsRevisionManager::GetRevisionsToMigrate: After removing Date Matches there are {sortedRevisionsCount} left", sortedRevisions.Count);
sourceRevisions = sourceRevisions.Where(x => !targetChangedDates.Contains(x.ChangedDate)).ToList();
Log.LogDebug("TfsRevisionManager::GetRevisionsToMigrate::RemoveRevisionsAlreadyOnTarget After removing Date Matches there are {sortedRevisionsCount} left", sourceRevisions.Count);
}
// Find Max target date and remove all source revisions that are newer
var targetLatestDate = targetChangedDates.Max();
sortedRevisions = sortedRevisions.Where(x => x.ChangedDate > targetLatestDate).ToList();
Log.LogDebug("TfsRevisionManager::GetRevisionsToMigrate: After removing revisions before target latest date {targetLatestDate} there are {sortedRevisionsCount} left", targetLatestDate, sortedRevisions.Count);
sourceRevisions = sourceRevisions.Where(x => x.ChangedDate > targetLatestDate).ToList();
Log.LogDebug("TfsRevisionManager::GetRevisionsToMigrate::RemoveRevisionsAlreadyOnTarget After removing revisions before target latest date {targetLatestDate} there are {sortedRevisionsCount} left", targetLatestDate, sourceRevisions.Count);
}

return sortedRevisions;
else
{
Log.LogDebug("TfsRevisionManager::GetRevisionsToMigrate::RemoveRevisionsAlreadyOnTarget Target is null");
}
return sourceRevisions;
}

public void AttachSourceRevisionHistoryJsonToTarget(WorkItemData sourceWorkItem, WorkItemData targetWorkItem)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.TeamFoundationServer.Client" Version="16.205.1" />
<PackageReference Include="Microsoft.TeamFoundationServer.Client" Version="19.225.1" />
<PackageReference Include="Microsoft.AspNet.WebApi.Client" Version="6.0.0" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Include="Microsoft.TeamFoundationServer.ExtendedClient" Version="16.205.1" />
<PackageReference Include="Microsoft.TeamFoundationServer.ExtendedClient" Version="19.225.1" />
<PackageReference Include="MSTest.TestAdapter" Version="3.2.2" />
<PackageReference Include="MSTest.TestFramework" Version="3.2.2" />
<PackageReference Include="coverlet.collector" Version="6.0.1">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.1" />
<PackageReference Include="Serilog.Sinks.Debug" Version="2.0.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="8.0.0" />
<PackageReference Include="Serilog.Sinks.InMemory" Version="0.11.0" />
Expand Down
4 changes: 2 additions & 2 deletions src/MigrationTools/MigrationTools.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
<PackageReference Include="Microsoft.Extensions.Options" Version="8.0.2" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="Microsoft.IdentityModel.Clients.ActiveDirectory" Version="5.3.0" />
<PackageReference Include="Microsoft.VisualStudio.Services.Client" Version="16.205.1" />
<PackageReference Include="Microsoft.VisualStudio.Services.ServiceEndpoints.WebApi" Version="16.205.1" />
<PackageReference Include="Microsoft.VisualStudio.Services.Client" Version="19.225.1" />
<PackageReference Include="Microsoft.VisualStudio.Services.ServiceEndpoints.WebApi" Version="19.225.1" />
<PackageReference Include="Serilog" Version="3.1.1" />
<PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" />
</ItemGroup>
Expand Down
Loading
Loading