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 | 34 | issue['cols'] = ['ixBug'].join(',') |
35 | 35 | |
36 | 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 | 42 | end |
39 | 43 | |
40 | 44 | def body_template | ... | ... |
app/models/issue_trackers/github_issues_tracker.rb
... | ... | @@ -15,6 +15,10 @@ class IssueTrackers::GithubIssuesTracker < IssueTracker |
15 | 15 | |
16 | 16 | attr_accessor :oauth_token |
17 | 17 | |
18 | + def project_id | |
19 | + app.github_repo | |
20 | + end | |
21 | + | |
18 | 22 | def check_params |
19 | 23 | if Fields.detect {|f| self[f[0]].blank? } |
20 | 24 | errors.add :base, 'You must specify your GitHub repository, username and password' |
... | ... | @@ -30,8 +34,12 @@ class IssueTrackers::GithubIssuesTracker < IssueTracker |
30 | 34 | end |
31 | 35 | |
32 | 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 | 43 | rescue Octokit::Unauthorized |
36 | 44 | raise IssueTrackers::AuthenticationError, "Could not authenticate with GitHub. Please check your username and password." |
37 | 45 | end |
... | ... | @@ -42,6 +50,6 @@ class IssueTrackers::GithubIssuesTracker < IssueTracker |
42 | 50 | end |
43 | 51 | |
44 | 52 | def url |
45 | - "https://github.com/#{app.github_repo}/issues" | |
53 | + "https://github.com/#{project_id}/issues" | |
46 | 54 | end |
47 | 55 | end | ... | ... |
app/models/issue_trackers/lighthouse_tracker.rb
... | ... | @@ -31,7 +31,11 @@ class IssueTrackers::LighthouseTracker < IssueTracker |
31 | 31 | |
32 | 32 | ticket.tags << "errbit" |
33 | 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 | 39 | end |
36 | 40 | |
37 | 41 | def body_template | ... | ... |
app/models/issue_trackers/mingle_tracker.rb
... | ... | @@ -43,7 +43,10 @@ class IssueTrackers::MingleTracker < IssueTracker |
43 | 43 | end |
44 | 44 | |
45 | 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 | 50 | end |
48 | 51 | |
49 | 52 | def body_template | ... | ... |
app/models/issue_trackers/pivotal_labs_tracker.rb
... | ... | @@ -18,7 +18,10 @@ class IssueTrackers::PivotalLabsTracker < IssueTracker |
18 | 18 | PivotalTracker::Client.use_ssl = true |
19 | 19 | project = PivotalTracker::Project.find project_id.to_i |
20 | 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 | 25 | end |
23 | 26 | |
24 | 27 | def body_template | ... | ... |
app/models/issue_trackers/redmine_tracker.rb
... | ... | @@ -37,7 +37,10 @@ class IssueTrackers::RedmineTracker < IssueTracker |
37 | 37 | issue.subject = issue_title problem |
38 | 38 | issue.description = body_template.result(binding) |
39 | 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 | 44 | end |
42 | 45 | |
43 | 46 | def url_to_file(file_path, line_number = nil) | ... | ... |
app/models/problem.rb
... | ... | @@ -10,6 +10,7 @@ class Problem |
10 | 10 | field :last_deploy_at, :type => Time |
11 | 11 | field :resolved, :type => Boolean, :default => false |
12 | 12 | field :issue_link, :type => String |
13 | + field :issue_type, :type => String | |
13 | 14 | |
14 | 15 | # Cached fields |
15 | 16 | field :app_name, :type => String |
... | ... | @@ -145,6 +146,12 @@ class Problem |
145 | 146 | ) |
146 | 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 | 155 | private |
149 | 156 | def attribute_count_increase(name, value) |
150 | 157 | counter, index = send(name), attribute_index(value) | ... | ... |
app/views/errs/_issue_tracker_links.html.haml
1 | 1 | - if @app.issue_tracker_configured? || current_user.github_account? |
2 | 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 | 4 | = link_to 'unlink issue', unlink_issue_app_err_path(@app, @problem), :method => :delete, :confirm => "Unlink err issues?", :class => "unlink-issue" |
5 | 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 | 7 | = link_to 'retry', create_issue_app_err_path(@app, @problem), :method => :post |
8 | 8 | - else |
9 | 9 | - if current_user.github_account? && @app.github_repo? | ... | ... |
app/views/errs/_table.html.haml
... | ... | @@ -39,7 +39,7 @@ |
39 | 39 | - if any_issue_links |
40 | 40 | %td.issue_link |
41 | 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 | 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 | 44 | - if errs.none? |
45 | 45 | %tr | ... | ... |
... | ... | @@ -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 | ... | ... |