Linking objects from GFM references
Created by: smashwilson
Hello!
This is an implementation in progress of linking issues from comments, also referenced in #2676, #2714, #1170, #302, and probably others. I'm pushing it out now to get early feedback on what I've already done and to hear any thoughts about edge cases I might not be accounting for.
Any mention of issues, merge requests, or commits via GitLab-flavored markdown references in descriptions, titles or follow-on notes to any of the above attaches a system note to the referenced object containing a backtracking link. Furthermore, pushing commits that match a (configurable) regexp to a project's default branch will close any issues mentioned in the closing phrase.
Left to do:
-
Only close issues from commits pushed to the project's default branch -- meaning, actually make it do that thing I said it does 😉 -
If any Mentionable
is edited, create additional cross-references for any references that weren't there to begin with. -
Merge request and issue creation don't create cross-references correctly, only notes and edits. D'oh. -
Accepting a merge request that brings in a commit that "fixes" an issue works fine, but if the "fixes" text is in a line other than the first, it happens without warning. Detect and add an "accepting this request will close issues X, Y, and Z" banner on the merge request page. -
Look into using ActiveRecord::Dirty
to implementMentionable#watch_references
, which would let us push reference updating into the observers where it belongs. -
Duplicate "mentioned in commit..." notes when a commit that mentions a thing is merged into a new branch. -
Link an issue closed notification back to the commit that closed it, when closing from a commit. "Status changed to closed by..." -
Catch references in the commits in the first push to a new branch. -
Do a final rebase and squash on upstream master.