diff --git a/src/ProductConstructionService/ProductConstructionService.DependencyFlow/PullRequestUpdater.cs b/src/ProductConstructionService/ProductConstructionService.DependencyFlow/PullRequestUpdater.cs index 47d95d471..6c0eb56e6 100644 --- a/src/ProductConstructionService/ProductConstructionService.DependencyFlow/PullRequestUpdater.cs +++ b/src/ProductConstructionService/ProductConstructionService.DependencyFlow/PullRequestUpdater.cs @@ -1111,17 +1111,19 @@ private async Task UpdateCodeFlowPullRequestAsync( IRemote remote = await _remoteFactory.CreateRemoteAsync(subscription.TargetRepository); var build = await _sqlClient.GetBuildAsync(update.BuildId); + string? baseSourceSha= pullRequest.ContainedSubscriptions.FirstOrDefault(u => u.SubscriptionId.Equals(update.SubscriptionId))?.BaseSourceSha + ?? previousSourceSha; pullRequest.ContainedSubscriptions.RemoveAll(s => s.SubscriptionId.Equals(update.SubscriptionId)); pullRequest.ContainedSubscriptions.Add(new SubscriptionPullRequestUpdate { SubscriptionId = update.SubscriptionId, BuildId = update.BuildId, SourceRepo = update.SourceRepo, - CommitSha = update.SourceSha + CommitSha = update.SourceSha, + BaseSourceSha = baseSourceSha, }); pullRequest.RequiredUpdates = MergeExistingWithIncomingUpdates(pullRequest.RequiredUpdates, newDependencyUpdates); - var title = _pullRequestBuilder.GenerateCodeFlowPRTitle( subscription.TargetBranch, pullRequest.ContainedSubscriptions.Select(s => s.SourceRepo).ToList()); @@ -1129,7 +1131,7 @@ private async Task UpdateCodeFlowPullRequestAsync( var description = _pullRequestBuilder.GenerateCodeFlowPRDescription( update, build, - previousSourceSha, + baseSourceSha, pullRequest.RequiredUpdates, prInfo?.Description, isForwardFlow: isForwardFlow); @@ -1213,7 +1215,8 @@ private async Task CreateCodeFlowPullRequestAsync( SubscriptionId = update.SubscriptionId, BuildId = update.BuildId, SourceRepo = update.SourceRepo, - CommitSha = update.SourceSha + CommitSha = update.SourceSha, + BaseSourceSha = previousSourceSha, } ], RequiredUpdates = requiredUpdates, diff --git a/src/ProductConstructionService/ProductConstructionService.DependencyFlow/SubscriptionPullRequestUpdate.cs b/src/ProductConstructionService/ProductConstructionService.DependencyFlow/SubscriptionPullRequestUpdate.cs index 94211af7a..b84880ecd 100644 --- a/src/ProductConstructionService/ProductConstructionService.DependencyFlow/SubscriptionPullRequestUpdate.cs +++ b/src/ProductConstructionService/ProductConstructionService.DependencyFlow/SubscriptionPullRequestUpdate.cs @@ -20,4 +20,10 @@ public class SubscriptionPullRequestUpdate [DataMember] public string CommitSha { get; set; } + + [DataMember] + /// + /// The earliest commit in the source repository from the changes contained in the current PR + /// + public string BaseSourceSha { get; set; } } diff --git a/test/ProductConstructionService.DependencyFlow.Tests/PullRequestUpdaterTests.cs b/test/ProductConstructionService.DependencyFlow.Tests/PullRequestUpdaterTests.cs index 6acaa2b1f..a1c36ecc7 100644 --- a/test/ProductConstructionService.DependencyFlow.Tests/PullRequestUpdaterTests.cs +++ b/test/ProductConstructionService.DependencyFlow.Tests/PullRequestUpdaterTests.cs @@ -51,7 +51,7 @@ protected override void RegisterServices(IServiceCollection services) services.AddSingleton(_forwardFlower.Object); services.AddSingleton(_gitClient.Object); - CodeFlowResult codeFlowRes = new CodeFlowResult(true, [], new NativePath(VmrPath), "aaa1234", []); + CodeFlowResult codeFlowRes = new CodeFlowResult(true, [], new NativePath(VmrPath), "base_codeflow_sha_123", []); _forwardFlower.SetReturnsDefault(Task.FromResult(codeFlowRes)); _backFlower.SetReturnsDefault(Task.FromResult(codeFlowRes)); _gitClient.SetReturnsDefault(Task.CompletedTask); @@ -623,7 +623,8 @@ protected InProgressPullRequest CreatePullRequestState( BuildId = forBuild.Id, SubscriptionId = Subscription.Id, SourceRepo = forBuild.GetRepository(), - CommitSha = forBuild.Commit + CommitSha = forBuild.Commit, + BaseSourceSha = Subscription.SourceEnabled ? "base_codeflow_sha_123" : null, } ], RequiredUpdates = forBuild.Assets diff --git a/test/ProductConstructionService.DependencyFlow.Tests/UpdateAssetsForCodeFlowTests.cs b/test/ProductConstructionService.DependencyFlow.Tests/UpdateAssetsForCodeFlowTests.cs index d7de106ee..a10b6520c 100644 --- a/test/ProductConstructionService.DependencyFlow.Tests/UpdateAssetsForCodeFlowTests.cs +++ b/test/ProductConstructionService.DependencyFlow.Tests/UpdateAssetsForCodeFlowTests.cs @@ -51,7 +51,8 @@ public async Task UpdateWithNoExistingState() SubscriptionId = Subscription.Id, BuildId = build.Id, SourceRepo = build.GetRepository(), - CommitSha = build.Commit + CommitSha = build.Commit, + BaseSourceSha = "base_codeflow_sha_123", } ], RequiredUpdates = [], @@ -178,7 +179,8 @@ public async Task UpdateWithManuallyMergedPrAndNewBuild() SubscriptionId = Subscription.Id, BuildId = build2.Id, SourceRepo = build.GetRepository(), - CommitSha = build2.Commit + CommitSha = build2.Commit, + BaseSourceSha = "base_codeflow_sha_123" } ], RequiredUpdates = [],