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 | |
| 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')
| -rw-r--r-- | app/services/compare_service.rb | 28 | ||||
| -rw-r--r-- | app/services/merge_requests/build_service.rb | 11 |
2 files changed, 33 insertions, 6 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 diff --git a/app/services/merge_requests/build_service.rb b/app/services/merge_requests/build_service.rb index 81dd8887395..1475973e543 100644 --- a/app/services/merge_requests/build_service.rb +++ b/app/services/merge_requests/build_service.rb @@ -19,16 +19,15 @@ module MergeRequests # Generate suggested MR title based on source branch name merge_request.title = merge_request.source_branch.titleize.humanize - # Try to compare branches to get commits list and diffs - compare_action = Gitlab::Satellite::CompareAction.new( + compare_result = CompareService.new.execute( current_user, + merge_request.source_project, + merge_request.source_branch, merge_request.target_project, merge_request.target_branch, - merge_request.source_project, - merge_request.source_branch ) - commits = compare_action.commits + commits = compare_result.commits # At this point we decide if merge request can be created # If we have at least one commit to merge -> creation allowed @@ -38,7 +37,7 @@ module MergeRequests merge_request.compare_failed = false # Try to collect diff for merge request. - diffs = compare_action.diffs + diffs = compare_result.diffs if diffs.present? merge_request.compare_diffs = diffs |
