Skip to content

Commit 982cd24

Browse files
authored
Merge pull request #31 from mast-eu/29-FixDirectoryStructure
place all plugins in sub-directories
2 parents 3dad53b + 4d9433e commit 982cd24

File tree

8 files changed

+27
-11
lines changed

8 files changed

+27
-11
lines changed

src/GitExtensions.PluginManager/GitExtensions.PluginManager.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<PropertyGroup>
1414
<PackageManagerTargetPath>PackageManager\PackageManager.UI.exe</PackageManagerTargetPath>
1515
<PackageManagerSourcePath>..\PackageManager.UI\bin\$(Configuration)\$(TargetFramework)\PackageManager.UI.exe</PackageManagerSourcePath>
16-
<GitExtensionsDebugPluginsPath>..\..\references\GitExtensions\UserPlugins\</GitExtensionsDebugPluginsPath>
16+
<GitExtensionsDebugPluginsPath>..\..\references\GitExtensions\UserPlugins\GitExtensions.PluginManager\</GitExtensionsDebugPluginsPath>
1717
<GitExtensionsReferenceSource>appveyor</GitExtensionsReferenceSource>
1818
<GitExtensionsReferenceVersion>v3.2.0.5938</GitExtensionsReferenceVersion>
1919
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>

src/GitExtensions.PluginManager/Plugin.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public override bool Execute(GitUIEventArgs gitUiCommands)
5858

5959
ProcessStartInfo info = new ProcessStartInfo()
6060
{
61-
FileName = Path.Combine(pluginsPath, PluginManagerRelativePath),
61+
FileName = Path.Combine(pluginsPath, PackageId, PluginManagerRelativePath),
6262
Arguments = args.ToString(),
6363
UseShellExecute = false,
6464
};

src/PackageManager.UI/Exceptions/PackageInstallExceptionHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ void IExceptionHandler<IExceptionHandlerContext<PackageFileExtractionException>>
3030

3131
void IExceptionHandler<IExceptionHandlerContext<PackageFileRemovalException>>.Handle(IExceptionHandlerContext<PackageFileRemovalException> context)
3232
{
33-
navigator.Notify("Package Removal Error", $"Error deleting file to '{context.Exception.FilePath}'", Navigator.MessageType.Error);
33+
navigator.Notify("Package Removal Error", $"Error deleting file '{context.Exception.FilePath}'", Navigator.MessageType.Error);
3434
context.IsHandled = true;
3535
}
3636
}

src/PackageManager/ViewModels/Commands/InstallCommand.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using PackageManager.Services;
55
using System;
66
using System.Collections.Generic;
7+
using System.IO;
78
using System.Linq;
89
using System.Text;
910
using System.Threading;
@@ -37,7 +38,9 @@ protected override async Task ExecuteAsync(IPackage package, CancellationToken c
3738
if (execute)
3839
{
3940
IPackageContent packageContent = await package.GetContentAsync(cancellationToken);
40-
await packageContent.ExtractToAsync(service.Path, cancellationToken);
41+
string pluginPath = Path.Combine(service.Path, package.Id);
42+
Directory.CreateDirectory(pluginPath);
43+
await packageContent.ExtractToAsync(pluginPath, cancellationToken);
4144

4245
service.Install(package);
4346
}

src/PackageManager/ViewModels/Commands/ReinstallCommand.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using PackageManager.Services;
55
using System;
66
using System.Collections.Generic;
7+
using System.IO;
78
using System.Linq;
89
using System.Text;
910
using System.Threading;
@@ -30,8 +31,9 @@ protected override bool CanExecuteOverride(IPackage package)
3031
protected override async Task ExecuteAsync(IPackage package, CancellationToken cancellationToken)
3132
{
3233
IPackageContent packageContent = await package.GetContentAsync(cancellationToken);
33-
await packageContent.RemoveFromAsync(service.Path, cancellationToken);
34-
await packageContent.ExtractToAsync(service.Path, cancellationToken);
34+
string pluginPath = Path.Combine(service.Path, package.Id);
35+
await packageContent.RemoveFromAsync(pluginPath, cancellationToken);
36+
await packageContent.ExtractToAsync(pluginPath, cancellationToken);
3537
}
3638

3739
public new void RaiseCanExecuteChanged()

src/PackageManager/ViewModels/Commands/UninstallCommand.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using PackageManager.Services;
55
using System;
66
using System.Collections.Generic;
7+
using System.IO;
78
using System.Linq;
89
using System.Text;
910
using System.Threading;
@@ -40,7 +41,14 @@ protected override async Task ExecuteAsync(IPackage package, CancellationToken c
4041
if (execute)
4142
{
4243
IPackageContent packageContent = await package.GetContentAsync(cancellationToken);
43-
await packageContent.RemoveFromAsync(service.Path, cancellationToken);
44+
string pluginPath = Path.Combine(service.Path, package.Id);
45+
await packageContent.RemoveFromAsync(pluginPath, cancellationToken);
46+
47+
// do not delete the plugin directory if it still contains files (e.g. data files)
48+
if (Directory.Exists(pluginPath) && !Directory.EnumerateFileSystemEntries(pluginPath).Any())
49+
{
50+
Directory.Delete(pluginPath);
51+
}
4452

4553
cancellationToken.ThrowIfCancellationRequested();
4654

src/PackageManager/ViewModels/Commands/UpdateCommand.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using PackageManager.Models;
44
using PackageManager.Services;
55
using System;
6+
using System.IO;
67
using System.Collections.Generic;
78
using System.Linq;
89
using System.Text;
@@ -46,11 +47,12 @@ protected override async Task ExecuteAsync(PackageUpdateViewModel package, Cance
4647
}
4748

4849
IPackageContent packageContent = await package.Current.Model.GetContentAsync(cancellationToken);
49-
await packageContent.RemoveFromAsync(install.Path, cancellationToken);
50+
string pluginPath = Path.Combine(install.Path, package.Current.Id);
51+
await packageContent.RemoveFromAsync(pluginPath, cancellationToken);
5052
install.Uninstall(package.Current.Model);
5153

5254
packageContent = await package.Target.GetContentAsync(cancellationToken);
53-
await packageContent.ExtractToAsync(install.Path, cancellationToken);
55+
await packageContent.ExtractToAsync(pluginPath, cancellationToken);
5456
install.Install(package.Target);
5557

5658
if (package.IsSelf)

test/PackageManager.Tests/ViewModels/Commands/Package.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using PackageManager.Models;
33
using System;
44
using System.Collections.Generic;
5+
using System.IO;
56
using System.Linq;
67
using System.Text;
78
using System.Threading;
@@ -20,12 +21,12 @@ public Package(string extractPath, string id, string version = null)
2021
{
2122
Mock<IPackageContent> contentMock = new Mock<IPackageContent>();
2223
contentMock
23-
.Setup(pc => pc.ExtractToAsync(It.Is<string>(s => s == extractPath), It.IsAny<CancellationToken>()))
24+
.Setup(pc => pc.ExtractToAsync(It.Is<string>(s => s == Path.Combine(extractPath, id)), It.IsAny<CancellationToken>()))
2425
.Callback(() => ExtractToAsyncCalled.Increment())
2526
.Returns(() => Task.CompletedTask);
2627

2728
contentMock
28-
.Setup(pc => pc.RemoveFromAsync(It.Is<string>(s => s == extractPath), It.IsAny<CancellationToken>()))
29+
.Setup(pc => pc.RemoveFromAsync(It.Is<string>(s => s == Path.Combine(extractPath, id)), It.IsAny<CancellationToken>()))
2930
.Callback(() => RemoveFromAsyncCalled.Increment())
3031
.Returns(() => Task.CompletedTask);
3132

0 commit comments

Comments
 (0)