Skip to content
This repository was archived by the owner on Oct 4, 2021. It is now read-only.

Commit e0ac3c6

Browse files
authored
Merge pull request #8818 from mono/nuget-update-multiple-packages
[NuGet] Update multiple packages together in a batch
2 parents fc06b94 + 46ca51e commit e0ac3c6

27 files changed

+1891
-60
lines changed

main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -757,8 +757,16 @@ static ProgressMonitorStatusMessage GetProgressMonitorUpdateMessages (List<IPack
757757
{
758758
int count = packageActions.Count;
759759
if (count == 1) {
760-
string packageId = packageActions.Cast<INuGetPackageAction> ().First ().PackageId;
761-
return ProgressMonitorStatusMessageFactory.CreateUpdatingSinglePackageMessage (packageId);
760+
if (packageActions [0] is UpdateMultipleNuGetPackagesAction updateMultiplePackagesAction) {
761+
count = updateMultiplePackagesAction.PackagesToUpdate.Count ();
762+
if (count == 1) {
763+
return ProgressMonitorStatusMessageFactory.CreateUpdatingSinglePackageMessage (
764+
updateMultiplePackagesAction.PackagesToUpdate.First ().Id);
765+
}
766+
} else {
767+
string packageId = packageActions.Cast<INuGetPackageAction> ().First ().PackageId;
768+
return ProgressMonitorStatusMessageFactory.CreateUpdatingSinglePackageMessage (packageId);
769+
}
762770
}
763771

764772
return new ProgressMonitorStatusMessage (

main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/FakeNuGetPackageManager.cs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public void SetDirectInstall (PackageIdentity directInstall, INuGetProjectContex
5959
public NuGetProject ExecutedNuGetProject;
6060
public List<NuGetProjectAction> ExecutedActions;
6161
public INuGetProjectContext ExecutedProjectContext;
62+
public SourceCacheContext ExecutedSourceCacheContext;
6263
public CancellationToken ExecutedCancellationToken;
6364

6465
public Action BeforeExecuteAction = () => { };
@@ -74,6 +75,7 @@ public Task ExecuteNuGetProjectActionsAsync (
7475
ExecutedNuGetProject = nuGetProject;
7576
ExecutedActions = nuGetProjectActions.ToList ();
7677
ExecutedProjectContext = nuGetProjectContext;
78+
ExecutedSourceCacheContext = sourceCacheContext;
7779
ExecutedCancellationToken = token;
7880

7981
BeforeExecuteAction ();
@@ -84,6 +86,25 @@ public Task ExecuteNuGetProjectActionsAsync (
8486
return Task.FromResult (0);
8587
}
8688

89+
public List<NuGetProject> ExecutedNuGetProjects;
90+
91+
public Task ExecuteNuGetProjectActionsAsync (
92+
IEnumerable<NuGetProject> nuGetProjects,
93+
IEnumerable<NuGetProjectAction> nuGetProjectActions,
94+
INuGetProjectContext nuGetProjectContext,
95+
SourceCacheContext sourceCacheContext,
96+
CancellationToken token)
97+
{
98+
ExecutedNuGetProjects = nuGetProjects.ToList ();
99+
100+
return ExecuteNuGetProjectActionsAsync (
101+
(NuGetProject)null,
102+
nuGetProjectActions,
103+
nuGetProjectContext,
104+
sourceCacheContext,
105+
token);
106+
}
107+
87108
public NuGetVersion LatestVersion = new NuGetVersion ("1.2.3");
88109
public string GetLatestVersionPackageId;
89110
public NuGetProject GetLatestVersionProject;
@@ -203,6 +224,30 @@ public Task<IEnumerable<NuGetProjectAction>> PreviewUpdatePackagesAsync (
203224
);
204225
}
205226

227+
public List<PackageIdentity> PreviewUpdatePackages;
228+
public List<NuGetProject> PreviewUpdateProjects;
229+
230+
public Task<IEnumerable<NuGetProjectAction>> PreviewUpdatePackagesAsync (
231+
List<PackageIdentity> packageIdentities,
232+
IEnumerable<NuGetProject> nuGetProjects,
233+
ResolutionContext resolutionContext,
234+
INuGetProjectContext nuGetProjectContext,
235+
IEnumerable<SourceRepository> primarySources,
236+
IEnumerable<SourceRepository> secondarySources,
237+
CancellationToken token)
238+
{
239+
PreviewUpdatePackages = packageIdentities;
240+
PreviewUpdateProjects = nuGetProjects.ToList ();
241+
242+
return PreviewUpdatePackagesAsync (
243+
null,
244+
resolutionContext,
245+
nuGetProjectContext,
246+
primarySources,
247+
secondarySources,
248+
token);
249+
}
250+
206251
public void AddPackageToPackagesFolder (string packageId, string version)
207252
{
208253
var package = new PackageIdentity (packageId, new NuGetVersion (version));
@@ -239,6 +284,7 @@ public Task<IEnumerable<NuGetProjectAction>> PreviewUninstallPackageAsync (
239284
}
240285

241286
public NuGetProject OpenReadmeFilesForProject;
287+
public List<NuGetProject> OpenReadmeFilesForProjects;
242288
public List<PackageIdentity> OpenReadmeFilesForPackages;
243289
public INuGetProjectContext OpenReadmeFilesWithProjectContext;
244290
public CancellationToken OpenReadmeFilesWithCancellationToken;
@@ -257,6 +303,20 @@ public Task OpenReadmeFiles (
257303
return Task.FromResult (0);
258304
}
259305

306+
public Task OpenReadmeFiles (
307+
IEnumerable<NuGetProject> projects,
308+
IEnumerable<PackageIdentity> packages,
309+
INuGetProjectContext nuGetProjectContext,
310+
CancellationToken token)
311+
{
312+
OpenReadmeFilesForProjects = projects.ToList ();
313+
OpenReadmeFilesForPackages = packages.ToList ();
314+
OpenReadmeFilesWithProjectContext = nuGetProjectContext;
315+
OpenReadmeFilesWithCancellationToken = token;
316+
317+
return Task.FromResult (0);
318+
}
319+
260320
public IBuildIntegratedNuGetProject PreviewBuildIntegratedProject;
261321
public List<NuGetProjectAction> PreviewBuildIntegratedProjectActions;
262322
public INuGetProjectContext PreviewBuildIntegratedContext;
@@ -278,6 +338,20 @@ public Task<BuildIntegratedProjectAction> PreviewBuildIntegratedProjectActionsAs
278338

279339
return Task.FromResult (BuildIntegratedProjectAction);
280340
}
341+
342+
public INuGetProjectContext RunPostProcessAsyncProjectContext;
343+
public List<NuGetProject> RunPostProcessAsyncProjects;
344+
345+
public Task RunPostProcessAsync (
346+
List<NuGetProject> nuGetProjects,
347+
INuGetProjectContext nuGetProjectContext,
348+
CancellationToken token)
349+
{
350+
RunPostProcessAsyncProjectContext = nuGetProjectContext;
351+
RunPostProcessAsyncProjects = nuGetProjects;
352+
353+
return Task.CompletedTask;
354+
}
281355
}
282356
}
283357

main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/FakeNuGetProjectAction.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
using NuGet.PackageManagement;
2828
using NuGet.Packaging.Core;
29+
using NuGet.ProjectManagement;
2930
using NuGet.Versioning;
3031

3132
namespace MonoDevelop.PackageManagement.Tests.Helpers
@@ -43,6 +44,18 @@ public FakeNuGetProjectAction (
4344
{
4445
}
4546

47+
public FakeNuGetProjectAction (
48+
NuGetProject project,
49+
string packageId,
50+
string packageVersion,
51+
NuGetProjectActionType actionType)
52+
: base (
53+
CreatePackageIdentity (packageId, packageVersion),
54+
actionType,
55+
project)
56+
{
57+
}
58+
4659
static PackageIdentity CreatePackageIdentity (string packageId, string packageVersion)
4760
{
4861
NuGetVersion nuGetVersion = null;

main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/FakeNuGetProjectContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ public FileConflictAction ResolveFileConflict (string message)
7272

7373
public void Log (ILogMessage message)
7474
{
75+
if (LogToConsole)
76+
Console.WriteLine (message.Message);
7577
}
7678

7779
public void ReportError (ILogMessage message)

main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/FakePackageRestoreManager.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,16 @@ public void EnableCurrentSolutionForRestore (bool fromActivation)
7777
new Dictionary<string, List<PackageRestoreData>> ();
7878

7979
public void AddUnrestoredPackageForProject (string projectName, string solutionDirectory)
80+
{
81+
AddPackageForProject (projectName, solutionDirectory, isMissing: true);
82+
}
83+
84+
public void AddRestoredPackageForProject (string projectName, string solutionDirectory)
85+
{
86+
AddPackageForProject (projectName, solutionDirectory, isMissing: false);
87+
}
88+
89+
public void AddPackageForProject (string projectName, string solutionDirectory, bool isMissing)
8090
{
8191
var packageReference = new PackageReference (
8292
new PackageIdentity ("Test", new NuGetVersion ("1.0")),
@@ -85,11 +95,11 @@ public void AddUnrestoredPackageForProject (string projectName, string solutionD
8595
var restoreData = new PackageRestoreData (
8696
packageReference,
8797
new [] { projectName },
88-
isMissing: true);
98+
isMissing);
8999

90100
var restoreDataList = new List<PackageRestoreData> ();
91101
restoreDataList.Add (restoreData);
92-
PackagesInSolution[solutionDirectory] = restoreDataList;
102+
PackagesInSolution [solutionDirectory] = restoreDataList;
93103
}
94104

95105
public Task<IEnumerable<PackageRestoreData>> GetPackagesInSolutionAsync (
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
//
2+
// TestableUpdateMultipleNuGetPackagesAction.cs
3+
//
4+
// Author:
5+
// Matt Ward <[email protected]>
6+
//
7+
// Copyright (c) 2019 Microsoft Corporation
8+
//
9+
// Permission is hereby granted, free of charge, to any person obtaining a copy
10+
// of this software and associated documentation files (the "Software"), to deal
11+
// in the Software without restriction, including without limitation the rights
12+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13+
// copies of the Software, and to permit persons to whom the Software is
14+
// furnished to do so, subject to the following conditions:
15+
//
16+
// The above copyright notice and this permission notice shall be included in
17+
// all copies or substantial portions of the Software.
18+
//
19+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25+
// THE SOFTWARE.
26+
27+
using System.Collections.Generic;
28+
using NuGet.Protocol.Core.Types;
29+
30+
namespace MonoDevelop.PackageManagement.Tests.Helpers
31+
{
32+
class TestableUpdateMultipleNuGetPackagesAction : UpdateMultipleNuGetPackagesAction
33+
{
34+
public FakeNuGetProjectContext ProjectContext;
35+
public FakeNuGetPackageManager PackageManager;
36+
public FakePackageRestoreManager RestoreManager;
37+
public PackageManagementEvents PackageManagementEvents;
38+
public FakeLicenseAcceptanceService LicenseAcceptanceService = new FakeLicenseAcceptanceService ();
39+
public FakeFileRemover FileRemover = new FakeFileRemover ();
40+
41+
public TestableUpdateMultipleNuGetPackagesAction (
42+
IEnumerable<SourceRepository> primarySources,
43+
FakeSolutionManager solutionManager)
44+
: this (
45+
primarySources,
46+
solutionManager,
47+
new FakeNuGetProjectContext (),
48+
new FakeNuGetPackageManager (),
49+
new FakePackageRestoreManager (),
50+
new PackageManagementEvents ())
51+
{
52+
}
53+
54+
public TestableUpdateMultipleNuGetPackagesAction (
55+
IEnumerable<SourceRepository> primarySources,
56+
FakeSolutionManager solutionManager,
57+
FakeNuGetProjectContext projectContext,
58+
FakeNuGetPackageManager packageManager,
59+
FakePackageRestoreManager restoreManager,
60+
PackageManagementEvents packageManagementEvents)
61+
: base (
62+
primarySources,
63+
solutionManager,
64+
projectContext,
65+
packageManager,
66+
restoreManager,
67+
packageManagementEvents)
68+
{
69+
ProjectContext = projectContext;
70+
PackageManager = packageManager;
71+
RestoreManager = restoreManager;
72+
73+
PackageManagementEvents = packageManagementEvents;
74+
}
75+
76+
protected override ILicenseAcceptanceService GetLicenseAcceptanceService ()
77+
{
78+
return LicenseAcceptanceService;
79+
}
80+
81+
protected override IFileRemover GetFileRemover ()
82+
{
83+
return FileRemover;
84+
}
85+
}
86+
}

main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@
156156
<Compile Include="MonoDevelop.PackageManagement.Tests.Helpers\TestableManagePackagesViewModel.cs" />
157157
<Compile Include="MonoDevelop.PackageManagement.Tests\PackageManagementCanReferenceProjectExtensionTests.cs" />
158158
<Compile Include="MonoDevelop.PackageManagement.Tests\PackageLoadContextTests.cs" />
159+
<Compile Include="MonoDevelop.PackageManagement.Tests\UpdateStrictPackageDependenciesTests.cs" />
160+
<Compile Include="MonoDevelop.PackageManagement.Tests\UpdateMultipleNuGetPackagesActionTests.cs" />
161+
<Compile Include="MonoDevelop.PackageManagement.Tests.Helpers\TestableUpdateMultipleNuGetPackagesAction.cs" />
159162
</ItemGroup>
160163
<ItemGroup>
161164
<ProjectReference Include="..\..\..\core\MonoDevelop.Core\MonoDevelop.Core.csproj">

0 commit comments

Comments
 (0)