Browse Source

Support restoring NuGet packages.

Add Restore Packages menu item which executes "NuGet.exe restore"
to restore all packages in the solution.
pull/62/merge
Matt Ward 12 years ago
parent
commit
e2b05442f7
  1. 28
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.addin
  2. 4
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  3. 13
      src/AddIns/Misc/PackageManagement/Project/PostBuildEvent.proj
  4. 1
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementOutputMessagesView.cs
  5. 21
      src/AddIns/Misc/PackageManagement/Project/Src/NuGetExePath.cs
  6. 34
      src/AddIns/Misc/PackageManagement/Project/Src/NuGetPackageRestoreCommandLine.cs
  7. 7
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOutputMessagesView.cs
  8. 78
      src/AddIns/Misc/PackageManagement/Project/Src/RestorePackagesCommand.cs
  9. BIN
      src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe
  10. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  11. 4
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementOutputMessagesView.cs
  12. 44
      src/AddIns/Misc/PackageManagement/Test/Src/NuGetPackageRestoreCommandLineTests.cs
  13. 3
      src/Setup/Files.wxs
  14. 1
      src/Setup/Setup.wxs

28
src/AddIns/Misc/PackageManagement/Project/PackageManagement.addin

@ -23,7 +23,13 @@ @@ -23,7 +23,13 @@
label="Manage Packages..."
insertafter="AddWebReference"
insertbefore="ShowServiceInBrowser"
class="ICSharpCode.PackageManagement.ManagePackagesCommand"/>
class="ICSharpCode.PackageManagement.ManagePackagesCommand"/>
<MenuItem
id="RestorePackages"
label="Restore Packages"
insertafter="AddWebReference"
insertbefore="ShowServiceInBrowser"
class="ICSharpCode.PackageManagement.RestorePackagesCommand"/>
</Condition>
</Path>
@ -36,6 +42,12 @@ @@ -36,6 +42,12 @@
insertafter="AddWebReference"
insertbefore="AddSeparator"
class="ICSharpCode.PackageManagement.ManagePackagesCommand"/>
<MenuItem
id="RestorePackages"
label="Restore Packages"
insertafter="AddWebReference"
insertbefore="AddSeparator"
class="ICSharpCode.PackageManagement.RestorePackagesCommand"/>
</Condition>
</Path>
@ -47,7 +59,13 @@ @@ -47,7 +59,13 @@
label="Manage Packages..."
insertafter="AddWebReference"
insertbefore="AddSeparator"
class="ICSharpCode.PackageManagement.ManagePackagesCommand"/>
class="ICSharpCode.PackageManagement.ManagePackagesCommand"/>
<MenuItem
id="RestorePackages"
label="Restore Packages"
insertafter="AddWebReference"
insertbefore="AddSeparator"
class="ICSharpCode.PackageManagement.RestorePackagesCommand"/>
</Condition>
</Path>
@ -60,6 +78,12 @@ @@ -60,6 +78,12 @@
insertafter="CombineAddMenu"
insertbefore="AddSeparator"
class="ICSharpCode.PackageManagement.ManagePackagesCommand"/>
<MenuItem
id="RestorePackagesForSolution"
label="Restore Packages"
insertafter="CombineAddMenu"
insertbefore="AddSeparator"
class="ICSharpCode.PackageManagement.RestorePackagesCommand"/>
</Condition>
</Path>

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

@ -236,6 +236,8 @@ @@ -236,6 +236,8 @@
<Compile Include="Src\ManagePackagesViewTitle.cs" />
<Compile Include="Src\MSBuildBasedProjectExtensions.cs" />
<Compile Include="Src\IPackageFromRepositoryExtensions.cs" />
<Compile Include="Src\NuGetExePath.cs" />
<Compile Include="Src\NuGetPackageRestoreCommandLine.cs" />
<Compile Include="Src\PackageLicenseViewModel.cs" />
<Compile Include="Src\PackageManagementServiceProvider.cs" />
<Compile Include="Src\IPackageRepositoryExtensions.cs" />
@ -245,6 +247,7 @@ @@ -245,6 +247,7 @@
<Compile Include="Src\ProjectRootElementExtensions.cs" />
<Compile Include="Src\ReducedPackageOperations.cs" />
<Compile Include="Src\ResolveFileConflictEventArgs.cs" />
<Compile Include="Src\RestorePackagesCommand.cs" />
<Compile Include="Src\Scripting\ConsoleHostFileConflictResolver.cs" />
<Compile Include="Src\Scripting\FileConflictAction.cs" />
<Compile Include="Src\Scripting\GlobalMSBuildProjectCollection.cs" />
@ -605,4 +608,5 @@ @@ -605,4 +608,5 @@
<None Include="Resources\license.txt" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
<Import Project="PostBuildEvent.proj" />
</Project>

13
src/AddIns/Misc/PackageManagement/Project/PostBuildEvent.proj

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PrepareForRunDependsOn>$(PrepareForRunDependsOn);MyPostBuildTarget</PrepareForRunDependsOn>
</PropertyGroup>
<ItemGroup>
<MyCopyItem Include="$(MSBuildProjectDirectory)\..\RequiredLibraries\NuGet.exe" />
</ItemGroup>
<Target Name="MyPostBuildTarget">
<!-- work around an MSBuild bug in CopyToOutputDirectory that causes this file to be copied -->
<!-- to projects referencing this project even if local copy on that reference is false -->
<Copy SourceFiles="@(MyCopyItem)" DestinationFolder="$(OutputPath)" />
</Target>
</Project>

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

@ -9,5 +9,6 @@ namespace ICSharpCode.PackageManagement @@ -9,5 +9,6 @@ namespace ICSharpCode.PackageManagement
public interface IPackageManagementOutputMessagesView
{
void Clear();
void AppendLine(string message);
}
}

21
src/AddIns/Misc/PackageManagement/Project/Src/NuGetExePath.cs

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
// 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.IO;
namespace ICSharpCode.PackageManagement
{
public static class NuGetExePath
{
public static string GetPath()
{
return Path.Combine(GetDirectory(), "NuGet.exe");
}
static string GetDirectory()
{
return Path.GetDirectoryName(typeof(NuGetExePath).Assembly.Location);
}
}
}

34
src/AddIns/Misc/PackageManagement/Project/Src/NuGetPackageRestoreCommandLine.cs

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
// 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;
namespace ICSharpCode.PackageManagement
{
public class NuGetPackageRestoreCommandLine
{
public NuGetPackageRestoreCommandLine(IPackageManagementSolution solution)
{
GenerateCommandLine(solution);
}
public string Command { get; set; }
public string Arguments { get; private set; }
void GenerateCommandLine(IPackageManagementSolution solution)
{
Arguments = String.Format("restore \"{0}\"", solution.FileName);
}
public override string ToString()
{
return String.Format("{0} {1}", GetQuotedCommand(), Arguments);
}
string GetQuotedCommand()
{
return String.Format("\"{0}\"", Command);
}
}
}

7
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOutputMessagesView.cs

@ -41,12 +41,17 @@ namespace ICSharpCode.PackageManagement @@ -41,12 +41,17 @@ namespace ICSharpCode.PackageManagement
void PackageOperationMessageLogged(object sender, PackageOperationMessageLoggedEventArgs e)
{
string formattedMessage = e.Message.ToString();
messageViewCategory.AppendLine(formattedMessage);
AppendLine(formattedMessage);
}
public void Clear()
{
messageViewCategory.Clear();
}
public void AppendLine(string message)
{
messageViewCategory.AppendLine(message);
}
}
}

78
src/AddIns/Misc/PackageManagement/Project/Src/RestorePackagesCommand.cs

@ -0,0 +1,78 @@ @@ -0,0 +1,78 @@
// 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.IO;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Util;
namespace ICSharpCode.PackageManagement
{
public class RestorePackagesCommand : AbstractMenuCommand
{
IPackageManagementOutputMessagesView outputMessagesView;
IPackageManagementSolution solution;
public RestorePackagesCommand()
: this(PackageManagementServices.OutputMessagesView, PackageManagementServices.Solution)
{
}
public RestorePackagesCommand(
IPackageManagementOutputMessagesView outputMessagesView,
IPackageManagementSolution solution)
{
this.outputMessagesView = outputMessagesView;
this.solution = solution;
}
public override void Run()
{
try {
ClearOutputWindow();
BringOutputWindowToFront();
RunRestore();
} catch (Exception ex) {
LoggingService.Debug(ex.ToString());
outputMessagesView.AppendLine(ex.Message);
}
}
void ClearOutputWindow()
{
outputMessagesView.Clear();
}
void BringOutputWindowToFront()
{
CompilerMessageView.Instance.BringToFront();
}
void RunRestore()
{
var commandLine = new NuGetPackageRestoreCommandLine(solution);
commandLine.Command = NuGetExePath.GetPath();
outputMessagesView.AppendLine(commandLine.ToString());
ProcessRunner runner = CreateProcessRunner();
runner.WorkingDirectory = Path.GetDirectoryName(solution.FileName);
runner.Start(commandLine.Command, commandLine.Arguments);
}
ProcessRunner CreateProcessRunner()
{
var runner = new ProcessRunner();
runner.LogStandardOutputAndError = false;
runner.OutputLineReceived += (sender, e) => outputMessagesView.AppendLine(e.Line);
runner.ErrorLineReceived += (sender, e) => outputMessagesView.AppendLine(e.Line);
runner.ProcessExited += (sender, e) => {
if (runner.ExitCode != 0) {
outputMessagesView.AppendLine("Exit code " + runner.ExitCode);
}
};
return runner;
}
}
}

BIN
src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe

Binary file not shown.

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

@ -199,6 +199,7 @@ @@ -199,6 +199,7 @@
<Compile Include="Src\Helpers\TestablePowerShellMissingConsoleHost.cs" />
<Compile Include="Src\InstallProjectTemplatePackagesCommandTests.cs" />
<Compile Include="Src\ManagePackagesUserPromptsTests.cs" />
<Compile Include="Src\NuGetPackageRestoreCommandLineTests.cs" />
<Compile Include="Src\OpenMSBuildProjectsTests.cs" />
<Compile Include="Src\PackageManagementServiceProviderTests.cs" />
<Compile Include="Src\PackageViewModelOperationLoggerTests.cs" />

4
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementOutputMessagesView.cs

@ -16,5 +16,9 @@ namespace PackageManagement.Tests.Helpers @@ -16,5 +16,9 @@ namespace PackageManagement.Tests.Helpers
{
IsClearCalled = true;
}
public void AppendLine(string message)
{
}
}
}

44
src/AddIns/Misc/PackageManagement/Test/Src/NuGetPackageRestoreCommandLineTests.cs

@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
// 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.PackageManagement;
using NUnit.Framework;
using Rhino.Mocks;
namespace PackageManagement.Tests
{
[TestFixture]
public class NuGetPackageRestoreCommandLineTests
{
NuGetPackageRestoreCommandLine commandLine;
void CreateCommandLineWithSolution(string fileName)
{
IPackageManagementSolution solution = MockRepository.GenerateStub<IPackageManagementSolution>();
solution.Stub(s => s.FileName).Return(fileName);
commandLine = new NuGetPackageRestoreCommandLine(solution);
}
[Test]
public void Arguments_RestoreSolution_SolutionFullFileNameUsed()
{
CreateCommandLineWithSolution(@"d:\projects\MySolution\MySolution.sln");
string arguments = commandLine.Arguments;
Assert.AreEqual("restore \"d:\\projects\\MySolution\\MySolution.sln\"", arguments);
}
[Test]
public void ToString_RestoreSolution_FullCommandLineReturned()
{
CreateCommandLineWithSolution(@"d:\projects\MySolution\MySolution.sln");
commandLine.Command = @"d:\sharpdevelop\NuGet.exe";
string fullCommandLine = commandLine.ToString();
Assert.AreEqual("\"d:\\sharpdevelop\\NuGet.exe\" restore \"d:\\projects\\MySolution\\MySolution.sln\"", fullCommandLine);
}
}
}

3
src/Setup/Files.wxs

@ -1681,6 +1681,9 @@ @@ -1681,6 +1681,9 @@
<Component Id="MicrosoftWebXmlTransformDll" Guid="0A82C51B-E2D1-4817-8704-2CB390B4E833" DiskId="1">
<File Id="Microsoft.Web.XmlTransform.dll" Name="Microsoft.Web.XmlTransform.dll" Source="..\..\AddIns\Misc\PackageManagement\Microsoft.Web.XmlTransform.dll" KeyPath="yes" Assembly=".net" AssemblyApplication="Microsoft.Web.XmlTransform.dll" AssemblyManifest="Microsoft.Web.XmlTransform.dll" />
</Component>
<Component Id="NuGetExe" Guid="47FD372D-7F53-4466-B648-F674C64ED98B" DiskId="1">
<File Id="NuGet.exe" Name="NuGet.exe" Source="..\..\AddIns\Misc\PackageManagement\NuGet.exe" KeyPath="yes" Assembly=".net" AssemblyApplication="NuGet.exe" AssemblyManifest="NuGet.exe" />
</Component>
</Directory>
<Directory Id="TextTemplating" Name="TextTemplating">
<Component Id="MonoTextTemplatingDll" Guid="07BFBED7-FC7B-4CF3-BD00-DCA8E8E7C17B" DiskId="1">

1
src/Setup/Setup.wxs

@ -482,6 +482,7 @@ @@ -482,6 +482,7 @@
<ComponentRef Id="AboutNuGetCmdletsHelpTxt"/>
<ComponentRef Id="NuGetConsoleTypesDll"/>
<ComponentRef Id="NuGetCoreDll"/>
<ComponentRef Id="NuGetExe"/>
<ComponentRef Id="NuGetNuspecSchema"/>
<ComponentRef Id="NuGetLicenseTxt"/>
<ComponentRef Id="PackageFormatPs1Xml"/>

Loading…
Cancel
Save