Skip to content
This repository was archived by the owner on Dec 18, 2017. It is now read-only.

Commit 800e21f

Browse files
committed
"kpm restore" ignores nonexistent local package feeds and gives warnings
1 parent 6cfe52b commit 800e21f

File tree

8 files changed

+55
-30
lines changed

8 files changed

+55
-30
lines changed

src/Microsoft.Framework.PackageManager/Commands/InstallCommand.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,14 @@ public async Task<bool> ExecuteCommand()
5555
var packageFeeds = new List<IPackageFeed>();
5656
foreach (var source in effectiveSources)
5757
{
58-
if (new Uri(source.Source).IsFile)
58+
var feed = PackageSourceUtils.CreatePackageFeed(
59+
source,
60+
_restoreCommand.NoCache,
61+
_restoreCommand.IgnoreFailedSources,
62+
Reports);
63+
if (feed != null)
5964
{
60-
packageFeeds.Add(PackageFolderFactory.CreatePackageFolderFromPath(source.Source, Reports.Quiet));
61-
}
62-
else
63-
{
64-
packageFeeds.Add(new NuGetv2Feed(
65-
source.Source, source.UserName, source.Password, _restoreCommand.NoCache, Reports,
66-
_restoreCommand.IgnoreFailedSources));
65+
packageFeeds.Add(feed);
6766
}
6867
}
6968

src/Microsoft.Framework.PackageManager/Restore/NuGet/IPackageFeed.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ namespace Microsoft.Framework.PackageManager.Restore.NuGet
1010
{
1111
public interface IPackageFeed
1212
{
13+
string Source { get; }
1314
Task<IEnumerable<PackageInfo>> FindPackagesByIdAsync(string id);
1415
Task<Stream> OpenNupkgStreamAsync(PackageInfo package);
1516
Task<Stream> OpenNuspecStreamAsync(PackageInfo package);

src/Microsoft.Framework.PackageManager/Restore/NuGet/KpmPackageFolder.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ public class KpmPackageFolder : IPackageFeed
1717
private readonly IFileSystem _fileSystem;
1818
private readonly IPackagePathResolver _pathResolver;
1919

20+
public string Source { get; }
21+
2022
public KpmPackageFolder(
2123
string physicalPath,
2224
IReport report)
@@ -27,6 +29,7 @@ public KpmPackageFolder(
2729
_fileSystem = new PhysicalFileSystem(physicalPath);
2830
_pathResolver = new DefaultPackagePathResolver(_fileSystem);
2931
_report = report;
32+
Source = physicalPath;
3033
}
3134

3235
public Task<IEnumerable<PackageInfo>> FindPackagesByIdAsync(string id)

src/Microsoft.Framework.PackageManager/Restore/NuGet/NuGetPackageFolder.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,15 @@ public class NuGetPackageFolder : IPackageFeed
1414
private readonly IReport _report;
1515
private readonly LocalPackageRepository _repository;
1616

17+
public string Source { get; }
18+
1719
public NuGetPackageFolder(
1820
string physicalPath,
1921
IReport report)
2022
{
2123
_repository = new LocalPackageRepository(physicalPath, report);
2224
_report = report;
25+
Source = physicalPath;
2326
}
2427

2528
public Task<IEnumerable<PackageInfo>> FindPackagesByIdAsync(string id)

src/Microsoft.Framework.PackageManager/Restore/NuGet/NuGetv2Feed.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ public class NuGetv2Feed : IPackageFeed
3333
private readonly Dictionary<string, Task<IEnumerable<PackageInfo>>> _packageVersionsCache = new Dictionary<string, Task<IEnumerable<PackageInfo>>>();
3434
private readonly Dictionary<string, Task<NupkgEntry>> _nupkgCache = new Dictionary<string, Task<NupkgEntry>>();
3535

36+
public string Source { get; }
37+
3638
public NuGetv2Feed(
3739
string baseUri,
3840
string userName,
@@ -55,6 +57,7 @@ public NuGetv2Feed(
5557
_cacheAgeLimitList = TimeSpan.FromMinutes(30);
5658
_cacheAgeLimitNupkg = TimeSpan.FromHours(24);
5759
}
60+
Source = baseUri;
5861
}
5962

6063
public Task<IEnumerable<PackageInfo>> FindPackagesByIdAsync(string id)

src/Microsoft.Framework.PackageManager/Restore/RemoteWalkProvider.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

4+
using System;
45
using System.Collections.Generic;
56
using System.IO;
67
using System.Linq;
@@ -16,10 +17,10 @@ public class RemoteWalkProvider : IWalkProvider
1617
{
1718
private readonly IPackageFeed _source;
1819

19-
public RemoteWalkProvider(IPackageFeed source, bool isHttp)
20+
public RemoteWalkProvider(IPackageFeed source)
2021
{
2122
_source = source;
22-
IsHttp = isHttp;
23+
IsHttp = IsHttpSource(source);
2324
}
2425

2526
public bool IsHttp { get; private set; }
@@ -87,6 +88,12 @@ public async Task CopyToAsync(WalkProviderMatch match, Stream stream)
8788
await nupkgStream.CopyToAsync(stream);
8889
}
8990
}
91+
92+
private static bool IsHttpSource(IPackageFeed source)
93+
{
94+
return source.Source.StartsWith("http://", StringComparison.OrdinalIgnoreCase) ||
95+
source.Source.StartsWith("https://", StringComparison.OrdinalIgnoreCase);
96+
}
9097
}
9198
}
9299

src/Microsoft.Framework.PackageManager/Restore/RestoreCommand.cs

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -460,27 +460,10 @@ private void AddRemoteProvidersFromSources(List<IWalkProvider> remoteProviders,
460460
{
461461
foreach (var source in effectiveSources)
462462
{
463-
if (new Uri(source.Source).IsFile)
463+
var feed = PackageSourceUtils.CreatePackageFeed(source, NoCache, IgnoreFailedSources, Reports);
464+
if (feed != null)
464465
{
465-
remoteProviders.Add(
466-
new RemoteWalkProvider(
467-
PackageFolderFactory.CreatePackageFolderFromPath(
468-
source.Source,
469-
Reports.Quiet),
470-
isHttp: false));
471-
}
472-
else
473-
{
474-
remoteProviders.Add(
475-
new RemoteWalkProvider(
476-
new NuGetv2Feed(
477-
source.Source,
478-
source.UserName,
479-
source.Password,
480-
NoCache,
481-
Reports,
482-
ignoreFailure: IgnoreFailedSources),
483-
isHttp: true));
466+
remoteProviders.Add(new RemoteWalkProvider(feed));
484467
}
485468
}
486469
}

src/Microsoft.Framework.PackageManager/Utils/PackageSourceUtils.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.IO;
77
using System.Linq;
88
using NuGet;
9+
using Microsoft.Framework.PackageManager.Restore.NuGet;
910

1011
namespace Microsoft.Framework.PackageManager
1112
{
@@ -25,6 +26,31 @@ public static List<PackageSource> GetEffectivePackageSources(IPackageSourceProvi
2526
return enabledSources.Concat(addedSources).Distinct().ToList();
2627
}
2728

29+
public static IPackageFeed CreatePackageFeed(PackageSource source, bool noCache, bool ignoreFailedSources,
30+
Reports reports)
31+
{
32+
if (new Uri(source.Source).IsFile)
33+
{
34+
if (!Directory.Exists(source.Source))
35+
{
36+
reports.Information.WriteLine("Package source {0} doesn't exist",
37+
source.Source.Yellow().Bold());
38+
return null;
39+
}
40+
return PackageFolderFactory.CreatePackageFolderFromPath(source.Source, reports.Quiet);
41+
}
42+
else
43+
{
44+
return new NuGetv2Feed(
45+
source.Source,
46+
source.UserName,
47+
source.Password,
48+
noCache,
49+
reports,
50+
ignoreFailedSources);
51+
}
52+
}
53+
2854
private static bool CorrectName(string value, PackageSource source)
2955
{
3056
return source.Name.Equals(value, StringComparison.CurrentCultureIgnoreCase) ||

0 commit comments

Comments
 (0)