summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorgitlabhq <m@gitlabhq.com>2011-11-24 08:08:20 -0500
committergitlabhq <m@gitlabhq.com>2011-11-24 08:08:20 -0500
commitee2d3de1a634611a1c660516c955be0d3000904b (patch)
treef4bb868df7cfc4400a50a4f6056a188503f718f5 /app
parentb4c40c212c377ee04bb16065388c24b4bd3ec656 (diff)
downloadgitlab-ce-ee2d3de1a634611a1c660516c955be0d3000904b.tar.gz
ability to attach branch to issue
Diffstat (limited to 'app')
-rw-r--r--app/assets/stylesheets/projects.css.scss1
-rw-r--r--app/controllers/issues_controller.rb9
-rw-r--r--app/models/issue.rb5
-rw-r--r--app/views/issues/edit.html.haml37
-rw-r--r--app/views/issues/show.html.haml131
5 files changed, 134 insertions, 49 deletions
diff --git a/app/assets/stylesheets/projects.css.scss b/app/assets/stylesheets/projects.css.scss
index 029b8d3fbd7..5466d21afcf 100644
--- a/app/assets/stylesheets/projects.css.scss
+++ b/app/assets/stylesheets/projects.css.scss
@@ -160,6 +160,7 @@ input.ssh_project_url {
.new_issue,
.new_note,
.edit_user,
+.edit_issue,
.new_project,
.new_snippet,
.edit_snippet,
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index 5a18879edc3..daaf8fa2f19 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -9,7 +9,7 @@ class IssuesController < ApplicationController
before_filter :authorize_read_issue!
before_filter :authorize_write_issue!, :only => [:new, :create, :close, :edit, :update, :sort]
- respond_to :js
+ respond_to :js, :html
def index
@issues = case params[:f].to_i
@@ -41,6 +41,13 @@ class IssuesController < ApplicationController
@notes = @issue.notes.inc_author.order("created_at DESC").limit(20)
@note = @project.notes.new(:noteable => @issue)
+ @commits = if @issue.branch_name && @project.repo.heads.map(&:name).include?(@issue.branch_name)
+ @project.repo.commits_between("master", @issue.branch_name)
+ else
+ []
+ end
+
+
respond_to do |format|
format.html
format.js { respond_with_notes }
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 2a880037091..c06f173888b 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -15,6 +15,11 @@ class Issue < ActiveRecord::Base
:to => :author,
:prefix => true
+ delegate :name,
+ :email,
+ :to => :assignee,
+ :prefix => true
+
validates :title,
:presence => true,
:length => { :within => 0..255 }
diff --git a/app/views/issues/edit.html.haml b/app/views/issues/edit.html.haml
new file mode 100644
index 00000000000..872a64b467f
--- /dev/null
+++ b/app/views/issues/edit.html.haml
@@ -0,0 +1,37 @@
+%div.issue-form-holder
+ = form_for [@project, @issue] do |f|
+ -if @issue.errors.any?
+ %ul
+ - @issue.errors.full_messages.each do |msg|
+ %li= msg
+
+ %table
+ %thead
+ %th Name
+ %th Value
+ %tr
+ %td= f.label :title
+ %td= f.text_area :title, :style => "width:450px; height:100px", :maxlength => 255
+ %tr
+ %td= f.label :assignee_id
+ %td= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" })
+ %tr
+ %td= f.label :branch_name
+ %td= f.select(:branch_name, @project.heads.map(&:name), { :include_blank => "Select git branch" })
+ %tr
+ %td
+ = f.label :critical, "Critical"
+ %br
+ %td= f.check_box :critical
+ - unless @issue.new_record?
+ %tr
+ %td= f.label :closed
+ %td= f.check_box :closed
+ = f.submit 'Save', :class => "grey-button"
+
+:javascript
+ $(function(){
+ $('select#issue_branch_name').selectmenu({width:300});
+ $('select#issue_assignee_id').selectmenu({width:300});
+ });
+
diff --git a/app/views/issues/show.html.haml b/app/views/issues/show.html.haml
index 9d4e0bc627d..7357449ccba 100644
--- a/app/views/issues/show.html.haml
+++ b/app/views/issues/show.html.haml
@@ -1,50 +1,85 @@
-%h2
- %strong
- Issue
- = "##{@issue.id}"
- &ndash;
- = html_escape(@issue.title)
-.left.width-65p
- .issue_notes= render "notes/notes"
-
- .loading{ :style => "display:none;"}
- %center= image_tag "ajax-loader.gif"
-.right.width-30p
- .span-8
+%h2.icon
+ %span
+ %d
+ = "Issue ##{@issue.id}"
+ &ndash;
+ = truncate(@issue.title, :length => 50)
+
+- unless @commits.blank?
+ .right
+ = link_to 'Browse Code', tree_project_ref_path(@project, @issue.branch_name), :class => "browse-code button yellow", :style => "margin-right:10px;"
+ = link_to 'Commits', project_commits_path(@project, :ref => @issue.branch_name), :class => "browse-code button"
+
+
+
+.clear
+
+%table.round-borders
+ %thead
+ %th
+ %center Author
+ %th
+ %th
+ %center
+ Assignee
+ %tr
+ %td
+ %center
+ = image_tag gravatar_icon(@issue.author_email), :width => 40, :style => "padding:0 5px;"
+ %br
+ %br
+ = @issue.author_name
+ %td
+ %center
+ - if @issue.closed
+ Resolved
+ %br
+ %span{:style => "font-size:36px;"} &larr;
+ - else
+ Open
+ %br
+ %span{:style => "font-size:36px;"} &rarr;
+ %br
+ = @issue.created_at.stamp("21 Aug 2011, 11:15pm")
+
+ %td
+ %center
+ = image_tag gravatar_icon(@issue.assignee_email), :width => 40, :style => "padding:0 5px;"
+ %br
+ %br
+ = @issue.assignee_name
+
+
+
+- if can? current_user, :write_issue, @issue
+ - if @issue.closed
+ = link_to 'Reopen', project_issue_path(@project, @issue, :issue => {:closed => false }, :status_only => true), :method => :put, :class => "grey-button"
+ - else
+ = link_to 'Resolve', project_issue_path(@project, @issue, :issue => {:closed => true }, :status_only => true), :method => :put, :class => "grey-button"
+ .right
+ = link_to 'Edit', edit_project_issue_path(@project, @issue), :class => "grey-button positive"
+ &nbsp;
+ = link_to 'Destroy', [@project, @issue], :confirm => 'Are you sure?', :method => :delete, :class => "grey-button delete-issue negative", :id => "destroy_issue_#{@issue.id}"
+
+%br
+%br
+- unless @commits.blank?
%table.round-borders
- %tr
- %td Author:
- %td
- = image_tag gravatar_icon(@issue.author.email), :class => "left", :width => 40, :style => "padding:0 5px;"
- = @issue.author.name
- %tr
- %td Assignee:
- %td
- = image_tag gravatar_icon(@issue.assignee.email), :class => "left", :width => 40, :style => "padding:0 5px;"
- = @issue.assignee.name
- %tr
- %td Tags
- %td
- - if @issue.critical
- %span.tag.high critical
- - else
- %span.tag.normal normal
-
- - if @issue.today?
- %span.tag.today today
- %tr
- %td Closed?
- %td
- - if can? current_user, :write_issue, @issue
- = form_for([@project, @issue]) do |f|
- = f.check_box :closed, :onclick => "$(this).parent().submit();"
- = hidden_field_tag :status_only, true
- - else
- = check_box_tag "closed", 1, @issue.closed, :disabled => true
-
- - if can?(current_user, :write_issue, @issue)
- .clear
- %br
- = link_to 'Edit', edit_project_issue_path(@project, @issue), :class => "grey-button positive", :remote => true
- .right= link_to 'Destroy', [@project, @issue], :confirm => 'Are you sure?', :method => :delete, :class => "grey-button delete-issue negative", :id => "destroy_issue_#{@issue.id}"
+ %thead
+ %th Unmerged Commits
+ - @commits.each do |commit|
+ %tr
+ %td
+ = image_tag gravatar_icon(commit.author_email), :class => "left", :width => 20, :style => "padding-right:5px;"
+ = link_to commit.id.to_s, project_commit_path(@project, :id => commit.id)
+ .right
+ = time_ago_in_words(commit.created_at)
+ ago
+
+
+.issue_notes= render "notes/notes"
+
+.loading{ :style => "display:none;"}
+ %center= image_tag "ajax-loader.gif"
+
.clear