Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit 70fd933

Browse files
committed
Support solution specific NuGet.Config files.
If a solution has its own NuGet.Config file this will be read and any package sources defined in this file will be available in the list of package sources in the Manage Packages dialog.
1 parent 9253860 commit 70fd933

14 files changed

Lines changed: 333 additions & 114 deletions

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@
154154
<Compile Include="Src\InstalledPackagesViewModel.cs" />
155155
<Compile Include="Src\IPackageRepositoryFactoryEvents.cs" />
156156
<Compile Include="Src\IPackageViewModelParent.cs" />
157+
<Compile Include="Src\ISettingsProvider.cs" />
157158
<Compile Include="Src\IUpdatePackagesAction.cs" />
158159
<Compile Include="Src\IPackageExtensions.cs" />
159160
<Compile Include="Src\IPackageAction.cs" />
@@ -219,7 +220,6 @@
219220
<Compile Include="Src\IPackageReferenceInstaller.cs" />
220221
<Compile Include="Src\IPackageReferencesForProject.cs" />
221222
<Compile Include="Src\IPropertyService.cs" />
222-
<Compile Include="Src\ISettingsFactory.cs" />
223223
<Compile Include="Src\IThreadSafePackageManagementEvents.cs" />
224224
<Compile Include="Src\ManagePackagesUserPrompts.cs" />
225225
<Compile Include="Src\ManagePackagesViewTitle.cs" />
@@ -252,6 +252,7 @@
252252
<Compile Include="Src\Scripting\NullGlobalMSBuildProjectCollection.cs" />
253253
<Compile Include="Src\Scripting\RunAllProjectPackageScriptsAction.cs" />
254254
<Compile Include="Src\ServiceWithWorkbenchOwner.cs" />
255+
<Compile Include="Src\SettingsProvider.cs" />
255256
<Compile Include="Src\SharpDevelopCredentialProvider.cs" />
256257
<Compile Include="Src\SharpDevelopHttpUserAgent.cs" />
257258
<Compile Include="Src\ThreadSafeCodeGenerator.cs" />
@@ -400,7 +401,6 @@
400401
<SubType>Code</SubType>
401402
</Compile>
402403
<Compile Include="Src\SelectProjectsViewModel.cs" />
403-
<Compile Include="Src\SettingsFactory.cs" />
404404
<Compile Include="Src\SolutionPackageRepositoryFactory.cs" />
405405
<Compile Include="Src\SolutionPackageRepositoryPath.cs" />
406406
<Compile Include="Src\PackageSourceConverter.cs" />

src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProjectService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public void RefreshProjectBrowser()
4343

4444
public void FireSolutionClosedEvent(ISolution solution)
4545
{
46+
OpenSolution = null;
4647
if (SolutionClosed != null) {
4748
SolutionClosed(this, new SolutionEventArgs(solution));
4849
}

src/AddIns/Misc/PackageManagement/Project/Src/ISettingsFactory.cs

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2+
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
3+
4+
using System;
5+
using NuGet;
6+
7+
namespace ICSharpCode.PackageManagement
8+
{
9+
public interface ISettingsProvider
10+
{
11+
event EventHandler SettingsChanged;
12+
ISettings LoadSettings();
13+
}
14+
}

src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,17 @@ public class PackageManagementOptions
3535
ObservableCollection<RecentPackageInfo> recentPackages;
3636
PackageRestoreConsent packageRestoreConsent;
3737

38-
public PackageManagementOptions(Properties properties, ISettings settings)
38+
public PackageManagementOptions(
39+
Properties properties,
40+
ISettingsProvider settingsProvider)
3941
{
4042
this.properties = properties;
41-
registeredPackageSourceSettings = new RegisteredPackageSourceSettings(settings);
42-
packageRestoreConsent = new PackageRestoreConsent(settings);
43+
registeredPackageSourceSettings = new RegisteredPackageSourceSettings(settingsProvider);
44+
packageRestoreConsent = new PackageRestoreConsent(settingsProvider.LoadSettings());
4345
}
4446

4547
public PackageManagementOptions(Properties properties)
46-
: this(properties, Settings.LoadDefaultSettings(null, null, null))
48+
: this(properties, new SettingsProvider())
4749
{
4850
}
4951

src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
using System.Collections.Specialized;
2222
using System.Linq;
2323

24+
using ICSharpCode.SharpDevelop.Project;
2425
using NuGet;
2526

2627
namespace ICSharpCode.PackageManagement
@@ -35,20 +36,32 @@ public class RegisteredPackageSourceSettings
3536
new PackageSource("(Aggregate source)", "All");
3637

3738
ISettings settings;
39+
ISettingsProvider settingsProvider;
3840
PackageSource defaultPackageSource;
3941
RegisteredPackageSources packageSources;
4042
PackageSource activePackageSource;
4143

42-
public RegisteredPackageSourceSettings(ISettings settings)
43-
: this(settings, RegisteredPackageSources.DefaultPackageSource)
44+
public RegisteredPackageSourceSettings(ISettingsProvider settingsProvider)
45+
: this(settingsProvider, RegisteredPackageSources.DefaultPackageSource)
4446
{
4547
}
4648

47-
public RegisteredPackageSourceSettings(ISettings settings, PackageSource defaultPackageSource)
49+
public RegisteredPackageSourceSettings(
50+
ISettingsProvider settingsProvider,
51+
PackageSource defaultPackageSource)
4852
{
49-
this.settings = settings;
53+
this.settingsProvider = settingsProvider;
5054
this.defaultPackageSource = defaultPackageSource;
55+
56+
settings = settingsProvider.LoadSettings();
57+
5158
ReadActivePackageSource();
59+
RegisterSolutionEvents();
60+
}
61+
62+
void RegisterSolutionEvents()
63+
{
64+
settingsProvider.SettingsChanged += SettingsChanged;
5265
}
5366

5467
void ReadActivePackageSource()
@@ -176,5 +189,20 @@ void SaveActivePackageSourceSetting(KeyValuePair<string, string> activePackageSo
176189
{
177190
settings.SetValue(ActivePackageSourceSectionName, activePackageSource.Key, activePackageSource.Value);
178191
}
192+
193+
void SettingsChanged(object sender, EventArgs e)
194+
{
195+
settings = settingsProvider.LoadSettings();
196+
ReadActivePackageSource();
197+
ResetPackageSources();
198+
}
199+
200+
void ResetPackageSources()
201+
{
202+
if (packageSources != null) {
203+
packageSources.CollectionChanged -= PackageSourcesChanged;
204+
packageSources = null;
205+
}
206+
}
179207
}
180208
}

src/AddIns/Misc/PackageManagement/Project/Src/SettingsFactory.cs

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2+
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
3+
4+
using System;
5+
using System.IO;
6+
using ICSharpCode.SharpDevelop.Project;
7+
using NuGet;
8+
9+
namespace ICSharpCode.PackageManagement
10+
{
11+
public class SettingsProvider : ISettingsProvider
12+
{
13+
public static Func<IFileSystem, string, IMachineWideSettings, ISettings> LoadDefaultSettings
14+
= Settings.LoadDefaultSettings;
15+
16+
IPackageManagementProjectService projectService;
17+
18+
public SettingsProvider()
19+
: this(PackageManagementServices.ProjectService)
20+
{
21+
}
22+
23+
public SettingsProvider(IPackageManagementProjectService projectService)
24+
{
25+
this.projectService = projectService;
26+
projectService.SolutionOpened += OnSettingsChanged;
27+
projectService.SolutionClosed += OnSettingsChanged;
28+
}
29+
30+
public event EventHandler SettingsChanged;
31+
32+
void OnSettingsChanged(object sender, SolutionEventArgs e)
33+
{
34+
if (SettingsChanged != null) {
35+
SettingsChanged(this, new EventArgs());
36+
}
37+
}
38+
39+
public ISettings LoadSettings()
40+
{
41+
return LoadSettings(GetSolutionDirectory());
42+
}
43+
44+
string GetSolutionDirectory()
45+
{
46+
ISolution solution = projectService.OpenSolution;
47+
if (solution != null) {
48+
return solution.Directory;
49+
}
50+
return null;
51+
}
52+
53+
ISettings LoadSettings(string directory)
54+
{
55+
if (directory == null) {
56+
return LoadDefaultSettings(null, null, null);
57+
}
58+
59+
return LoadDefaultSettings(new PhysicalFileSystem(directory), null, null);
60+
}
61+
}
62+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,6 @@
176176
<Compile Include="Src\Helpers\FakePowerShellDetection.cs" />
177177
<Compile Include="Src\Helpers\FakePowerShellSession.cs" />
178178
<Compile Include="Src\Helpers\FakePropertyService.cs" />
179-
<Compile Include="Src\Helpers\FakeSettingsFactory.cs" />
180179
<Compile Include="Src\Helpers\FakeSolutionPackageRepository.cs" />
181180
<Compile Include="Src\Helpers\FakeTextEditorOptions.cs" />
182181
<Compile Include="Src\Helpers\ProjectItemCollectionAssert.cs" />
@@ -195,6 +194,7 @@
195194
<Compile Include="Src\Scripting\ConsoleHostFileConflictResolverTests.cs" />
196195
<Compile Include="Src\Scripting\MSBuildProjectImportsMergerTests.cs" />
197196
<Compile Include="Src\Scripting\MSBuildProjectPropertiesMergerTests.cs" />
197+
<Compile Include="Src\SettingsProviderTests.cs" />
198198
<Compile Include="Src\UpdatedPackagesTests.cs" />
199199
<Compile Include="Src\UpdatePackagesActionTests.cs" />
200200
<Compile Include="Src\UpdateSolutionPackagesActionTests.cs" />

src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeSettingsFactory.cs

Lines changed: 0 additions & 37 deletions
This file was deleted.

0 commit comments

Comments
 (0)