diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2014-07-29 12:11:16 +0300 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2014-07-29 12:11:16 +0300 |
commit | bf9ce1f4cf5592f7aa1f761a5b394e7d500dc034 (patch) | |
tree | 49dd7610f09bed98db6fbfcf49cff0ac413d3f01 /app/services/compare_service.rb | |
parent | d30454e112378c24cc9edfd7b511ca42bdb1e399 (diff) | |
download | gitlab-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.rb | 28 |
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 |