Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarin Jankovski <marin@gitlab.com>2014-05-06 21:51:56 +0400
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-05-13 16:33:38 +0400
commit6b04a5f9108c640f638afa8055e2a5b60f926d5a (patch)
treea0d58992330c6c18a933cec75ea8d0c50620eb7c
parent1f1c59b61d30b76d69f0f925b43a0b96465f38ed (diff)
Add support for Jira ticket mentions in format JIRA-123.
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> Conflicts: CHANGELOG-EE
-rw-r--r--doc/integration/external-issue-tracker.md4
-rw-r--r--lib/gitlab/markdown.rb20
-rw-r--r--spec/helpers/gitlab_markdown_helper_spec.rb46
-rw-r--r--spec/lib/gitlab/reference_extractor_spec.rb6
4 files changed, 70 insertions, 6 deletions
diff --git a/doc/integration/external-issue-tracker.md b/doc/integration/external-issue-tracker.md
index 7d8312075ac..e490b2f8846 100644
--- a/doc/integration/external-issue-tracker.md
+++ b/doc/integration/external-issue-tracker.md
@@ -2,8 +2,8 @@ GitLab has a great issue tracker but you can also use an external issue tracker
- the 'Issues' link on the GitLab project pages takes you to the appropriate JIRA issue index;
- clicking 'New issue' on the project dashboard creates a new JIRA issue;
-- To reference JIRA issue PROJECT-1234 in comments, use syntax #PROJECT-1234. Commit messages get turned into HTML links to the corresponding JIRA issue.
+- To reference JIRA issue PROJECT-1234 in comments, use syntax PROJECT-1234. Commit messages get turned into HTML links to the corresponding JIRA issue.
![jira screenshot](jira-integration-points.png)
-You can configure the integration in the gitlab.yml configuration file. \ No newline at end of file
+You can configure the integration in the gitlab.yml configuration file.
diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb
index de14a3eca27..dca3d7a7bed 100644
--- a/lib/gitlab/markdown.rb
+++ b/lib/gitlab/markdown.rb
@@ -98,6 +98,7 @@ module Gitlab
(?<prefix>\W)? # Prefix
( # Reference
@(?<user>[a-zA-Z][a-zA-Z0-9_\-\.]*) # User name
+ |(?<issue>([A-Z\-]+-)\d+) # JIRA Issue ID
|\#(?<issue>([a-zA-Z\-]+-)?\d+) # Issue ID
|!(?<merge_request>\d+) # MR ID
|\$(?<snippet>\d+) # Snippet ID
@@ -172,11 +173,15 @@ module Gitlab
end
def reference_issue(identifier)
- if @project.issue_exists? identifier
- url = url_for_issue(identifier)
- title = title_for_issue(identifier)
+ if @project.used_default_issues_tracker? || !external_issues_tracker_enabled?
+ if @project.issue_exists? identifier
+ url = url_for_issue(identifier)
+ title = title_for_issue(identifier)
- link_to("##{identifier}", url, html_options.merge(title: "Issue: #{title}", class: "gfm gfm-issue #{html_options[:class]}"))
+ link_to("##{identifier}", url, html_options.merge(title: "Issue: #{title}", class: "gfm gfm-issue #{html_options[:class]}"))
+ end
+ else
+ reference_jira_issue(identifier) if @project.issues_tracker == "jira"
end
end
@@ -197,5 +202,12 @@ module Gitlab
link_to(identifier, project_commit_url(@project, commit), html_options.merge(title: commit.link_title, class: "gfm gfm-commit #{html_options[:class]}"))
end
end
+
+ def reference_jira_issue(identifier)
+ url = url_for_issue(identifier)
+ title = Gitlab.config.issues_tracker[@project.issues_tracker]["title"]
+
+ link_to("#{identifier}", url, html_options.merge(title: "Issue in #{title}", class: "gfm gfm-issue #{html_options[:class]}"))
+ end
end
end
diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb
index 5bd16d1c16c..8c33ceeff26 100644
--- a/spec/helpers/gitlab_markdown_helper_spec.rb
+++ b/spec/helpers/gitlab_markdown_helper_spec.rb
@@ -181,6 +181,52 @@ describe GitlabMarkdownHelper do
include_examples 'referenced object'
end
+ describe "referencing a Jira issue" do
+ let(:actual) { "Reference to JIRA-#{issue.iid}" }
+ let(:expected) { "http://jira.example/browse/JIRA-#{issue.iid}" }
+ let(:reference) { "JIRA-#{issue.iid}" }
+
+ before do
+ hash = { "jira" => { "title" => "JIRA tracker", "issues_url" => "http://jira.example/browse/:id" } }
+ Gitlab.config.stub(:issues_tracker).and_return(hash)
+ @project.stub(:issues_tracker).and_return("jira")
+ @project.stub(:issues_tracker_id).and_return("JIRA")
+ end
+
+ it "should link using a valid id" do
+ gfm(actual).should match(expected)
+ end
+
+ it "should link with adjacent text" do
+ # Wrap the reference in parenthesis
+ gfm(actual.gsub(reference, "(#{reference})")).should match(expected)
+
+ # Append some text to the end of the reference
+ gfm(actual.gsub(reference, "#{reference}, right?")).should match(expected)
+ end
+
+ it "should keep whitespace intact" do
+ actual = "Referenced #{reference} already."
+ expected = /Referenced <a.+>[^\s]+<\/a> already/
+ gfm(actual).should match(expected)
+ end
+
+ it "should not link with an invalid id" do
+ # Modify the reference string so it's still parsed, but is invalid
+ invalid_reference = actual.gsub(/(\d+)$/, "r45")
+ gfm(invalid_reference).should == invalid_reference
+ end
+
+ it "should include a title attribute" do
+ title = "Issue in JIRA tracker"
+ gfm(actual).should match(/title="#{title}"/)
+ end
+
+ it "should include standard gfm classes" do
+ gfm(actual).should match(/class="\s?gfm gfm-issue\s?"/)
+ end
+ end
+
describe "referencing a merge request" do
let(:object) { merge_request }
let(:reference) { "!#{merge_request.iid}" }
diff --git a/spec/lib/gitlab/reference_extractor_spec.rb b/spec/lib/gitlab/reference_extractor_spec.rb
index 19259a8b79c..99fed27c796 100644
--- a/spec/lib/gitlab/reference_extractor_spec.rb
+++ b/spec/lib/gitlab/reference_extractor_spec.rb
@@ -11,6 +11,12 @@ describe Gitlab::ReferenceExtractor do
subject.issues.should == ["1234"]
end
+ it 'extracts JIRA issue references' do
+ Gitlab.config.gitlab.stub(:issues_tracker).and_return("jira")
+ subject.analyze "this one talks about issue JIRA-1234"
+ subject.issues.should == ["JIRA-1234"]
+ end
+
it 'extracts merge request references' do
subject.analyze "and here's !43, a merge request"
subject.merge_requests.should == ["43"]