Commit 847f4d314203f8de3ea982526ea1cc6a9a43700d
1 parent
f3f95fd7
Exists in
master
and in
1 other branch
Added issue_type to problems, to record which issue tracker the link belongs to …
…(in case tracker is changed, or multiple trackers are registered)
Showing
11 changed files
with
60 additions
and
11 deletions
Show diff stats
app/models/issue_tracker.rb
app/models/issue_trackers/fogbugz_tracker.rb
@@ -34,7 +34,11 @@ class IssueTrackers::FogbugzTracker < IssueTracker | @@ -34,7 +34,11 @@ class IssueTrackers::FogbugzTracker < IssueTracker | ||
34 | issue['cols'] = ['ixBug'].join(',') | 34 | issue['cols'] = ['ixBug'].join(',') |
35 | 35 | ||
36 | fb_resp = fogbugz.command(:new, issue) | 36 | fb_resp = fogbugz.command(:new, issue) |
37 | - problem.update_attribute :issue_link, "https://#{account}.fogbugz.com/default.asp?#{fb_resp['case']['ixBug']}" | 37 | + problem.update_attributes( |
38 | + :issue_link => "https://#{account}.fogbugz.com/default.asp?#{fb_resp['case']['ixBug']}", | ||
39 | + :issue_type => Label | ||
40 | + ) | ||
41 | + | ||
38 | end | 42 | end |
39 | 43 | ||
40 | def body_template | 44 | def body_template |
app/models/issue_trackers/github_issues_tracker.rb
@@ -15,6 +15,10 @@ class IssueTrackers::GithubIssuesTracker < IssueTracker | @@ -15,6 +15,10 @@ class IssueTrackers::GithubIssuesTracker < IssueTracker | ||
15 | 15 | ||
16 | attr_accessor :oauth_token | 16 | attr_accessor :oauth_token |
17 | 17 | ||
18 | + def project_id | ||
19 | + app.github_repo | ||
20 | + end | ||
21 | + | ||
18 | def check_params | 22 | def check_params |
19 | if Fields.detect {|f| self[f[0]].blank? } | 23 | if Fields.detect {|f| self[f[0]].blank? } |
20 | errors.add :base, 'You must specify your GitHub repository, username and password' | 24 | errors.add :base, 'You must specify your GitHub repository, username and password' |
@@ -30,8 +34,12 @@ class IssueTrackers::GithubIssuesTracker < IssueTracker | @@ -30,8 +34,12 @@ class IssueTrackers::GithubIssuesTracker < IssueTracker | ||
30 | end | 34 | end |
31 | 35 | ||
32 | begin | 36 | begin |
33 | - issue = client.create_issue(app.github_repo, issue_title(problem), body_template.result(binding).unpack('C*').pack('U*'), options = {}) | ||
34 | - problem.update_attribute :issue_link, issue.html_url | 37 | + issue = client.create_issue(project_id, issue_title(problem), body_template.result(binding).unpack('C*').pack('U*'), options = {}) |
38 | + problem.update_attributes( | ||
39 | + :issue_link => issue.html_url, | ||
40 | + :issue_type => Label | ||
41 | + ) | ||
42 | + | ||
35 | rescue Octokit::Unauthorized | 43 | rescue Octokit::Unauthorized |
36 | raise IssueTrackers::AuthenticationError, "Could not authenticate with GitHub. Please check your username and password." | 44 | raise IssueTrackers::AuthenticationError, "Could not authenticate with GitHub. Please check your username and password." |
37 | end | 45 | end |
@@ -42,6 +50,6 @@ class IssueTrackers::GithubIssuesTracker < IssueTracker | @@ -42,6 +50,6 @@ class IssueTrackers::GithubIssuesTracker < IssueTracker | ||
42 | end | 50 | end |
43 | 51 | ||
44 | def url | 52 | def url |
45 | - "https://github.com/#{app.github_repo}/issues" | 53 | + "https://github.com/#{project_id}/issues" |
46 | end | 54 | end |
47 | end | 55 | end |
app/models/issue_trackers/lighthouse_tracker.rb
@@ -31,7 +31,11 @@ class IssueTrackers::LighthouseTracker < IssueTracker | @@ -31,7 +31,11 @@ class IssueTrackers::LighthouseTracker < IssueTracker | ||
31 | 31 | ||
32 | ticket.tags << "errbit" | 32 | ticket.tags << "errbit" |
33 | ticket.save! | 33 | ticket.save! |
34 | - problem.update_attribute :issue_link, "#{Lighthouse::Ticket.site.to_s.sub(/#{Lighthouse::Ticket.site.path}$/, '')}#{Lighthouse::Ticket.element_path(ticket.id, :project_id => project_id)}".sub(/\.xml$/, '') | 34 | + problem.update_attributes( |
35 | + :issue_link => "#{Lighthouse::Ticket.site.to_s.sub(/#{Lighthouse::Ticket.site.path}$/, '')}#{Lighthouse::Ticket.element_path(ticket.id, :project_id => project_id)}".sub(/\.xml$/, ''), | ||
36 | + :issue_type => Label | ||
37 | + ) | ||
38 | + | ||
35 | end | 39 | end |
36 | 40 | ||
37 | def body_template | 41 | def body_template |
app/models/issue_trackers/mingle_tracker.rb
@@ -43,7 +43,10 @@ class IssueTrackers::MingleTracker < IssueTracker | @@ -43,7 +43,10 @@ class IssueTrackers::MingleTracker < IssueTracker | ||
43 | end | 43 | end |
44 | 44 | ||
45 | card.save! | 45 | card.save! |
46 | - problem.update_attribute :issue_link, URI.parse("#{account}/projects/#{project_id}/cards/#{card.id}").to_s | 46 | + problem.update_attributes( |
47 | + :issue_link => URI.parse("#{account}/projects/#{project_id}/cards/#{card.id}").to_s, | ||
48 | + :issue_type => Label | ||
49 | + ) | ||
47 | end | 50 | end |
48 | 51 | ||
49 | def body_template | 52 | def body_template |
app/models/issue_trackers/pivotal_labs_tracker.rb
@@ -18,7 +18,10 @@ class IssueTrackers::PivotalLabsTracker < IssueTracker | @@ -18,7 +18,10 @@ class IssueTrackers::PivotalLabsTracker < IssueTracker | ||
18 | PivotalTracker::Client.use_ssl = true | 18 | PivotalTracker::Client.use_ssl = true |
19 | project = PivotalTracker::Project.find project_id.to_i | 19 | project = PivotalTracker::Project.find project_id.to_i |
20 | story = project.stories.create :name => issue_title(problem), :story_type => 'bug', :description => body_template.result(binding) | 20 | story = project.stories.create :name => issue_title(problem), :story_type => 'bug', :description => body_template.result(binding) |
21 | - problem.update_attribute :issue_link, "https://www.pivotaltracker.com/story/show/#{story.id}" | 21 | + problem.update_attributes( |
22 | + :issue_link => "https://www.pivotaltracker.com/story/show/#{story.id}", | ||
23 | + :issue_type => Label | ||
24 | + ) | ||
22 | end | 25 | end |
23 | 26 | ||
24 | def body_template | 27 | def body_template |
app/models/issue_trackers/redmine_tracker.rb
@@ -37,7 +37,10 @@ class IssueTrackers::RedmineTracker < IssueTracker | @@ -37,7 +37,10 @@ class IssueTrackers::RedmineTracker < IssueTracker | ||
37 | issue.subject = issue_title problem | 37 | issue.subject = issue_title problem |
38 | issue.description = body_template.result(binding) | 38 | issue.description = body_template.result(binding) |
39 | issue.save! | 39 | issue.save! |
40 | - problem.update_attribute :issue_link, "#{RedmineClient::Issue.site.to_s.sub(/#{RedmineClient::Issue.site.path}$/, '')}#{RedmineClient::Issue.element_path(issue.id, :project_id => project_id)}".sub(/\.xml\?project_id=#{project_id}$/, "\?project_id=#{project_id}") | 40 | + problem.update_attributes( |
41 | + :issue_link => "#{RedmineClient::Issue.site.to_s.sub(/#{RedmineClient::Issue.site.path}$/, '')}#{RedmineClient::Issue.element_path(issue.id, :project_id => project_id)}".sub(/\.xml\?project_id=#{project_id}$/, "\?project_id=#{project_id}"), | ||
42 | + :issue_type => Label | ||
43 | + ) | ||
41 | end | 44 | end |
42 | 45 | ||
43 | def url_to_file(file_path, line_number = nil) | 46 | def url_to_file(file_path, line_number = nil) |
app/models/problem.rb
@@ -10,6 +10,7 @@ class Problem | @@ -10,6 +10,7 @@ class Problem | ||
10 | field :last_deploy_at, :type => Time | 10 | field :last_deploy_at, :type => Time |
11 | field :resolved, :type => Boolean, :default => false | 11 | field :resolved, :type => Boolean, :default => false |
12 | field :issue_link, :type => String | 12 | field :issue_link, :type => String |
13 | + field :issue_type, :type => String | ||
13 | 14 | ||
14 | # Cached fields | 15 | # Cached fields |
15 | field :app_name, :type => String | 16 | field :app_name, :type => String |
@@ -145,6 +146,12 @@ class Problem | @@ -145,6 +146,12 @@ class Problem | ||
145 | ) | 146 | ) |
146 | end | 147 | end |
147 | 148 | ||
149 | + def issue_type | ||
150 | + # Return issue_type if configured, but fall back to detecting app's issue tracker | ||
151 | + attributes['issue_type'] ||= | ||
152 | + (app.issue_tracker_configured? && app.issue_tracker.class::Label) || nil | ||
153 | + end | ||
154 | + | ||
148 | private | 155 | private |
149 | def attribute_count_increase(name, value) | 156 | def attribute_count_increase(name, value) |
150 | counter, index = send(name), attribute_index(value) | 157 | counter, index = send(name), attribute_index(value) |
app/views/errs/_issue_tracker_links.html.haml
1 | - if @app.issue_tracker_configured? || current_user.github_account? | 1 | - if @app.issue_tracker_configured? || current_user.github_account? |
2 | - if @problem.issue_link.present? | 2 | - if @problem.issue_link.present? |
3 | - %span= link_to 'go to issue', @problem.issue_link, :class => "#{@app.issue_tracker.class::Label}_goto goto-issue" | 3 | + %span= link_to 'go to issue', @problem.issue_link, :class => "#{@problem.issue_type}_goto goto-issue" |
4 | = link_to 'unlink issue', unlink_issue_app_err_path(@app, @problem), :method => :delete, :confirm => "Unlink err issues?", :class => "unlink-issue" | 4 | = link_to 'unlink issue', unlink_issue_app_err_path(@app, @problem), :method => :delete, :confirm => "Unlink err issues?", :class => "unlink-issue" |
5 | - elsif @problem.issue_link == "pending" | 5 | - elsif @problem.issue_link == "pending" |
6 | - %span.disabled= link_to 'creating...', '#', :class => "#{@app.issue_tracker.class::Label}_inactive create-issue" | 6 | + %span.disabled= link_to 'creating...', '#', :class => "#{@problem.issue_type}_inactive create-issue" |
7 | = link_to 'retry', create_issue_app_err_path(@app, @problem), :method => :post | 7 | = link_to 'retry', create_issue_app_err_path(@app, @problem), :method => :post |
8 | - else | 8 | - else |
9 | - if current_user.github_account? && @app.github_repo? | 9 | - if current_user.github_account? && @app.github_repo? |
app/views/errs/_table.html.haml
@@ -39,7 +39,7 @@ | @@ -39,7 +39,7 @@ | ||
39 | - if any_issue_links | 39 | - if any_issue_links |
40 | %td.issue_link | 40 | %td.issue_link |
41 | - if problem.app.issue_tracker_configured? && problem.issue_link.present? && problem.issue_link != 'pending' | 41 | - if problem.app.issue_tracker_configured? && problem.issue_link.present? && problem.issue_link != 'pending' |
42 | - = link_to image_tag("#{problem.app.issue_tracker.class::Label}_goto.png"), problem.issue_link, :target => "_blank" | 42 | + = link_to image_tag("#{problem.issue_type}_goto.png"), problem.issue_link, :target => "_blank" |
43 | %td.resolve= link_to image_tag("thumbs-up.png"), resolve_app_err_path(problem.app, problem), :title => "Resolve", :method => :put, :confirm => err_confirm, :class => 'resolve' if problem.unresolved? | 43 | %td.resolve= link_to image_tag("thumbs-up.png"), resolve_app_err_path(problem.app, problem), :title => "Resolve", :method => :put, :confirm => err_confirm, :class => 'resolve' if problem.unresolved? |
44 | - if errs.none? | 44 | - if errs.none? |
45 | %tr | 45 | %tr |
@@ -0,0 +1,12 @@ | @@ -0,0 +1,12 @@ | ||
1 | +class SetIssueTypeOnProblems < Mongoid::Migration | ||
2 | + def self.up | ||
3 | + Problem.all.each do |p| | ||
4 | + if p.issue_link.present? && p.app.issue_tracker_configured? | ||
5 | + p.update_attribute :issue_type, p.app.issue_tracker.class::Label | ||
6 | + end | ||
7 | + end | ||
8 | + end | ||
9 | + | ||
10 | + def self.down | ||
11 | + end | ||
12 | +end |