22// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33
44using System ;
5+ using System . Linq ;
56using NuGet . Services . Entities ;
67using NuGet . Services . FeatureFlags ;
78using NuGetGallery . Features ;
@@ -22,6 +23,7 @@ public class FeatureFlagService : IFeatureFlagService
2223 private const string PackagesAtomFeedFeatureName = GalleryPrefix + "PackagesAtomFeed" ;
2324
2425 private const string ManageDeprecationFeatureName = GalleryPrefix + "ManageDeprecation" ;
26+ private const string ManageDeprecationForManyVersionsFeatureName = GalleryPrefix + "ManageDeprecationMany" ;
2527 private const string ODataReadOnlyDatabaseFeatureName = GalleryPrefix + "ODataReadOnlyDatabase" ;
2628
2729 private readonly IFeatureFlagClient _client ;
@@ -46,9 +48,20 @@ public bool IsPackagesAtomFeedEnabled()
4648 return _client . IsEnabled ( PackagesAtomFeedFeatureName , defaultValue : false ) ;
4749 }
4850
49- public bool IsManageDeprecationEnabled ( User user )
51+ /// <summary>
52+ /// The number of versions a package needs to have before it should be flighted using <see cref="ManageDeprecationForManyVersionsFeatureName"/> instead of <see cref="ManageDeprecationFeatureName"/>.
53+ /// </summary>
54+ private const int _manageDeprecationForManyVersionsThreshold = 500 ;
55+
56+ public bool IsManageDeprecationEnabled ( User user , PackageRegistration registration )
5057 {
51- return _client . IsEnabled ( ManageDeprecationFeatureName , user , defaultValue : false ) ;
58+ if ( ! _client . IsEnabled ( ManageDeprecationFeatureName , user , defaultValue : false ) )
59+ {
60+ return false ;
61+ }
62+
63+ return registration . Packages . Count ( ) < _manageDeprecationForManyVersionsThreshold
64+ || _client . IsEnabled ( ManageDeprecationForManyVersionsFeatureName , user , defaultValue : true ) ;
5265 }
5366
5467 public bool AreEmbeddedIconsEnabled ( User user )
0 commit comments