summaryrefslogtreecommitdiff
path: root/app/services/compare_service.rb
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-07-29 12:11:16 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-07-29 12:11:16 +0300
commitbf9ce1f4cf5592f7aa1f761a5b394e7d500dc034 (patch)
tree49dd7610f09bed98db6fbfcf49cff0ac413d3f01 /app/services/compare_service.rb
parentd30454e112378c24cc9edfd7b511ca42bdb1e399 (diff)
downloadgitlab-ce-bf9ce1f4cf5592f7aa1f761a5b394e7d500dc034.tar.gz
Refactor compare logic for MR. Use satellites only for forks for better performance
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'app/services/compare_service.rb')
-rw-r--r--app/services/compare_service.rb28
1 files changed, 28 insertions, 0 deletions
diff --git a/app/services/compare_service.rb b/app/services/compare_service.rb
new file mode 100644
index 00000000000..e4c3bb1507d
--- /dev/null
+++ b/app/services/compare_service.rb
@@ -0,0 +1,28 @@
+# Compare 2 branches for one repo or between repositories
+# and return Gitlab::CompareResult object that responds to commits and diffs
+class CompareService
+ def execute(current_user, source_project, source_branch, target_project, target_branch)
+ # Try to compare branches to get commits list and diffs
+ #
+ # Note: Use satellite only when need to compare between to repos
+ # because satellites are slower then operations on bare repo
+ if target_project == source_project
+ Gitlab::CompareResult.new(
+ Gitlab::Git::Compare.new(
+ target_project.repository.raw_repository,
+ target_branch,
+ source_branch,
+ 10000
+ )
+ )
+ else
+ Gitlab::Satellite::CompareAction.new(
+ current_user,
+ target_project,
+ target_branch,
+ source_project,
+ source_branch
+ ).result
+ end
+ end
+end