Browse Source

Implement Get-VSComponentModel cmdlet and IVsPackageInstallerServices.

Allows EntityFramework Enable-Migrations command to get the installed NuGet packages.
pull/28/head
Matt Ward 13 years ago
parent
commit
ea9b39b01f
  1. 1
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj
  2. 26
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetVSComponentModelCmdlet.cs
  3. 4
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetProjectCmdletTests.cs
  4. 5
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  5. 5
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs
  6. 1
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementSolution.cs
  7. 6
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs
  8. 19
      src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/ComponentModel.cs
  9. 13
      src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/IVsPackageInstallerServices.cs
  10. 10
      src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/IVsPackageMetadata.cs
  11. 33
      src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/VsPackageInstallerServices.cs
  12. 30
      src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/VsPackageMetadata.cs
  13. 1
      src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/SharpDevelop.EnvDTE.vbproj
  14. 8
      src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/VisualStudio/IComponentModel.vb
  15. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  16. 14
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs
  17. 16
      src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/ComponentModelTests.cs
  18. 66
      src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/VsPackageInstallerServicesTests.cs

1
src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj

@ -46,6 +46,7 @@ @@ -46,6 +46,7 @@
<Compile Include="Src\CmdletTerminatingError.cs" />
<Compile Include="Src\GetPackageCmdlet.cs" />
<Compile Include="Src\GetProjectCmdlet.cs" />
<Compile Include="Src\GetVSComponentModelCmdlet.cs" />
<Compile Include="Src\ICmdletTerminatingError.cs" />
<Compile Include="Src\InstallPackageCmdlet.cs" />
<Compile Include="Src\InvokeInitializePackagesCmdlet.cs" />

26
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetVSComponentModelCmdlet.cs

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
// 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 System.Management.Automation;
using ICSharpCode.PackageManagement.Scripting;
using Microsoft.VisualStudio.ComponentModelHost;
using Microsoft.VisualStudio.Shell;
namespace ICSharpCode.PackageManagement.Cmdlets
{
[Cmdlet(VerbsCommon.Get, "VSComponentModel")]
[OutputType(typeof(IComponentModel))]
public class GetVSComponentModelCmdlet : PSCmdlet
{
public GetVSComponentModelCmdlet()
{
}
protected override void ProcessRecord()
{
object service = Package.GetGlobalService(typeof(SComponentModel));
WriteObject(service);
}
}
}

4
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetProjectCmdletTests.cs

@ -63,7 +63,7 @@ namespace PackageManagement.Cmdlets.Tests @@ -63,7 +63,7 @@ namespace PackageManagement.Cmdlets.Tests
expectedProjectNames.Add(testableProject.Name);
}
var actualProjectNames = new List<string>();
var actualProjectNames = new List<string>();
foreach (Project project in actualProjects) {
actualProjectNames.Add(project.Name);
}
@ -219,7 +219,7 @@ namespace PackageManagement.Cmdlets.Tests @@ -219,7 +219,7 @@ namespace PackageManagement.Cmdlets.Tests
projectC
};
ProjectCollectionAssertAreEqual(expectedProjects, projects);
ProjectCollectionAssertAreEqual(expectedProjects, projects);
}
}
}

5
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -457,7 +457,8 @@ @@ -457,7 +457,8 @@
<Compile Include="Src\PackageManagementViewModels.cs" />
<Compile Include="Src\VisualStudio\ComponentModel.cs" />
<Compile Include="Src\VisualStudio\FlavoredProject.cs" />
<Compile Include="Src\VisualStudio\IComponentModel.cs" />
<Compile Include="Src\VisualStudio\IVsPackageInstallerServices.cs" />
<Compile Include="Src\VisualStudio\IVsPackageMetadata.cs" />
<Compile Include="Src\VisualStudio\NotInstalledException.cs" />
<Compile Include="Src\VisualStudio\Package.cs" />
<Compile Include="Src\VisualStudio\SComponentModel.cs" />
@ -466,6 +467,8 @@ @@ -466,6 +467,8 @@
<Compile Include="Src\VisualStudio\SVsExtensionManager.cs" />
<Compile Include="Src\VisualStudio\ThreadHelper.cs" />
<Compile Include="Src\VisualStudio\VsConstants.cs" />
<Compile Include="Src\VisualStudio\VsPackageInstallerServices.cs" />
<Compile Include="Src\VisualStudio\VsPackageMetadata.cs" />
<Compile Include="Src\VisualStudio\VsSolution.cs" />
</ItemGroup>
<ItemGroup>

5
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs

@ -172,5 +172,10 @@ namespace ICSharpCode.PackageManagement.Design @@ -172,5 +172,10 @@ namespace ICSharpCode.PackageManagement.Design
FakeInstalledPackages.Add(package);
return package;
}
public string GetInstallPath(IPackage package)
{
throw new NotImplementedException();
}
}
}

1
src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementSolution.cs

@ -26,6 +26,7 @@ namespace ICSharpCode.PackageManagement @@ -26,6 +26,7 @@ namespace ICSharpCode.PackageManagement
bool IsPackageInstalled(IPackage package);
IQueryable<IPackage> GetPackages();
IEnumerable<IPackage> GetPackagesInReverseDependencyOrder();
string GetInstallPath(IPackage package);
bool IsOpen { get; }
string FileName { get; }

6
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs

@ -155,6 +155,12 @@ namespace ICSharpCode.PackageManagement @@ -155,6 +155,12 @@ namespace ICSharpCode.PackageManagement
return repository.GetPackages();
}
public string GetInstallPath(IPackage package)
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
return repository.GetInstallPath(package);
}
public IEnumerable<IPackage> GetPackagesInReverseDependencyOrder()
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();

19
src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/ComponentModel.cs

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
using System;
using ICSharpCode.PackageManagement.Scripting;
using Microsoft.VisualStudio.ComponentModelHost;
using NuGet.VisualStudio;
using NuGetConsole;
namespace ICSharpCode.PackageManagement.VisualStudio
@ -11,10 +12,12 @@ namespace ICSharpCode.PackageManagement.VisualStudio @@ -11,10 +12,12 @@ namespace ICSharpCode.PackageManagement.VisualStudio
public class ComponentModel : SComponentModel, IComponentModel
{
IPackageManagementConsoleHost consoleHost;
IPackageManagementSolution solution;
public ComponentModel(IPackageManagementConsoleHost consoleHost)
public ComponentModel(IPackageManagementConsoleHost consoleHost, IPackageManagementSolution solution)
{
this.consoleHost = consoleHost;
this.solution = solution;
}
public ComponentModel()
@ -27,20 +30,30 @@ namespace ICSharpCode.PackageManagement.VisualStudio @@ -27,20 +30,30 @@ namespace ICSharpCode.PackageManagement.VisualStudio
return GetService(typeof(T)) as T;
}
object GetService(Type type)
public object GetService(Type type)
{
if (type.FullName == typeof(IConsoleInitializer).FullName) {
return new ConsoleInitializer(GetConsoleHost());
} else if (type.FullName == typeof(IVsPackageInstallerServices).FullName) {
return new VsPackageInstallerServices(GetSolution());
}
return null;
}
protected virtual IPackageManagementConsoleHost GetConsoleHost()
IPackageManagementConsoleHost GetConsoleHost()
{
if (consoleHost != null) {
return consoleHost;
}
return PackageManagementServices.ConsoleHost;
}
IPackageManagementSolution GetSolution()
{
if (solution != null) {
return solution;
}
return PackageManagementServices.Solution;
}
}
}

13
src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/IVsPackageInstallerServices.cs

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
// 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 System.Collections.Generic;
namespace NuGet.VisualStudio
{
public interface IVsPackageInstallerServices
{
IEnumerable<IVsPackageMetadata> GetInstalledPackages();
}
}

10
src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/IComponentModel.cs → src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/IVsPackageMetadata.cs

@ -2,12 +2,14 @@ @@ -2,12 +2,14 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using NuGet;
namespace Microsoft.VisualStudio.ComponentModelHost
namespace NuGet.VisualStudio
{
public interface IComponentModel
public interface IVsPackageMetadata
{
T GetService<T>()
where T : class;
string Id { get; }
SemanticVersion Version { get; }
string InstallPath { get; }
}
}

33
src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/VsPackageInstallerServices.cs

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
// 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 System.Collections.Generic;
using NuGet;
using NuGet.VisualStudio;
namespace ICSharpCode.PackageManagement.VisualStudio
{
public class VsPackageInstallerServices : IVsPackageInstallerServices
{
IPackageManagementSolution solution;
public VsPackageInstallerServices()
: this(PackageManagementServices.Solution)
{
}
public VsPackageInstallerServices(IPackageManagementSolution solution)
{
this.solution = solution;
}
public IEnumerable<IVsPackageMetadata> GetInstalledPackages()
{
foreach (IPackage package in solution.GetPackages()) {
string installPath = solution.GetInstallPath(package);
yield return new VsPackageMetadata(package, installPath);
}
}
}
}

30
src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/VsPackageMetadata.cs

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
// 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 NuGet;
using NuGet.VisualStudio;
namespace ICSharpCode.PackageManagement.VisualStudio
{
public class VsPackageMetadata : IVsPackageMetadata
{
IPackage package;
public VsPackageMetadata(IPackage package, string installPath)
{
this.package = package;
this.InstallPath = installPath;
}
public string Id {
get { return package.Id; }
}
public SemanticVersion Version {
get { return package.Version; }
}
public string InstallPath { get; private set; }
}
}

1
src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/SharpDevelop.EnvDTE.vbproj

@ -103,6 +103,7 @@ @@ -103,6 +103,7 @@
<Compile Include="Src\SourceControl.vb" />
<Compile Include="Src\TextDocument.vb" />
<Compile Include="Src\TextPoint.vb" />
<Compile Include="Src\VisualStudio\IComponentModel.vb" />
<Compile Include="Src\VisualStudio\IVsAggregatableProject.vb" />
<Compile Include="Src\VisualStudio\IVsHierarchy.vb" />
<Compile Include="Src\VisualStudio\IVsSolution.vb" />

8
src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/VisualStudio/IComponentModel.vb

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
' 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)
Namespace Microsoft.VisualStudio.ComponentModelHost
Public Interface IComponentModel
Function GetService(Of T As Class) As T
End Interface
End Namespace

1
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -329,6 +329,7 @@ @@ -329,6 +329,7 @@
<Compile Include="Src\VisualStudio\FlavoredProjectTests.cs" />
<Compile Include="Src\VisualStudio\PackageTests.cs" />
<Compile Include="Src\VisualStudio\SVsExtensionManagerTests.cs" />
<Compile Include="Src\VisualStudio\VsPackageInstallerServicesTests.cs" />
<Compile Include="Src\VisualStudio\VsSolutionTests.cs" />
</ItemGroup>
<ItemGroup>

14
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs

@ -539,5 +539,19 @@ namespace PackageManagement.Tests @@ -539,5 +539,19 @@ namespace PackageManagement.Tests
Assert.AreEqual(2, projects.Count);
}
[Test]
public void GetInstallPath_OnePackageInSolutionRepository_ReturnsPackageInstallPath()
{
CreateSolution();
FakePackage package = FakePackage.CreatePackageWithVersion("Test", "1.3.4.5");
string expectedInstallPath = @"d:\projects\MyProject\packages\TestPackage";
fakeSolutionPackageRepository.InstallPathToReturn = expectedInstallPath;
string installPath = solution.GetInstallPath(package);
Assert.AreEqual(expectedInstallPath, installPath);
Assert.AreEqual(package, fakeSolutionPackageRepository.PackagePassedToGetInstallPath);
}
}
}

16
src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/ComponentModelTests.cs

@ -2,7 +2,9 @@ @@ -2,7 +2,9 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.PackageManagement.Design;
using ICSharpCode.PackageManagement.VisualStudio;
using NuGet.VisualStudio;
using NuGetConsole;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
@ -14,11 +16,13 @@ namespace PackageManagement.Tests.VisualStudio @@ -14,11 +16,13 @@ namespace PackageManagement.Tests.VisualStudio
{
ComponentModel model;
FakePackageManagementConsoleHost fakeConsoleHost;
FakePackageManagementSolution fakeSolution;
void CreateComponentModel()
{
fakeConsoleHost = new FakePackageManagementConsoleHost();
model = new ComponentModel(fakeConsoleHost);
fakeSolution = new FakePackageManagementSolution();
model = new ComponentModel(fakeConsoleHost, fakeSolution);
}
[Test]
@ -30,5 +34,15 @@ namespace PackageManagement.Tests.VisualStudio @@ -30,5 +34,15 @@ namespace PackageManagement.Tests.VisualStudio
Assert.IsNotNull(initializer);
}
[Test]
public void GetService_GetIVsPackageInstallerServices_ReturnsVsPackageInstallerServices()
{
CreateComponentModel();
IVsPackageInstallerServices installer = model.GetService<IVsPackageInstallerServices>();
Assert.IsNotNull(installer);
}
}
}

66
src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/VsPackageInstallerServicesTests.cs

@ -0,0 +1,66 @@ @@ -0,0 +1,66 @@
// 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 System.Collections.Generic;
using System.Linq;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using ICSharpCode.PackageManagement.VisualStudio;
using NuGet;
using NuGet.VisualStudio;
using NUnit.Framework;
using Rhino.Mocks;
namespace PackageManagement.Tests.VisualStudio
{
[TestFixture]
public class VsPackageInstallerServicesTests
{
VsPackageInstallerServices installerServices;
IPackageManagementSolution fakeSolution;
List<IPackage> installedPackages;
void CreatePackageInstallerServices()
{
fakeSolution = MockRepository.GenerateStub<IPackageManagementSolution>();
installedPackages = new List<IPackage>();
fakeSolution.Stub(s => s.GetPackages()).Return(installedPackages.AsQueryable());
installerServices = new VsPackageInstallerServices(fakeSolution);
}
[Test]
public void GetInstalledPackages_NoInstalledPackages_ReturnsNoPackages()
{
CreatePackageInstallerServices();
List<IVsPackageMetadata> packages = installerServices.GetInstalledPackages().ToList();
Assert.AreEqual(0, packages.Count);
}
[Test]
public void GetInstalledPackages_OneInstalledPackages_ReturnsOnePackage()
{
CreatePackageInstallerServices();
string installPath = @"d:\projects\MyProject\packages\TestPackage";
IPackage installedPackage = AddPackage("Id", "1.1", installPath);
List<IVsPackageMetadata> packages = installerServices.GetInstalledPackages().ToList();
IVsPackageMetadata package = packages[0];
Assert.AreEqual(1, packages.Count);
Assert.AreEqual("Id", package.Id);
Assert.AreEqual("1.1", package.Version.ToString());
Assert.AreEqual(@"d:\projects\MyProject\packages\TestPackage", package.InstallPath);
}
IPackage AddPackage(string id, string version, string installPath)
{
var package = new FakePackage(id, version);
installedPackages.Add(package);
fakeSolution.Stub(s => s.GetInstallPath(package)).Return(installPath);
return package;
}
}
}
Loading…
Cancel
Save