private IndexAction <KeyedDocument> GetSearchIndexAction( NewPackageRegistration packageRegistration, IReadOnlyDictionary <NuGetVersion, Package> versionToPackage, VersionLists versionLists, SearchFilters searchFilters, SearchIndexChangeType changeType) { if (changeType == SearchIndexChangeType.Delete) { return(IndexAction.Delete(_search.Keyed( packageRegistration.PackageId, searchFilters))); } if (changeType != SearchIndexChangeType.AddFirst) { throw new ArgumentException( $"The only change types supported are {nameof(SearchIndexChangeType.AddFirst)} and " + $"{nameof(SearchIndexChangeType.Delete)}.", nameof(changeType)); } var latestFlags = _search.LatestFlagsOrNull(versionLists, searchFilters); var package = versionToPackage[latestFlags.LatestVersionInfo.ParsedVersion]; var owners = packageRegistration .Owners .OrderBy(u => u, StringComparer.InvariantCultureIgnoreCase) .ToArray(); VerifyConsistency(packageRegistration.PackageId, package); return(IndexAction.Upload <KeyedDocument>(_search.FullFromDb( packageRegistration.PackageId, searchFilters, latestFlags.LatestVersionInfo.ListedFullVersions, latestFlags.IsLatestStable, latestFlags.IsLatest, latestFlags.LatestVersionInfo.FullVersion, package, owners, packageRegistration.TotalDownloadCount, packageRegistration.IsExcludedByDefault))); }