Instead of running ClosingIssueExtractor for every commit in a merge
request we can gather all the commit messages (and the merge request
description), concatenate all this together and then run
ClosingIssueExtractor only once.
The result of this is that MergeRequest#closes_issues is now between
3.5x and 4x faster than the old setup. Using a merge request with 10
commits (each referencing a number of issues to close) this reduced the
call duration from around 200 milliseconds to around 50 milliseconds.
As a result of these changes the Jira related tests for
MergeRequest#closes_issues have been removed. These tests stubbed
Commit#closes_issues meaning that the only code that was really tested
was the call to Array#uniq to filter out duplicate issues. As this code
is no longer used (nor present) the corresponding tests were removed.
Related: gitlab-org/gitlab-ce#12419
Increase the minimum length for commit SHA matching to 7
This is the git default and will help to prevent false positive matches.
Closes#12706
See merge request !2655
By simply loading the first event from the already sorted set we save
ourselves extra (slow) queries just to get the latest update timestamp.
This removes the need for Event.latest_update_time and significantly
reduces the time needed to build an Atom feed.
Fixesgitlab-org/gitlab-ce#12415
The pattern in the `::reference_pattern` class method in the
ExternalIssue model does not match all valid forms of JIRA project
names. I have updated the regex to match JIRA project names with numbers
and underscores. More information on valid JIRA project names can be
found here:
https://confluence.atlassian.com/jira/changing-the-project-key-format-192534.html
* The first character must be a letter,
* All letters used in the project key must be from the Modern Roman Alphabet and upper case, and
* Only letters, numbers or the underscore character can be used.
Ignore binary files in code search to prevent Error 500
Leaving out the -I option in "git grep" would cause an Error 500 because the
resulting line would include "Binary file X matches", which would cause the project search results to crash with the following error:
```
ActionView::Template::Error (wrong argument type nil (expected Regexp)):
1: - blob = @project.repository.parse_search_result(blob)
2: .blob-result
3: .file-holder
4: .file-title
app/models/repository.rb:742:in `sub'
app/models/repository.rb:742:in `block in parse_search_result_from_grep'
app/models/repository.rb:741:in `each_line'
app/models/repository.rb:741:in `parse_search_result_from_grep'
app/models/repository.rb:682:in `parse_search_result'
app/views/search/results/_blob.html.haml:1:in `_app_views_search_results__blob_html_haml__1959871337755590783_162450160'
app/views/search/_results.html.haml:20:in `_app_views_search__results_html_haml__2198486911700532411_58329920'
app/views/search/show.html.haml:7:in `_app_views_search_show_html_haml___1698304427272645201_62235300'
```
See merge request !2565
Creator should be added as a master of the project on creation
Fixes#4222
This also enable a project creator to add themselves as a master of the
project for existing repositories that were created in the meanwhile
that they don't appear as members.
See merge request !2520
Add sentry integration
Sentry is an event logging platform primarily focused on capturing and
aggregating exceptions. With this MR it will be possible to log and
track exceptions from GitLab to Sentry.
https://gitlab.com/gitlab-com/operations/issues/39
See merge request !2485