1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
5
using System.Management.Automation;
6
using ICSharpCode.PackageManagement.Scripting;
7
using ICSharpCode.SharpDevelop.Project;
10
namespace ICSharpCode.PackageManagement.Cmdlets
12
[Cmdlet(VerbsData.Update, "Package", DefaultParameterSetName = "All")]
13
public class UpdatePackageCmdlet : PackageManagementCmdlet
15
IUpdatePackageActionsFactory updatePackageActionsFactory;
17
public UpdatePackageCmdlet()
19
new UpdatePackageActionsFactory(),
20
PackageManagementServices.ConsoleHost,
25
public UpdatePackageCmdlet(
26
IUpdatePackageActionsFactory updatePackageActionsFactory,
27
IPackageManagementConsoleHost consoleHost,
28
ICmdletTerminatingError terminatingError)
29
: base(consoleHost, terminatingError)
31
this.updatePackageActionsFactory = updatePackageActionsFactory;
34
[Parameter(Position = 0, Mandatory = true, ParameterSetName = "Project")]
35
[Parameter(Position = 0, ParameterSetName = "All")]
36
public string Id { get; set; }
38
[Parameter(Position = 1, ParameterSetName = "Project")]
39
[Parameter(Position = 1, ParameterSetName = "All")]
40
public string ProjectName { get; set; }
42
[Parameter(Position = 2, ParameterSetName = "Project")]
43
public Version Version { get; set; }
45
[Parameter(Position = 3)]
46
public string Source { get; set; }
49
public SwitchParameter IgnoreDependencies { get; set; }
51
protected override void ProcessRecord()
53
ThrowErrorIfProjectNotOpen();
55
if (HasProjectName()) {
56
UpdatePackageInSingleProject();
58
UpdatePackageInAllProjects();
61
if (HasProjectName()) {
62
UpdateAllPackagesInProject();
64
UpdateAllPackagesInSolution();
71
return !String.IsNullOrEmpty(Id);
76
return !String.IsNullOrEmpty(ProjectName);
79
void UpdateAllPackagesInProject()
81
IUpdatePackageActions actions = CreateUpdateAllPackagesInProject();
85
IUpdatePackageActions CreateUpdateAllPackagesInProject()
87
IPackageManagementProject project = GetProject();
88
return updatePackageActionsFactory.CreateUpdateAllPackagesInProject(project);
91
void UpdateAllPackagesInSolution()
93
IUpdatePackageActions actions = CreateUpdateAllPackagesInSolution();
97
IUpdatePackageActions CreateUpdateAllPackagesInSolution()
99
IPackageManagementSolution solution = ConsoleHost.Solution;
100
IPackageRepository repository = GetActivePackageRepository();
101
return updatePackageActionsFactory.CreateUpdateAllPackagesInSolution(solution, repository);
104
IPackageRepository GetActivePackageRepository()
106
PackageSource packageSource = ConsoleHost.GetActivePackageSource(Source);
107
return ConsoleHost.GetPackageRepository(packageSource);
110
void UpdatePackageInSingleProject()
112
IPackageManagementProject project = GetProject();
113
UpdatePackageAction action = CreateUpdatePackageAction(project);
117
IPackageManagementProject GetProject()
119
return ConsoleHost.GetProject(Source, ProjectName);
122
UpdatePackageAction CreateUpdatePackageAction(IPackageManagementProject project)
124
UpdatePackageAction action = project.CreateUpdatePackageAction();
125
action.PackageId = Id;
126
action.PackageVersion = Version;
127
action.UpdateDependencies = UpdateDependencies;
128
action.PackageScriptRunner = this;
132
bool UpdateDependencies {
133
get { return !IgnoreDependencies.IsPresent; }
136
void RunActions(IUpdatePackageActions updateActions)
138
updateActions.UpdateDependencies = UpdateDependencies;
139
updateActions.PackageScriptRunner = this;
141
foreach (UpdatePackageAction action in updateActions.CreateActions()) {
146
void UpdatePackageInAllProjects()
148
IPackageManagementSolution solution = ConsoleHost.Solution;
149
IPackageRepository repository = GetActivePackageRepository();
150
PackageReference packageReference = CreatePackageReference();
151
IUpdatePackageActions updateActions =
152
updatePackageActionsFactory.CreateUpdatePackageInAllProjects(packageReference, solution, repository);
154
RunActions(updateActions);
157
PackageReference CreatePackageReference()
159
return new PackageReference(Id, Version, null);