OSDN Git Service

ability to attach branch to issue
authorgitlabhq <m@gitlabhq.com>
Thu, 24 Nov 2011 13:08:20 +0000 (08:08 -0500)
committergitlabhq <m@gitlabhq.com>
Thu, 24 Nov 2011 13:08:20 +0000 (08:08 -0500)
app/assets/stylesheets/projects.css.scss
app/controllers/issues_controller.rb
app/models/issue.rb
app/views/issues/edit.html.haml [new file with mode: 0644]
app/views/issues/show.html.haml
db/migrate/20111124115339_add_extra_field_to_issue.rb [new file with mode: 0644]
db/schema.rb

index 029b8d3..5466d21 100644 (file)
@@ -160,6 +160,7 @@ input.ssh_project_url {
 .new_issue,
 .new_note,
 .edit_user,
+.edit_issue,
 .new_project,
 .new_snippet,
 .edit_snippet,
index 5a18879..daaf8fa 100644 (file)
@@ -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 }
index 2a88003..c06f173 100644 (file)
@@ -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 (file)
index 0000000..872a64b
--- /dev/null
@@ -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});
+  });
+
index 9d4e0bc..7357449 100644 (file)
@@ -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
diff --git a/db/migrate/20111124115339_add_extra_field_to_issue.rb b/db/migrate/20111124115339_add_extra_field_to_issue.rb
new file mode 100644 (file)
index 0000000..4946c6f
--- /dev/null
@@ -0,0 +1,5 @@
+class AddExtraFieldToIssue < ActiveRecord::Migration
+  def change
+    add_column :issues, :branch_name, :string, :null => true
+  end
+end
index 83f916d..502f52a 100644 (file)
 #
 # 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|
     t.string   "title"
@@ -23,6 +33,7 @@ ActiveRecord::Schema.define(:version => 20111115063954) do
     t.boolean  "closed",      :default => false, :null => false
     t.integer  "position",    :default => 0
     t.boolean  "critical",    :default => false, :null => false
+    t.string   "branch_name"
   end
 
   create_table "keys", :force => true do |t|