Browse Source

Support FileConflictAction parameter in NuGet commands.

install-package jquery -FileConflictAction Overwrite
update-package jquery -FileConflictAction Ignore
pull/44/head
Matt Ward 13 years ago
parent
commit
fdcc282862
  1. 12
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs
  2. 17
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs
  3. 54
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs
  4. 54
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs
  5. 3
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  6. 44
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ConsoleHostFileConflictResolver.cs
  7. 14
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/FileConflictAction.cs
  8. 11
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IConsoleHostFileConflictResolver.cs
  9. 2
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs
  10. 12
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs
  11. 12
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHostProvider.cs
  12. 5
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellMissingConsoleHost.cs
  13. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  14. 18
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs
  15. 2
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageManagementConsoleHost.cs
  16. 70
      src/AddIns/Misc/PackageManagement/Test/Src/Scripting/ConsoleHostFileConflictResolverTests.cs
  17. 6
      src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostProviderTests.cs

12
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs

@ -44,10 +44,20 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -44,10 +44,20 @@ namespace ICSharpCode.PackageManagement.Cmdlets
[Parameter, Alias("Prerelease")]
public SwitchParameter IncludePrerelease { get; set; }
[Parameter]
public FileConflictAction FileConflictAction { get; set; }
protected override void ProcessRecord()
{
ThrowErrorIfProjectNotOpen();
InstallPackage();
using (IConsoleHostFileConflictResolver resolver = CreateFileConflictResolver()) {
InstallPackage();
}
}
IConsoleHostFileConflictResolver CreateFileConflictResolver()
{
return ConsoleHost.CreateFileConflictResolver(FileConflictAction);
}
void InstallPackage()

17
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs

@ -50,10 +50,25 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -50,10 +50,25 @@ namespace ICSharpCode.PackageManagement.Cmdlets
[Parameter, Alias("Prerelease")]
public SwitchParameter IncludePrerelease { get; set; }
[Parameter]
public FileConflictAction FileConflictAction { get; set; }
protected override void ProcessRecord()
{
ThrowErrorIfProjectNotOpen();
using (IConsoleHostFileConflictResolver resolver = CreateFileConflictResolver()) {
RunUpdate();
}
}
IConsoleHostFileConflictResolver CreateFileConflictResolver()
{
return ConsoleHost.CreateFileConflictResolver(FileConflictAction);
}
void RunUpdate()
{
if (HasPackageId()) {
if (HasProjectName()) {
UpdatePackageInSingleProject();

54
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs

@ -237,5 +237,59 @@ namespace PackageManagement.Cmdlets.Tests @@ -237,5 +237,59 @@ namespace PackageManagement.Cmdlets.Tests
IPackageScriptRunner scriptRunner = fakeProject.LastInstallPackageCreated.PackageScriptRunner;
Assert.AreEqual(cmdlet, scriptRunner);
}
[Test]
public void ProcessRecord_FileConflictActionIsOverwrite_FileConflictResolverCreatedWithOverwriteAction()
{
CreateCmdletWithoutActiveProject();
AddDefaultProjectToConsoleHost();
AddPackageSourceToConsoleHost();
SetIdParameter("Test");
cmdlet.FileConflictAction = FileConflictAction.Overwrite;
RunCmdlet();
Assert.AreEqual(FileConflictAction.Overwrite, fakeConsoleHost.LastFileConflictActionUsedWhenCreatingResolver);
}
[Test]
public void ProcessRecord_FileConflictActionIsIgnore_FileConflictResolverCreatedWithIgnoreAction()
{
CreateCmdletWithoutActiveProject();
AddDefaultProjectToConsoleHost();
AddPackageSourceToConsoleHost();
SetIdParameter("Test");
cmdlet.FileConflictAction = FileConflictAction.Ignore;
RunCmdlet();
Assert.AreEqual(FileConflictAction.Ignore, fakeConsoleHost.LastFileConflictActionUsedWhenCreatingResolver);
}
[Test]
public void ProcessRecord_FileConflictActionNotSet_FileConflictResolverCreatedWithNoneFileConflictAction()
{
CreateCmdletWithoutActiveProject();
AddDefaultProjectToConsoleHost();
AddPackageSourceToConsoleHost();
SetIdParameter("Test");
RunCmdlet();
Assert.AreEqual(FileConflictAction.None, fakeConsoleHost.LastFileConflictActionUsedWhenCreatingResolver);
}
[Test]
public void ProcessRecord_PackageIdSpecified_FileConflictResolverIsDisposed()
{
CreateCmdletWithoutActiveProject();
AddDefaultProjectToConsoleHost();
AddPackageSourceToConsoleHost();
SetIdParameter("Test");
RunCmdlet();
fakeConsoleHost.AssertFileConflictResolverIsDisposed();
}
}
}

54
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs

@ -715,5 +715,59 @@ namespace PackageManagement.Cmdlets.Tests @@ -715,5 +715,59 @@ namespace PackageManagement.Cmdlets.Tests
Assert.AreEqual(expectedVersion, packageReference.Version);
}
[Test]
public void ProcessRecord_FileConflictActionIsOverwrite_FileConflictResolverCreatedWithOverwriteAction()
{
CreateCmdletWithoutActiveProject();
AddDefaultProjectToConsoleHost();
AddPackageSourceToConsoleHost();
SetIdParameter("Test");
cmdlet.FileConflictAction = FileConflictAction.Overwrite;
RunCmdlet();
Assert.AreEqual(FileConflictAction.Overwrite, fakeConsoleHost.LastFileConflictActionUsedWhenCreatingResolver);
}
[Test]
public void ProcessRecord_FileConflictActionIsIgnore_FileConflictResolverCreatedWithIgnoreAction()
{
CreateCmdletWithoutActiveProject();
AddDefaultProjectToConsoleHost();
AddPackageSourceToConsoleHost();
SetIdParameter("Test");
cmdlet.FileConflictAction = FileConflictAction.Ignore;
RunCmdlet();
Assert.AreEqual(FileConflictAction.Ignore, fakeConsoleHost.LastFileConflictActionUsedWhenCreatingResolver);
}
[Test]
public void ProcessRecord_FileConflictActionNotSet_FileConflictResolverCreatedWithNoneFileConflictAction()
{
CreateCmdletWithoutActiveProject();
AddDefaultProjectToConsoleHost();
AddPackageSourceToConsoleHost();
SetIdParameter("Test");
RunCmdlet();
Assert.AreEqual(FileConflictAction.None, fakeConsoleHost.LastFileConflictActionUsedWhenCreatingResolver);
}
[Test]
public void ProcessRecord_PackageIdSpecified_FileConflictResolverIsDisposed()
{
CreateCmdletWithoutActiveProject();
AddDefaultProjectToConsoleHost();
AddPackageSourceToConsoleHost();
SetIdParameter("Test");
RunCmdlet();
fakeConsoleHost.AssertFileConflictResolverIsDisposed();
}
}
}

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

@ -238,7 +238,10 @@ @@ -238,7 +238,10 @@
<Compile Include="Src\ProjectRootElementExtensions.cs" />
<Compile Include="Src\ReducedPackageOperations.cs" />
<Compile Include="Src\ResolveFileConflictEventArgs.cs" />
<Compile Include="Src\Scripting\ConsoleHostFileConflictResolver.cs" />
<Compile Include="Src\Scripting\FileConflictAction.cs" />
<Compile Include="Src\Scripting\GlobalMSBuildProjectCollection.cs" />
<Compile Include="Src\Scripting\IConsoleHostFileConflictResolver.cs" />
<Compile Include="Src\Scripting\IGlobalMSBuildProjectCollection.cs" />
<Compile Include="Src\Scripting\MSBuildProjectImportsMerger.cs" />
<Compile Include="Src\Scripting\MSBuildProjectImportsMergeResult.cs" />

44
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ConsoleHostFileConflictResolver.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 NuGet;
namespace ICSharpCode.PackageManagement.Scripting
{
public class ConsoleHostFileConflictResolver : IConsoleHostFileConflictResolver
{
IPackageManagementEvents packageEvents;
FileConflictResolution conflictResolution;
public ConsoleHostFileConflictResolver(
IPackageManagementEvents packageEvents,
FileConflictAction fileConflictAction)
{
this.packageEvents = packageEvents;
conflictResolution = GetFileConflictResolution(fileConflictAction);
packageEvents.ResolveFileConflict += ResolveFileConflict;
}
void ResolveFileConflict(object sender, ResolveFileConflictEventArgs e)
{
e.Resolution = conflictResolution;
}
FileConflictResolution GetFileConflictResolution(FileConflictAction fileConflictAction)
{
switch (fileConflictAction) {
case FileConflictAction.Overwrite:
return FileConflictResolution.Overwrite;
default:
return FileConflictResolution.Ignore;
}
}
public void Dispose()
{
packageEvents.ResolveFileConflict -= ResolveFileConflict;
}
}
}

14
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/FileConflictAction.cs

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
// 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;
namespace ICSharpCode.PackageManagement.Scripting
{
public enum FileConflictAction
{
None,
Overwrite,
Ignore
}
}

11
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IConsoleHostFileConflictResolver.cs

@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
// 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;
namespace ICSharpCode.PackageManagement.Scripting
{
public interface IConsoleHostFileConflictResolver : IDisposable
{
}
}

2
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs

@ -26,6 +26,8 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -26,6 +26,8 @@ namespace ICSharpCode.PackageManagement.Scripting
void SetDefaultRunspace();
IConsoleHostFileConflictResolver CreateFileConflictResolver(FileConflictAction fileConflictAction);
IPackageManagementProject GetProject(string packageSource, string projectName);
IPackageManagementProject GetProject(IPackageRepository sourceRepository, string projectName);
PackageSource GetActivePackageSource(string source);

12
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs

@ -19,12 +19,14 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -19,12 +19,14 @@ namespace ICSharpCode.PackageManagement.Scripting
IPowerShellHostFactory powerShellHostFactory;
IPowerShellHost powerShellHost;
IPackageManagementAddInPath addinPath;
IPackageManagementEvents packageEvents;
int autoIndentSize = 0;
string prompt = "PM> ";
public PackageManagementConsoleHost(
IPackageManagementSolution solution,
IRegisteredPackageRepositories registeredRepositories,
IPackageManagementEvents packageEvents,
IPowerShellHostFactory powerShellHostFactory,
IPackageManagementAddInPath addinPath)
{
@ -32,14 +34,17 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -32,14 +34,17 @@ namespace ICSharpCode.PackageManagement.Scripting
this.registeredRepositories = registeredRepositories;
this.powerShellHostFactory = powerShellHostFactory;
this.addinPath = addinPath;
this.packageEvents = packageEvents;
}
public PackageManagementConsoleHost(
IPackageManagementSolution solution,
IRegisteredPackageRepositories registeredRepositories)
IRegisteredPackageRepositories registeredRepositories,
IPackageManagementEvents packageEvents)
: this(
solution,
registeredRepositories,
packageEvents,
new PowerShellHostFactory(),
new PackageManagementAddInPath())
{
@ -260,5 +265,10 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -260,5 +265,10 @@ namespace ICSharpCode.PackageManagement.Scripting
{
powerShellHost.SetDefaultRunspace();
}
public IConsoleHostFileConflictResolver CreateFileConflictResolver(FileConflictAction fileConflictAction)
{
return new ConsoleHostFileConflictResolver(packageEvents, fileConflictAction);
}
}
}

12
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHostProvider.cs

@ -12,22 +12,28 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -12,22 +12,28 @@ namespace ICSharpCode.PackageManagement.Scripting
IRegisteredPackageRepositories registeredRepositories;
IPowerShellDetection powerShellDetection;
IPackageManagementConsoleHost consoleHost;
IPackageManagementEvents packageEvents;
public PackageManagementConsoleHostProvider(
IPackageManagementSolution solution,
IRegisteredPackageRepositories registeredRepositories)
: this(solution, registeredRepositories, new PowerShellDetection())
: this(solution,
registeredRepositories,
new PowerShellDetection(),
PackageManagementServices.PackageManagementEvents)
{
}
public PackageManagementConsoleHostProvider(
IPackageManagementSolution solution,
IRegisteredPackageRepositories registeredRepositories,
IPowerShellDetection powerShellDetection)
IPowerShellDetection powerShellDetection,
IPackageManagementEvents packageEvents)
{
this.solution = solution;
this.registeredRepositories = registeredRepositories;
this.powerShellDetection = powerShellDetection;
this.packageEvents = packageEvents;
}
public IPackageManagementConsoleHost ConsoleHost {
@ -42,7 +48,7 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -42,7 +48,7 @@ namespace ICSharpCode.PackageManagement.Scripting
void CreateConsoleHost()
{
if (powerShellDetection.IsPowerShell2Installed()) {
consoleHost = new PackageManagementConsoleHost(solution, registeredRepositories);
consoleHost = new PackageManagementConsoleHost(solution, registeredRepositories, packageEvents);
} else {
consoleHost = new PowerShellMissingConsoleHost();
}

5
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellMissingConsoleHost.cs

@ -80,5 +80,10 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -80,5 +80,10 @@ namespace ICSharpCode.PackageManagement.Scripting
public void SetDefaultRunspace()
{
}
public IConsoleHostFileConflictResolver CreateFileConflictResolver(FileConflictAction fileConflictAction)
{
return null;
}
}
}

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

@ -202,6 +202,7 @@ @@ -202,6 +202,7 @@
<Compile Include="Src\PackageViewModelOperationLoggerTests.cs" />
<Compile Include="Src\ReducedPackageOperationsTests.cs" />
<Compile Include="Src\RunAllProjectPackageScriptsActionTests.cs" />
<Compile Include="Src\Scripting\ConsoleHostFileConflictResolverTests.cs" />
<Compile Include="Src\Scripting\MSBuildProjectImportsMergerTests.cs" />
<Compile Include="Src\UpdatedPackagesTests.cs" />
<Compile Include="Src\UpdatePackagesActionTests.cs" />

18
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs

@ -10,6 +10,7 @@ using ICSharpCode.PackageManagement.Scripting; @@ -10,6 +10,7 @@ using ICSharpCode.PackageManagement.Scripting;
using ICSharpCode.Scripting;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
using Rhino.Mocks;
namespace PackageManagement.Tests.Helpers
{
@ -136,5 +137,22 @@ namespace PackageManagement.Tests.Helpers @@ -136,5 +137,22 @@ namespace PackageManagement.Tests.Helpers
{
IsSetDefaultRunspaceCalled = true;
}
public IConsoleHostFileConflictResolver FakeFileConflictResolver =
MockRepository.GenerateStub<IConsoleHostFileConflictResolver>();
public FileConflictAction LastFileConflictActionUsedWhenCreatingResolver =
(FileConflictAction)(-1);
public IConsoleHostFileConflictResolver CreateFileConflictResolver(FileConflictAction fileConflictAction)
{
LastFileConflictActionUsedWhenCreatingResolver = fileConflictAction;
return FakeFileConflictResolver;
}
public void AssertFileConflictResolverIsDisposed()
{
FakeFileConflictResolver.AssertWasCalled(resolver => resolver.Dispose());
}
}
}

2
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageManagementConsoleHost.cs

@ -36,7 +36,7 @@ namespace PackageManagement.Tests.Helpers @@ -36,7 +36,7 @@ namespace PackageManagement.Tests.Helpers
FakeScriptingConsoleWithLinesToRead scriptingConsole,
FakePowerShellHostFactory powerShellHostFactory,
FakePackageManagementAddInPath addinPath)
: base(solution, registeredPackageRepositories, powerShellHostFactory, addinPath)
: base(solution, registeredPackageRepositories, null, powerShellHostFactory, addinPath)
{
this.FakeSolution = solution;
this.FakeScriptingConsole = scriptingConsole;

70
src/AddIns/Misc/PackageManagement/Test/Src/Scripting/ConsoleHostFileConflictResolverTests.cs

@ -0,0 +1,70 @@ @@ -0,0 +1,70 @@
// 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 ICSharpCode.PackageManagement.Scripting;
using NuGet;
using NUnit.Framework;
namespace PackageManagement.Scripting.Tests
{
[TestFixture]
public class ConsoleHostFileConflictResolverTests
{
ConsoleHostFileConflictResolver resolver;
PackageManagementEvents packageEvents;
void CreateResolver(FileConflictAction action)
{
packageEvents = new PackageManagementEvents();
resolver = new ConsoleHostFileConflictResolver(packageEvents, action);
}
FileConflictResolution ResolveConflict()
{
return packageEvents.OnResolveFileConflict(String.Empty);
}
[Test]
public void ResolveConflict_FileConflictActionIsNone_ResolutionIsIgnore()
{
CreateResolver(FileConflictAction.None);
FileConflictResolution resolution = ResolveConflict();
Assert.AreEqual(FileConflictResolution.Ignore, resolution);
}
[Test]
public void ResolveConflict_FileConflictActionIsIgnore_ResolutionIsIgnore()
{
CreateResolver(FileConflictAction.Ignore);
FileConflictResolution resolution = ResolveConflict();
Assert.AreEqual(FileConflictResolution.Ignore, resolution);
}
[Test]
public void ResolveConflict_FileConflictActionIsOverwrite_ResolutionIsOverwrite()
{
CreateResolver(FileConflictAction.Overwrite);
FileConflictResolution resolution = ResolveConflict();
Assert.AreEqual(FileConflictResolution.Overwrite, resolution);
}
[Test]
public void ResolveConflict_FileConflictActionIsOverwriteButResolverIsDisposed_ResolutionIsNotChangedByResolver()
{
CreateResolver(FileConflictAction.Overwrite);
resolver.Dispose();
FileConflictResolution resolution = ResolveConflict();
Assert.AreEqual(FileConflictResolution.IgnoreAll, resolution);
}
}
}

6
src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostProviderTests.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using ICSharpCode.PackageManagement.Scripting;
using NUnit.Framework;
@ -16,16 +17,19 @@ namespace PackageManagement.Tests.Scripting @@ -16,16 +17,19 @@ namespace PackageManagement.Tests.Scripting
FakePackageManagementSolution fakeSolution;
FakeRegisteredPackageRepositories fakeRegisteredRepositories;
FakePowerShellDetection fakePowerShellDetection;
PackageManagementEvents packageEvents;
void CreateProvider()
{
fakeSolution = new FakePackageManagementSolution();
fakeRegisteredRepositories = new FakeRegisteredPackageRepositories();
fakePowerShellDetection = new FakePowerShellDetection();
packageEvents = new PackageManagementEvents();
provider = new PackageManagementConsoleHostProvider(
fakeSolution,
fakeRegisteredRepositories,
fakePowerShellDetection);
fakePowerShellDetection,
packageEvents);
}
[Test]

Loading…
Cancel
Save