• Rémy Coutable's avatar
    Merge branch 'sh-fix-project-deletion-private-visibility' into 'master' · 07602af1
    Rémy Coutable authored
    Fix project deletion when feature visibility is set to private
    
    Projects that are destroyed are put in the pending_delete state.
    The ProjectDestroyWorker checks whether the current user has
    access, but since the ProjectFeature class uses the default scope
    of the Project, it will not be able to find the right project.
    
    This was a regression in 8.12 that caused the following stack trace:
    
    ```
    NoMethodError: undefined method `team' for nil:NilClass
      from app/models/project_feature.rb:62:in `get_permission'
      from app/models/project_feature.rb:34:in `feature_available?'
      from app/models/project.rb:21:in `feature_available?'
      from app/policies/project_policy.rb:170:in `disabled_features!'
      from app/policies/project_policy.rb:29:in `rules'
      from app/policies/base_policy.rb:82:in `block in abilities'
      from app/policies/base_policy.rb:113:in `collect_rules'
      from app/policies/base_policy.rb:82:in `abilities'
      from app/policies/base_policy.rb:50:in `abilities'
      from app/models/ability.rb:64:in `uncached_allowed'
      from app/models/ability.rb:58:in `allowed'
      from app/models/ability.rb:49:in `allowed?'
      from app/services/base_service.rb:11:in `can?'
      from lib/gitlab/metrics/instrumentation.rb:155:in `block in can?'
      from lib/gitlab/metrics/method_call.rb:23:in `measure'
      from lib/gitlab/metrics/instrumentation.rb:155:in `can?'
      from app/services/projects/destroy_service.rb:18:in `execute'
    ```
    
    Closes #22948
    
    See merge request !6688
    Signed-off-by: default avatarRémy Coutable <remy@rymai.me>
    07602af1
project_feature.rb 1.97 KB