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
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-02-07 15:09:13 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-02-07 15:09:13 +0300
commit211a8c3361ccf4eb92f36edbdcf15c98fcdcc8b7 (patch)
tree0ad37172721a39b0d57240bb1b4e70f200a0d93e /app/services/merge_requests/link_lfs_objects_service.rb
parent456a7247f9e88fc2518b69a1a00e905c6db6d775 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/merge_requests/link_lfs_objects_service.rb')
-rw-r--r--app/services/merge_requests/link_lfs_objects_service.rb31
1 files changed, 31 insertions, 0 deletions
diff --git a/app/services/merge_requests/link_lfs_objects_service.rb b/app/services/merge_requests/link_lfs_objects_service.rb
new file mode 100644
index 00000000000..191da594095
--- /dev/null
+++ b/app/services/merge_requests/link_lfs_objects_service.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+module MergeRequests
+ class LinkLfsObjectsService < ::BaseService
+ def execute(merge_request, oldrev: merge_request.diff_base_sha, newrev: merge_request.diff_head_sha)
+ return if merge_request.source_project == project
+ return if no_changes?(oldrev, newrev)
+
+ new_lfs_oids = lfs_oids(merge_request.source_project.repository, oldrev, newrev)
+
+ return if new_lfs_oids.empty?
+
+ Projects::LfsPointers::LfsLinkService
+ .new(project)
+ .execute(new_lfs_oids)
+ end
+
+ private
+
+ def no_changes?(oldrev, newrev)
+ oldrev == newrev
+ end
+
+ def lfs_oids(source_repository, oldrev, newrev)
+ Gitlab::Git::LfsChanges
+ .new(source_repository, newrev)
+ .new_pointers(not_in: [oldrev])
+ .map(&:lfs_oid)
+ end
+ end
+end