diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-30 09:08:07 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-30 09:08:07 +0000 |
commit | d08bee6aaf36fb6cd922f130f5596484c64562c0 (patch) | |
tree | 2476df6e22109ff9fa04db96a8867b2411cf7d5c /app/models/namespaces/traversal/linear.rb | |
parent | 28fd41cf28bfac77fe877b6cce83594c1f9f21a1 (diff) | |
download | gitlab-ce-d08bee6aaf36fb6cd922f130f5596484c64562c0.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/models/namespaces/traversal/linear.rb')
-rw-r--r-- | app/models/namespaces/traversal/linear.rb | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/app/models/namespaces/traversal/linear.rb b/app/models/namespaces/traversal/linear.rb index d0281f4d974..e4c343bc89f 100644 --- a/app/models/namespaces/traversal/linear.rb +++ b/app/models/namespaces/traversal/linear.rb @@ -64,6 +64,13 @@ module Namespaces traversal_ids.present? end + def use_traversal_ids_for_ancestors? + return false unless use_traversal_ids? + return false unless Feature.enabled?(:use_traversal_ids_for_ancestors, root_ancestor, default_enabled: :yaml) + + traversal_ids.present? + end + def root_ancestor return super if parent.nil? return super unless persisted? @@ -95,14 +102,33 @@ module Namespaces end def ancestors(hierarchy_order: nil) - return super() unless use_traversal_ids? - return super() unless Feature.enabled?(:use_traversal_ids_for_ancestors, root_ancestor, default_enabled: :yaml) + return super unless use_traversal_ids_for_ancestors? return self.class.none if parent_id.blank? lineage(bottom: parent, hierarchy_order: hierarchy_order) end + def ancestor_ids(hierarchy_order: nil) + return super unless use_traversal_ids_for_ancestors? + + hierarchy_order == :desc ? traversal_ids[0..-2] : traversal_ids[0..-2].reverse + end + + def self_and_ancestors(hierarchy_order: nil) + return super unless use_traversal_ids_for_ancestors? + + return self.class.where(id: id) if parent_id.blank? + + lineage(bottom: self, hierarchy_order: hierarchy_order) + end + + def self_and_ancestor_ids(hierarchy_order: nil) + return super unless use_traversal_ids_for_ancestors? + + hierarchy_order == :desc ? traversal_ids : traversal_ids.reverse + end + private # Update the traversal_ids for the full hierarchy. |