You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.4 KiB
93 lines
2.4 KiB
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) |
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) |
|
|
|
using System; |
|
using ICSharpCode.SharpDevelop.Project; |
|
using NuGet; |
|
|
|
namespace ICSharpCode.PackageManagement |
|
{ |
|
public abstract class ProcessPackageAction |
|
{ |
|
IPackageManagementSolution solution; |
|
IPackageManagementEvents packageManagementEvents; |
|
|
|
public ProcessPackageAction( |
|
IPackageManagementSolution solution, |
|
IPackageManagementEvents packageManagementEvents) |
|
{ |
|
this.solution = solution; |
|
this.packageManagementEvents = packageManagementEvents; |
|
} |
|
|
|
public ISharpDevelopPackageManager PackageManager { get; set; } |
|
public ILogger Logger { get; set; } |
|
public IPackage Package { get; set; } |
|
public Version PackageVersion { get; set; } |
|
public string PackageId { get; set; } |
|
public IPackageRepository PackageRepository { get; set; } |
|
public PackageSource PackageSource { get; set; } |
|
public MSBuildBasedProject Project { get; set; } |
|
|
|
protected void OnParentPackageInstalled() |
|
{ |
|
packageManagementEvents.OnParentPackageInstalled(Package); |
|
} |
|
|
|
protected void OnParentPackageUninstalled() |
|
{ |
|
packageManagementEvents.OnParentPackageUninstalled(Package); |
|
} |
|
|
|
public void Execute() |
|
{ |
|
BeforeExecute(); |
|
ExecuteCore(); |
|
} |
|
|
|
protected virtual void BeforeExecute() |
|
{ |
|
GetLoggerIfMissing(); |
|
CreatePackageManager(); |
|
ConfigurePackageManagerLogger(); |
|
GetPackageIfMissing(); |
|
} |
|
|
|
protected virtual void ExecuteCore() |
|
{ |
|
} |
|
|
|
void GetLoggerIfMissing() |
|
{ |
|
if (Logger == null) { |
|
Logger = new PackageManagementLogger(packageManagementEvents); |
|
} |
|
} |
|
|
|
void CreatePackageManager() |
|
{ |
|
if (PackageRepository == null) { |
|
PackageManager = solution.CreatePackageManager(PackageSource, Project); |
|
} else { |
|
PackageManager = solution.CreatePackageManagerForActiveProject(PackageRepository); |
|
} |
|
} |
|
|
|
void ConfigurePackageManagerLogger() |
|
{ |
|
PackageManager.Logger = Logger; |
|
PackageManager.FileSystem.Logger = Logger; |
|
|
|
IProjectManager projectManager = PackageManager.ProjectManager; |
|
projectManager.Logger = Logger; |
|
projectManager.Project.Logger = Logger; |
|
} |
|
|
|
void GetPackageIfMissing() |
|
{ |
|
if (Package == null) { |
|
Package = PackageManager.SourceRepository.FindPackage(PackageId, PackageVersion); |
|
} |
|
} |
|
} |
|
}
|
|
|