Commit ee2d3de1 authored by gitlabhq's avatar gitlabhq

ability to attach branch to issue

parent b4c40c21
...@@ -160,6 +160,7 @@ input.ssh_project_url { ...@@ -160,6 +160,7 @@ input.ssh_project_url {
.new_issue, .new_issue,
.new_note, .new_note,
.edit_user, .edit_user,
.edit_issue,
.new_project, .new_project,
.new_snippet, .new_snippet,
.edit_snippet, .edit_snippet,
......
...@@ -9,7 +9,7 @@ class IssuesController < ApplicationController ...@@ -9,7 +9,7 @@ class IssuesController < ApplicationController
before_filter :authorize_read_issue! before_filter :authorize_read_issue!
before_filter :authorize_write_issue!, :only => [:new, :create, :close, :edit, :update, :sort] before_filter :authorize_write_issue!, :only => [:new, :create, :close, :edit, :update, :sort]
respond_to :js respond_to :js, :html
def index def index
@issues = case params[:f].to_i @issues = case params[:f].to_i
...@@ -41,6 +41,13 @@ class IssuesController < ApplicationController ...@@ -41,6 +41,13 @@ class IssuesController < ApplicationController
@notes = @issue.notes.inc_author.order("created_at DESC").limit(20) @notes = @issue.notes.inc_author.order("created_at DESC").limit(20)
@note = @project.notes.new(:noteable => @issue) @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| respond_to do |format|
format.html format.html
format.js { respond_with_notes } format.js { respond_with_notes }
......
...@@ -15,6 +15,11 @@ class Issue < ActiveRecord::Base ...@@ -15,6 +15,11 @@ class Issue < ActiveRecord::Base
:to => :author, :to => :author,
:prefix => true :prefix => true
delegate :name,
:email,
:to => :assignee,
:prefix => true
validates :title, validates :title,
:presence => true, :presence => true,
:length => { :within => 0..255 } :length => { :within => 0..255 }
......
%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});
});
%h2 %h2.icon
%strong %span
Issue %d
= "##{@issue.id}" = "Issue ##{@issue.id}"
&ndash; &ndash;
= html_escape(@issue.title) = truncate(@issue.title, :length => 50)
.left.width-65p
.issue_notes= render "notes/notes" - unless @commits.blank?
.right
.loading{ :style => "display:none;"} = link_to 'Browse Code', tree_project_ref_path(@project, @issue.branch_name), :class => "browse-code button yellow", :style => "margin-right:10px;"
%center= image_tag "ajax-loader.gif" = link_to 'Commits', project_commits_path(@project, :ref => @issue.branch_name), :class => "browse-code button"
.right.width-30p
.span-8
.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 %table.round-borders
%tr %thead
%td Author: %th Unmerged Commits
%td - @commits.each do |commit|
= image_tag gravatar_icon(@issue.author.email), :class => "left", :width => 40, :style => "padding:0 5px;" %tr
= @issue.author.name %td
%tr = image_tag gravatar_icon(commit.author_email), :class => "left", :width => 20, :style => "padding-right:5px;"
%td Assignee: = link_to commit.id.to_s, project_commit_path(@project, :id => commit.id)
%td .right
= image_tag gravatar_icon(@issue.assignee.email), :class => "left", :width => 40, :style => "padding:0 5px;" = time_ago_in_words(commit.created_at)
= @issue.assignee.name ago
%tr
%td Tags
%td .issue_notes= render "notes/notes"
- if @issue.critical
%span.tag.high critical .loading{ :style => "display:none;"}
- else %center= image_tag "ajax-loader.gif"
%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}"
.clear .clear
class AddExtraFieldToIssue < ActiveRecord::Migration
def change
add_column :issues, :branch_name, :string, :null => true
end
end
...@@ -11,7 +11,17 @@ ...@@ -11,7 +11,17 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20111115063954) do ActiveRecord::Schema.define(:version => 20111124115339) do
create_table "features", :force => true do |t|
t.string "name"
t.string "branch_name"
t.integer "assignee_id"
t.integer "author_id"
t.integer "project_id"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "issues", :force => true do |t| create_table "issues", :force => true do |t|
t.string "title" t.string "title"
...@@ -23,6 +33,7 @@ ActiveRecord::Schema.define(:version => 20111115063954) do ...@@ -23,6 +33,7 @@ ActiveRecord::Schema.define(:version => 20111115063954) do
t.boolean "closed", :default => false, :null => false t.boolean "closed", :default => false, :null => false
t.integer "position", :default => 0 t.integer "position", :default => 0
t.boolean "critical", :default => false, :null => false t.boolean "critical", :default => false, :null => false
t.string "branch_name"
end end
create_table "keys", :force => true do |t| create_table "keys", :force => true do |t|
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment