summaryrefslogtreecommitdiff
path: root/app/models/project.rb
diff options
context:
space:
mode:
authorValery Sizov <valery@gitlab.com>2015-12-24 14:57:07 +0200
committerValery Sizov <valery@gitlab.com>2015-12-24 14:57:07 +0200
commit44cf1cbaafa3be1c284f202dcc67c734bbba1a8e (patch)
treec9b5824fd41cc3efa8d4b62b1e7540e729aac6d6 /app/models/project.rb
parent6d0705474791c2071153794e9be8df69375e1028 (diff)
parentd1043c4389cd92d33ff21c3fd994e78cf4d66dba (diff)
downloadgitlab-ce-emoji-picker-search.tar.gz
Merge remote-tracking branch 'origin/master' into emoji-picker-searchemoji-picker-search
Diffstat (limited to 'app/models/project.rb')
-rw-r--r--app/models/project.rb27
1 files changed, 24 insertions, 3 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index b28a7ca429c..75f85310d5f 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -64,6 +64,19 @@ class Project < ActiveRecord::Base
update_column(:last_activity_at, self.created_at)
end
+ # update visibility_levet of forks
+ after_update :update_forks_visibility_level
+ def update_forks_visibility_level
+ return unless visibility_level < visibility_level_was
+
+ forks.each do |forked_project|
+ if forked_project.visibility_level > visibility_level
+ forked_project.visibility_level = visibility_level
+ forked_project.save!
+ end
+ end
+ end
+
ActsAsTaggableOn.strict_case_match = true
acts_as_taggable_on :tags
@@ -100,9 +113,12 @@ class Project < ActiveRecord::Base
has_one :gitlab_issue_tracker_service, dependent: :destroy
has_one :external_wiki_service, dependent: :destroy
- has_one :forked_project_link, dependent: :destroy, foreign_key: "forked_to_project_id"
+ has_one :forked_project_link, dependent: :destroy, foreign_key: "forked_to_project_id"
+ has_one :forked_from_project, through: :forked_project_link
+
+ has_many :forked_project_links, foreign_key: "forked_from_project_id"
+ has_many :forks, through: :forked_project_links, source: :forked_to_project
- has_one :forked_from_project, through: :forked_project_link
# Merge Requests for target project should be removed with it
has_many :merge_requests, dependent: :destroy, foreign_key: 'target_project_id'
# Merge requests from source project should be kept when source project was removed
@@ -768,7 +784,7 @@ class Project < ActiveRecord::Base
end
def forks_count
- ForkedProjectLink.where(forked_from_project_id: self.id).count
+ forks.count
end
def find_label(name)
@@ -862,4 +878,9 @@ class Project < ActiveRecord::Base
def open_issues_count
issues.opened.count
end
+
+ def visibility_level_allowed?(level)
+ return true unless forked?
+ Gitlab::VisibilityLevel.allowed_fork_levels(forked_from_project.visibility_level).include?(level.to_i)
+ end
end