diff --git a/README.md b/README.md index 78220093..006f13f6 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ The home of the NuGet.server package, a lightweight standalone NuGet server ## Feedback -If you're having trouble with the NuGet.org Website, file a bug on the [NuGet Gallery Issue Tracker](https://github.com/nuget/NuGetGallery/issues). +If you're having trouble with the NuGet.org Website or NuGet.Server, file a bug on the [NuGet Gallery Issue Tracker](https://github.com/nuget/NuGetGallery/issues). If you're having trouble with the NuGet client tools (the Visual Studio extension, NuGet.exe command line tool, etc.), file a bug on [NuGet Home](https://github.com/nuget/home/issues). diff --git a/src/CommonAssemblyInfo.cs b/src/CommonAssemblyInfo.cs index d142ba7e..c2cfa8b0 100644 --- a/src/CommonAssemblyInfo.cs +++ b/src/CommonAssemblyInfo.cs @@ -13,7 +13,7 @@ [assembly: ComVisible(false)] -[assembly: AssemblyVersion("2.10.3.0")] -[assembly: AssemblyFileVersion("2.10.3.0")] +[assembly: AssemblyVersion("2.11.1.0")] +[assembly: AssemblyFileVersion("2.11.1.0")] [assembly: NeutralResourcesLanguage("en-US")] diff --git a/src/NuGet.Server/Core/DefaultServiceResolver.cs b/src/NuGet.Server/Core/DefaultServiceResolver.cs index 253f1ac1..233c4b63 100644 --- a/src/NuGet.Server/Core/DefaultServiceResolver.cs +++ b/src/NuGet.Server/Core/DefaultServiceResolver.cs @@ -12,16 +12,19 @@ public class DefaultServiceResolver : IServiceResolver { private readonly IHashProvider _hashProvider; - private readonly IPackageService _packageService; private readonly IServerPackageRepository _packageRepository; + private readonly IPackageAuthenticationService _packageAuthenticationService; + private readonly IPackageService _packageService; public DefaultServiceResolver() { _hashProvider = new CryptoHashProvider(Constants.HashAlgorithm); - _packageRepository = new ServerPackageRepository(PackageUtility.PackagePhysicalPath, _hashProvider, new TraceLogger()); + _packageRepository = new ServerPackageRepository(PackageUtility.PackagePhysicalPath, _hashProvider, new TraceLogger()); - _packageService = new PackageService(_packageRepository, new PackageAuthenticationService()); + _packageAuthenticationService = new PackageAuthenticationService(); + + _packageService = new PackageService(_packageRepository, _packageAuthenticationService); } public object Resolve(Type type) @@ -31,14 +34,19 @@ public object Resolve(Type type) return _hashProvider; } - if (type == typeof(IPackageService)) + if (type == typeof(IServerPackageRepository)) { - return _packageService; + return _packageRepository; } - if (type == typeof(IServerPackageRepository)) + if (type == typeof(IPackageAuthenticationService)) { - return _packageRepository; + return _packageAuthenticationService; + } + + if (type == typeof(IPackageService)) + { + return _packageService; } return null; diff --git a/src/NuGet.Server/Infrastructure/ServerPackageRepository.cs b/src/NuGet.Server/Infrastructure/ServerPackageRepository.cs index 270f9dcd..9d52ff37 100644 --- a/src/NuGet.Server/Infrastructure/ServerPackageRepository.cs +++ b/src/NuGet.Server/Infrastructure/ServerPackageRepository.cs @@ -186,7 +186,7 @@ private void AddPackagesFromDropFolder() try { // Create package - var package = new ZipPackage(_fileSystem.OpenFile(packageFile)); + var package = new OptimizedZipPackage(_fileSystem, packageFile); // Is it a symbols package? if (IgnoreSymbolsPackages && package.IsSymbolsPackage()) @@ -235,6 +235,8 @@ private void AddPackagesFromDropFolder() } finally { + OptimizedZipPackage.PurgeCache(); + MonitorFileSystem(true); } } @@ -552,6 +554,8 @@ public void ClearCache() { lock (_syncLock) { + OptimizedZipPackage.PurgeCache(); + _serverPackageStore.Clear(); _serverPackageStore.Persist(); _logger.Log(LogLevel.Info, "Cleared package cache."); diff --git a/src/NuGet.Server/NuGet.Server.csproj b/src/NuGet.Server/NuGet.Server.csproj index 121e6533..72f77535 100644 --- a/src/NuGet.Server/NuGet.Server.csproj +++ b/src/NuGet.Server/NuGet.Server.csproj @@ -38,11 +38,12 @@ False - ..\..\packages\Newtonsoft.Json.8.0.1\lib\net45\Newtonsoft.Json.dll + ..\..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll True - - ..\..\packages\NuGet.Core.2.10.1\lib\net40-Client\NuGet.Core.dll + + False + ..\..\packages\NuGet.Core.2.11.1\lib\net40-Client\NuGet.Core.dll True diff --git a/src/NuGet.Server/NuGet.Server.nuspec b/src/NuGet.Server/NuGet.Server.nuspec index 0984391c..53893b42 100644 --- a/src/NuGet.Server/NuGet.Server.nuspec +++ b/src/NuGet.Server/NuGet.Server.nuspec @@ -16,7 +16,7 @@ - + diff --git a/src/NuGet.Server/Publishing/PackageService.cs b/src/NuGet.Server/Publishing/PackageService.cs index acd8d89d..81a485a3 100644 --- a/src/NuGet.Server/Publishing/PackageService.cs +++ b/src/NuGet.Server/Publishing/PackageService.cs @@ -32,16 +32,26 @@ public void CreatePackage(HttpContextBase context) // Get the package from the request body // ReSharper disable once PossibleNullReferenceException - var stream = request.Files.Count > 0 ? request.Files[0].InputStream : request.InputStream; + var stream = request.Files.Count > 0 + ? request.Files[0].InputStream + : request.InputStream; - var package = new ZipPackage(stream); + // Copy the package to a temporary file + var temporaryFile = Path.GetTempFileName(); + using (var temporaryFileStream = File.Open(temporaryFile, FileMode.OpenOrCreate, FileAccess.ReadWrite)) + { + stream.CopyTo(temporaryFileStream); + } + + var package = new OptimizedZipPackage(temporaryFile); - // Make sure they can access this package + // Make sure the user can access this package if (Authenticate(context, apiKey, package.Id)) { try { _serverRepository.AddPackage(package); + WriteStatus(context, HttpStatusCode.Created, ""); } catch (InvalidOperationException ex) @@ -49,6 +59,16 @@ public void CreatePackage(HttpContextBase context) WriteStatus(context, HttpStatusCode.InternalServerError, ex.Message); } } + + package = null; + try + { + File.Delete(temporaryFile); + } + catch (Exception) + { + WriteStatus(context, HttpStatusCode.InternalServerError, "Could not remove temporary upload file."); + } } public void PublishPackage(HttpContextBase context) diff --git a/src/NuGet.Server/Strings.resx b/src/NuGet.Server/Strings.resx index a5aa057c..a9860a03 100644 --- a/src/NuGet.Server/Strings.resx +++ b/src/NuGet.Server/Strings.resx @@ -121,6 +121,6 @@ Package {0} already exists. The server is configured to not allow overwriting packages that already exist. - Package {0} is a symbols package (it contains .pdb fiels and a /src folder). The server is configured to ignore symbols packages. + Package {0} is a symbols package (it contains .pdb files and a /src folder). The server is configured to ignore symbols packages. \ No newline at end of file diff --git a/src/NuGet.Server/packages.config b/src/NuGet.Server/packages.config index e4e591ce..72f4e492 100644 --- a/src/NuGet.Server/packages.config +++ b/src/NuGet.Server/packages.config @@ -2,8 +2,8 @@ - - + + \ No newline at end of file diff --git a/test/NuGet.Server.Tests/NuGet.Server.Tests.csproj b/test/NuGet.Server.Tests/NuGet.Server.Tests.csproj index 57117fa9..1eafd7c3 100644 --- a/test/NuGet.Server.Tests/NuGet.Server.Tests.csproj +++ b/test/NuGet.Server.Tests/NuGet.Server.Tests.csproj @@ -23,17 +23,19 @@ ..\..\packages\Microsoft.Web.Xdt.2.1.1\lib\net40\Microsoft.Web.XmlTransform.dll True - - ..\..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll + + False + ..\..\packages\Moq.4.5.0\lib\net45\Moq.dll True False - ..\..\packages\Newtonsoft.Json.8.0.1\lib\net45\Newtonsoft.Json.dll + ..\..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll True - - ..\..\packages\NuGet.Core.2.10.1\lib\net40-Client\NuGet.Core.dll + + False + ..\..\packages\NuGet.Core.2.11.1\lib\net40-Client\NuGet.Core.dll True diff --git a/test/NuGet.Server.Tests/packages.config b/test/NuGet.Server.Tests/packages.config index 4b7eef41..3c1fa71f 100644 --- a/test/NuGet.Server.Tests/packages.config +++ b/test/NuGet.Server.Tests/packages.config @@ -1,9 +1,9 @@  - - - + + +