コード例 #1
0
        /// <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);
                }
            }
        }