Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-10-03 18:07:07 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2019-10-03 18:07:07 +0300
commit9a1c5456747a7b5b218b8b44e4b43396bf7fd705 (patch)
treedc5873f33437c897389e923a59365fb192d87fb8 /lib
parent927cfbfe63dd3dc64df9d341d7c4328a2fe3597f (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/git/changes.rb74
-rw-r--r--lib/gitlab/git_post_receive.rb43
-rw-r--r--lib/gitlab/gon_helper.rb3
3 files changed, 97 insertions, 23 deletions
diff --git a/lib/gitlab/git/changes.rb b/lib/gitlab/git/changes.rb
new file mode 100644
index 00000000000..4e888eec44f
--- /dev/null
+++ b/lib/gitlab/git/changes.rb
@@ -0,0 +1,74 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Git
+ class Changes
+ include Enumerable
+
+ attr_reader :repository_data
+
+ def initialize
+ @refs = Set.new
+ @items = []
+ @branches_index = []
+ @tags_index = []
+ @repository_data = []
+ end
+
+ def includes_branches?
+ branches_index.any?
+ end
+
+ def includes_tags?
+ tags_index.any?
+ end
+
+ def add_branch_change(change)
+ @branches_index << add_change(change)
+ self
+ end
+
+ def add_tag_change(change)
+ @tags_index << add_change(change)
+ self
+ end
+
+ def each
+ items.each do |item|
+ yield item
+ end
+ end
+
+ def refs
+ @refs.to_a
+ end
+
+ def branch_changes
+ items.values_at(*branches_index)
+ end
+
+ def tag_changes
+ items.values_at(*tags_index)
+ end
+
+ private
+
+ attr_reader :items, :branches_index, :tags_index
+
+ def add_change(change)
+ # refs and repository_data are being cached when a change is added to
+ # the collection to remove the need to iterate through changes multiple
+ # times.
+ @refs << change[:ref]
+ @repository_data << build_change_repository_data(change)
+ @items << change
+
+ @items.size - 1
+ end
+
+ def build_change_repository_data(change)
+ DataBuilder::Repository.single_change(change[:oldrev], change[:newrev], change[:ref])
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/git_post_receive.rb b/lib/gitlab/git_post_receive.rb
index 2a8bcd015a8..5264bae47a1 100644
--- a/lib/gitlab/git_post_receive.rb
+++ b/lib/gitlab/git_post_receive.rb
@@ -8,7 +8,7 @@ module Gitlab
def initialize(project, identifier, changes, push_options = {})
@project = project
@identifier = identifier
- @changes = deserialize_changes(changes)
+ @changes = parse_changes(changes)
@push_options = push_options
end
@@ -16,27 +16,12 @@ module Gitlab
super(identifier)
end
- def changes_refs
- return changes unless block_given?
-
- changes.each do |change|
- change.strip!
- oldrev, newrev, ref = change.split(' ')
-
- yield oldrev, newrev, ref
- end
- end
-
def includes_branches?
- enum_for(:changes_refs).any? do |_oldrev, _newrev, ref|
- Gitlab::Git.branch_ref?(ref)
- end
+ changes.includes_branches?
end
def includes_tags?
- enum_for(:changes_refs).any? do |_oldrev, _newrev, ref|
- Gitlab::Git.tag_ref?(ref)
- end
+ changes.includes_tags?
end
def includes_default_branch?
@@ -44,16 +29,28 @@ module Gitlab
# first branch pushed will be the default.
return true unless project.default_branch.present?
- enum_for(:changes_refs).any? do |_oldrev, _newrev, ref|
- Gitlab::Git.branch_ref?(ref) &&
- Gitlab::Git.branch_name(ref) == project.default_branch
+ changes.branch_changes.any? do |change|
+ Gitlab::Git.branch_name(change[:ref]) == project.default_branch
end
end
private
- def deserialize_changes(changes)
- utf8_encode_changes(changes).each_line
+ def parse_changes(changes)
+ deserialized_changes = utf8_encode_changes(changes).each_line
+
+ Git::Changes.new.tap do |collection|
+ deserialized_changes.each_with_index do |raw_change, index|
+ oldrev, newrev, ref = raw_change.strip.split(' ')
+ change = { index: index, oldrev: oldrev, newrev: newrev, ref: ref }
+
+ if Git.branch_ref?(ref)
+ collection.add_branch_change(change)
+ elsif Git.tag_ref?(ref)
+ collection.add_tag_change(change)
+ end
+ end
+ end
end
def utf8_encode_changes(changes)
diff --git a/lib/gitlab/gon_helper.rb b/lib/gitlab/gon_helper.rb
index 2616a19fdaa..f1e31a615a4 100644
--- a/lib/gitlab/gon_helper.rb
+++ b/lib/gitlab/gon_helper.rb
@@ -42,6 +42,9 @@ module Gitlab
# Initialize gon.features with any flags that should be
# made globally available to the frontend
push_frontend_feature_flag(:suppress_ajax_navigation_errors, default_enabled: true)
+
+ # Flag controls a GFM feature used across many routes.
+ push_frontend_feature_flag(:gfm_grafana_integration)
end
# Exposes the state of a feature flag to the frontend code.