~halega/+junk/sharpdevelop

« back to all changes in this revision

Viewing changes to src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs

  • Committer: sk
  • Date: 2011-09-10 05:17:57 UTC
  • Revision ID: halega@halega.com-20110910051757-qfouz1llya9m6boy
4.1.0.7915 Release Candidate 1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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)
 
3
 
 
4
using System;
 
5
using System.Management.Automation;
 
6
using ICSharpCode.PackageManagement.Scripting;
 
7
using ICSharpCode.SharpDevelop.Project;
 
8
using NuGet;
 
9
 
 
10
namespace ICSharpCode.PackageManagement.Cmdlets
 
11
{
 
12
        [Cmdlet(VerbsData.Update, "Package", DefaultParameterSetName = "All")]
 
13
        public class UpdatePackageCmdlet : PackageManagementCmdlet
 
14
        {
 
15
                IUpdatePackageActionsFactory updatePackageActionsFactory;
 
16
                
 
17
                public UpdatePackageCmdlet()
 
18
                        : this(
 
19
                                new UpdatePackageActionsFactory(),
 
20
                                PackageManagementServices.ConsoleHost,
 
21
                                null)
 
22
                {
 
23
                }
 
24
                
 
25
                public UpdatePackageCmdlet(
 
26
                        IUpdatePackageActionsFactory updatePackageActionsFactory,
 
27
                        IPackageManagementConsoleHost consoleHost,
 
28
                        ICmdletTerminatingError terminatingError)
 
29
                        : base(consoleHost, terminatingError)
 
30
                {
 
31
                        this.updatePackageActionsFactory = updatePackageActionsFactory;
 
32
                }
 
33
                
 
34
                [Parameter(Position = 0, Mandatory = true, ParameterSetName = "Project")]
 
35
                [Parameter(Position = 0, ParameterSetName = "All")]
 
36
                public string Id { get; set; }
 
37
                
 
38
                [Parameter(Position = 1, ParameterSetName = "Project")]
 
39
                [Parameter(Position = 1, ParameterSetName = "All")]
 
40
                public string ProjectName { get; set; }
 
41
                
 
42
                [Parameter(Position = 2, ParameterSetName = "Project")]
 
43
                public Version Version { get; set; }
 
44
                
 
45
                [Parameter(Position = 3)]
 
46
                public string Source { get; set; }
 
47
                
 
48
                [Parameter]
 
49
                public SwitchParameter IgnoreDependencies { get; set; }
 
50
                
 
51
                protected override void ProcessRecord()
 
52
                {
 
53
                        ThrowErrorIfProjectNotOpen();
 
54
                        if (HasPackageId()) {
 
55
                                if (HasProjectName()) {
 
56
                                        UpdatePackageInSingleProject();
 
57
                                } else {
 
58
                                        UpdatePackageInAllProjects();
 
59
                                }
 
60
                        } else {
 
61
                                if (HasProjectName()) {
 
62
                                        UpdateAllPackagesInProject();
 
63
                                } else {
 
64
                                        UpdateAllPackagesInSolution();
 
65
                                }
 
66
                        }
 
67
                }
 
68
                
 
69
                bool HasPackageId()
 
70
                {
 
71
                        return !String.IsNullOrEmpty(Id);
 
72
                }
 
73
                
 
74
                bool HasProjectName()
 
75
                {
 
76
                        return !String.IsNullOrEmpty(ProjectName);
 
77
                }
 
78
                
 
79
                void UpdateAllPackagesInProject()
 
80
                {
 
81
                        IUpdatePackageActions actions = CreateUpdateAllPackagesInProject();
 
82
                        RunActions(actions);
 
83
                }
 
84
                
 
85
                IUpdatePackageActions CreateUpdateAllPackagesInProject()
 
86
                {
 
87
                        IPackageManagementProject project = GetProject();
 
88
                        return updatePackageActionsFactory.CreateUpdateAllPackagesInProject(project);
 
89
                }
 
90
                
 
91
                void UpdateAllPackagesInSolution()
 
92
                {
 
93
                        IUpdatePackageActions actions = CreateUpdateAllPackagesInSolution();
 
94
                        RunActions(actions);
 
95
                }
 
96
                
 
97
                IUpdatePackageActions CreateUpdateAllPackagesInSolution()
 
98
                {
 
99
                        IPackageManagementSolution solution = ConsoleHost.Solution;
 
100
                        IPackageRepository repository = GetActivePackageRepository();
 
101
                        return updatePackageActionsFactory.CreateUpdateAllPackagesInSolution(solution, repository);
 
102
                }
 
103
                
 
104
                IPackageRepository GetActivePackageRepository()
 
105
                {
 
106
                        PackageSource packageSource = ConsoleHost.GetActivePackageSource(Source);
 
107
                        return ConsoleHost.GetPackageRepository(packageSource);
 
108
                }
 
109
                
 
110
                void UpdatePackageInSingleProject()
 
111
                {
 
112
                        IPackageManagementProject project = GetProject();
 
113
                        UpdatePackageAction action = CreateUpdatePackageAction(project);
 
114
                        action.Execute();
 
115
                }
 
116
                
 
117
                IPackageManagementProject GetProject()
 
118
                {
 
119
                        return ConsoleHost.GetProject(Source, ProjectName);
 
120
                }
 
121
                
 
122
                UpdatePackageAction CreateUpdatePackageAction(IPackageManagementProject project)
 
123
                {
 
124
                        UpdatePackageAction action = project.CreateUpdatePackageAction();
 
125
                        action.PackageId = Id;
 
126
                        action.PackageVersion = Version;
 
127
                        action.UpdateDependencies = UpdateDependencies;
 
128
                        action.PackageScriptRunner = this;
 
129
                        return action;
 
130
                }
 
131
                
 
132
                bool UpdateDependencies {
 
133
                        get { return !IgnoreDependencies.IsPresent; }
 
134
                }
 
135
                
 
136
                void RunActions(IUpdatePackageActions updateActions)
 
137
                {
 
138
                        updateActions.UpdateDependencies = UpdateDependencies;
 
139
                        updateActions.PackageScriptRunner = this;
 
140
                        
 
141
                        foreach (UpdatePackageAction action in updateActions.CreateActions()) {
 
142
                                action.Execute();
 
143
                        }
 
144
                }
 
145
                
 
146
                void UpdatePackageInAllProjects()
 
147
                {
 
148
                        IPackageManagementSolution solution = ConsoleHost.Solution;
 
149
                        IPackageRepository repository = GetActivePackageRepository();
 
150
                        PackageReference packageReference = CreatePackageReference();
 
151
                        IUpdatePackageActions updateActions =
 
152
                                updatePackageActionsFactory.CreateUpdatePackageInAllProjects(packageReference, solution, repository);
 
153
                        
 
154
                        RunActions(updateActions);
 
155
                }
 
156
                
 
157
                PackageReference CreatePackageReference()
 
158
                {
 
159
                        return new PackageReference(Id, Version, null);
 
160
                }
 
161
        }
 
162
}