summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorNick Thomas <nick@gitlab.com>2018-10-19 01:24:20 +0000
committerNick Thomas <nick@gitlab.com>2018-10-19 01:24:20 +0000
commitb9cb0e1632d21860f0e36dc970e3318da632330f (patch)
treed1b0b03515165ee6f156ef29d16b5a9e2ea6f477 /app/models
parent3a9b75ab96030e3b7a454dff3895293e9dfb4e0d (diff)
parentd60cc75d4355be9adf2d6195e49c4e6a96ca336c (diff)
downloadgitlab-ce-b9cb0e1632d21860f0e36dc970e3318da632330f.tar.gz
Merge branch 'ac-review-app-changes-33418' into 'master'
Expose changed URLs in MR ci_environments_status See merge request gitlab-org/gitlab-ce!22228
Diffstat (limited to 'app/models')
-rw-r--r--app/models/environment_status.rb56
1 files changed, 56 insertions, 0 deletions
diff --git a/app/models/environment_status.rb b/app/models/environment_status.rb
new file mode 100644
index 00000000000..5ff3acc0e58
--- /dev/null
+++ b/app/models/environment_status.rb
@@ -0,0 +1,56 @@
+# frozen_string_literal: true
+
+class EnvironmentStatus
+ include Gitlab::Utils::StrongMemoize
+
+ attr_reader :environment, :merge_request
+
+ delegate :id, to: :environment
+ delegate :name, to: :environment
+ delegate :project, to: :environment
+ delegate :deployed_at, to: :deployment, allow_nil: true
+
+ def initialize(environment, merge_request)
+ @environment = environment
+ @merge_request = merge_request
+ end
+
+ def deployment
+ strong_memoize(:deployment) do
+ environment.first_deployment_for(merge_request.diff_head_sha)
+ end
+ end
+
+ def deployed_at
+ deployment&.created_at
+ end
+
+ def changes
+ sha = merge_request.diff_head_sha
+ return [] if project.route_map_for(sha).nil?
+
+ changed_files.map { |file| build_change(file, sha) }.compact
+ end
+
+ def changed_files
+ merge_request.merge_request_diff
+ .merge_request_diff_files.where(deleted_file: false)
+ end
+
+ private
+
+ PAGE_EXTENSIONS = /\A\.(s?html?|php|asp|cgi|pl)\z/i.freeze
+
+ def build_change(file, sha)
+ public_path = project.public_path_for_source_path(file.new_path, sha)
+ return if public_path.nil?
+
+ ext = File.extname(public_path)
+ return if ext.present? && ext !~ PAGE_EXTENSIONS
+
+ {
+ path: public_path,
+ external_url: environment.external_url_for(file.new_path, sha)
+ }
+ end
+end