/// <summary> /// Unlist or delete a package. /// </summary> public override void RemovePackage(IPackage package) { if (package != null) { MonitorFileSystem(false); try { lock (_syncLock) { _logger.Log(LogLevel.Info, "Start removing package {0} {1}.", package.Id, package.Version); if (EnableDelisting) { var physicalFileSystem = _fileSystem as PhysicalFileSystem; if (physicalFileSystem != null) { var fileName = physicalFileSystem.GetFullPath( GetPackageFileName(package.Id, package.Version)); if (File.Exists(fileName)) { // Set "unlisted" File.SetAttributes(fileName, File.GetAttributes(fileName) | FileAttributes.Hidden); // Update metadata store var serverPackage = FindPackage(package.Id, package.Version) as ServerPackage; if (serverPackage != null) { serverPackage.Listed = false; _serverPackageStore.Store(serverPackage); } // Note that delisted files can still be queried, therefore not deleting persisted hashes if present. // Also, no need to flip hidden attribute on these since only the one from the nupkg is queried. _logger.Log(LogLevel.Info, "Unlisted package {0} {1}.", package.Id, package.Version); } else { _logger.Log(LogLevel.Error, "Error removing package {0} {1} - could not find package file {2}", package.Id, package.Version, fileName); } } } else { // Remove from filesystem _expandedPackageRepository.RemovePackage(package); // Update metadata store _serverPackageStore.Remove(package.Id, package.Version); _logger.Log(LogLevel.Info, "Finished removing package {0} {1}.", package.Id, package.Version); } } } finally { MonitorFileSystem(true); } } }