Display related merge requests in commit detail page
What does this MR do?
Display merge requests in the commit that was introduced in page.
Are there points in the code the reviewer needs to double check?
- UX (Following to #2383 (closed))
- SQL performance (Adding index on
merge_request_diff_commits.sha
)
The following is EXPLAIN ANALYSE
output made by commit.merge_requests
.
Data
SELECT COUNT(*) FROM merge_requests; count ------- 945SELECT COUNT(*) FROM merge_request_diffs; count
947
SELECT COUNT(*) FROM merge_request_diff_commits; count
58990
Query
SELECT "merge_requests".* FROM "merge_requests" WHERE "merge_requests"."deleted_at" IS NULL AND "merge_requests"."target_project_id" = 1 AND (EXISTS ( SELECT 1 FROM "merge_request_diffs" INNER JOIN "merge_request_diff_commits" ON "merge_request_diff_commits"."merge_request_diff_id" = "merge_request_diffs"."id" WHERE (merge_requests.latest_merge_request_diff_id = merge_request_diffs.id) AND "merge_request_diff_commits"."sha" = '\xf74b1b58339452106f173d34f722831619500c5c' ));
Query plan
QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Nested Loop (cost=86.82..92.70 rows=4 width=739) (actual time=0.576..0.623 rows=11 loops=1) Join Filter: (merge_requests.latest_merge_request_diff_id = merge_request_diff_commits.merge_request_diff_id) -> HashAggregate (cost=86.55..86.64 rows=9 width=8) (actual time=0.565..0.566 rows=11 loops=1) Group Key: merge_request_diffs.id -> Hash Join (cost=52.11..86.52 rows=9 width=8) (actual time=0.540..0.556 rows=11 loops=1) Hash Cond: (merge_request_diff_commits.merge_request_diff_id = merge_request_diffs.id) -> Bitmap Heap Scan on merge_request_diff_commits (cost=4.48..38.78 rows=9 width=4) (actual time=0.035..0.045 rows=11 loops=1) Recheck Cond: (sha = '\xf74b1b58339452106f173d34f722831619500c5c'::bytea) Heap Blocks: exact=11 -> Bitmap Index Scan on index_merge_request_diff_commits_on_sha (cost=0.00..4.48 rows=9 width=0) (actual time=0.020..0.020 rows=11 loops=1) Index Cond: (sha = '\xf74b1b58339452106f173d34f722831619500c5c'::bytea) -> Hash (cost=35.61..35.61 rows=961 width=4) (actual time=0.488..0.488 rows=947 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 42kB -> Seq Scan on merge_request_diffs (cost=0.00..35.61 rows=961 width=4) (actual time=0.006..0.253 rows=947 loops=1) -> Index Scan using index_merge_requests_on_latest_merge_request_diff_id on merge_requests (cost=0.28..0.66 rows=1 width=739) (actual time=0.004..0.004 rows=1 loops=11) Index Cond: (latest_merge_request_diff_id = merge_request_diffs.id) Filter: ((deleted_at IS NULL) AND (target_project_id = 1)) Planning time: 1.093 ms Execution time: 0.859 ms
Results from staging, using the above query with target_project_id = 13083
(this project) and SHAs 7e71f958ac721f5c36c20a5366c1e46adce4c67d
(single result) and 593070a01a29647d6101a5fa3943ec55dbf61b9c
(no result):
- Single result - 0.402ms.
- No results - 0.149ms.
Why was this MR needed?
I use git blame to know why lines in source code have been changed.
I can know the commit that the lines changed in, but it is difficult to find merge requests from the commit.
Screenshots (if relevant)
Does this MR meet the acceptance criteria?
-
Changelog entry added, if necessary -
Documentation created/updated -
API support added -
Tests added for this feature/bug - Review
-
Has been reviewed by UX -
Has been reviewed by Frontend -
Has been reviewed by Backend -
Has been reviewed by Database
-
-
Conform by the merge request performance guides -
Conform by the style guides -
Squashed related commits together
What are the relevant issue numbers?
Closes #2383 (closed)
Edited by Sean McGivern