OSDN Git Service

Move branches list to own controller with pagination. Ability to remove branches...
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Tue, 16 Jul 2013 19:19:07 +0000 (22:19 +0300)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Tue, 16 Jul 2013 19:19:07 +0000 (22:19 +0300)
app/assets/javascripts/main.js.coffee
app/controllers/projects/branches_controller.rb [new file with mode: 0644]
app/controllers/projects/repositories_controller.rb
app/models/repository.rb
app/views/projects/branches/_branch.html.haml [new file with mode: 0644]
app/views/projects/branches/index.html.haml [new file with mode: 0644]
app/views/projects/repositories/_branch.html.haml [deleted file]
app/views/projects/repositories/_filter.html.haml
app/views/projects/repositories/branches.html.haml [deleted file]
app/views/projects/repositories/show.html.haml
config/routes.rb

index 0e7e0a4..a991eba 100644 (file)
@@ -62,6 +62,9 @@ $ ->
   # Click a .one_click_select field, select the contents
   $(".one_click_select").on 'click', -> $(@).select()
 
+  $('.remove-row').bind 'ajax:success', ->
+    $(this).closest('li').fadeOut()
+
   # Click a .appear-link, appear-data fadeout
   $(".appear-link").on 'click', (e) ->
     $('.appear-data').fadeIn()
diff --git a/app/controllers/projects/branches_controller.rb b/app/controllers/projects/branches_controller.rb
new file mode 100644 (file)
index 0000000..5168d4d
--- /dev/null
@@ -0,0 +1,24 @@
+class Projects::BranchesController < Projects::ApplicationController
+  # Authorize
+  before_filter :authorize_read_project!
+  before_filter :require_non_empty_project
+
+  before_filter :authorize_admin_project!, only: [:destroy, :create]
+
+  def index
+    @branches = Kaminari.paginate_array(@repository.branches).page(params[:page]).per(30)
+  end
+
+  def create
+    # TODO: implement
+  end
+
+  def destroy
+    @project.repository.rm_branch(params[:id])
+
+    respond_to do |format|
+      format.html { redirect_to project_branches_path }
+      format.js { render nothing: true }
+    end
+  end
+end
index b65af02..7094a4c 100644 (file)
@@ -8,10 +8,6 @@ class Projects::RepositoriesController < Projects::ApplicationController
     @activities = @repository.commits_with_refs(20)
   end
 
-  def branches
-    @branches = @repository.branches
-  end
-
   def tags
     @tags = @repository.tags
   end
index b18e98b..3848369 100644 (file)
@@ -1,4 +1,6 @@
 class Repository
+  include Gitlab::ShellAdapter
+
   attr_accessor :raw_repository
 
   def initialize(path_with_namespace, default_branch)
@@ -33,6 +35,10 @@ class Repository
     commits
   end
 
+  def rm_branch(branch_name)
+    gitlab_shell.rm_branch(path_with_namespace, branch_name)
+  end
+
   def round_commit_count
     if commit_count > 10000
       '10000+'
diff --git a/app/views/projects/branches/_branch.html.haml b/app/views/projects/branches/_branch.html.haml
new file mode 100644 (file)
index 0000000..f43b56e
--- /dev/null
@@ -0,0 +1,27 @@
+- commit = Commit.new(Gitlab::Git::Commit.new(branch.commit))
+%li
+  %h4
+    = link_to project_commits_path(@project, branch.name) do
+      %strong= truncate(branch.name, length: 60)
+      - if branch.name == @repository.root_ref
+        %span.label.label-info default
+      - if @project.protected_branch? branch.name
+        %span.label.label-success
+          %i.icon-lock
+    .pull-right
+      - if can?(current_user, :download_code, @project)
+        = link_to archive_project_repository_path(@project, ref: branch.name), class: 'btn grouped btn-small' do
+          %i.icon-download-alt
+      - if can?(current_user, :admin_project, @project) && branch.name != @repository.root_ref
+        = link_to project_branch_path(@project, branch.name), class: 'btn grouped btn-small remove-row', method: :delete, confirm: 'Removed branch cannot be restored. Are you sure?', remote: true do
+          %i.icon-trash
+
+  %p
+    = link_to project_commit_path(@project, commit.id), class: 'commit_short_id' do
+      = commit.short_id
+    = image_tag gravatar_icon(commit.author_email), class: "avatar s16", alt: ''
+    %span.light
+      = gfm escape_once(truncate(commit.title, length: 40))
+    %span
+      = time_ago_in_words(commit.committed_date)
+      ago
diff --git a/app/views/projects/branches/index.html.haml b/app/views/projects/branches/index.html.haml
new file mode 100644 (file)
index 0000000..4cfafe1
--- /dev/null
@@ -0,0 +1,10 @@
+= render "projects/commits/head"
+.row
+  .span3
+    = render "projects/repositories/filter"
+  .span9
+    - unless @branches.empty?
+      %ul.bordered-list
+        - @branches.each do |branch|
+          = render "projects/branches/branch", branch: branch
+      = paginate @branches, theme: 'gitlab'
diff --git a/app/views/projects/repositories/_branch.html.haml b/app/views/projects/repositories/_branch.html.haml
deleted file mode 100644 (file)
index 2115f3c..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-- commit = Commit.new(Gitlab::Git::Commit.new(branch.commit))
-%tr
-  %td
-    = link_to project_commits_path(@project, branch.name) do
-      - if @project.protected_branch? branch.name
-        %i.icon-lock
-      - else
-        %i.icon-unlock
-      %strong= truncate(branch.name, length: 60)
-      - if branch.name == @repository.root_ref
-        %span.label default
-  %td
-    = link_to project_commit_path(@project, commit.id), class: 'commit_short_id' do
-      = commit.short_id
-    = image_tag gravatar_icon(commit.author_email), class: "avatar s16", alt: ''
-    %span.light
-      = gfm escape_once(truncate(commit.title, length: 40))
-    %span
-      = time_ago_in_words(commit.committed_date)
-      ago
-  %td
-    - if can? current_user, :download_code, @project
-      = link_to archive_project_repository_path(@project, ref: branch.name) do
-        %i.icon-download-alt
-        Download
-
index e718d48..f42493e 100644 (file)
@@ -5,5 +5,5 @@
     = link_to project_protected_branches_path(@project) do
       Protected
       %i.icon-lock
-  = nav_link(path: 'repositories#branches') do
-    = link_to 'All branches', branches_project_repository_path(@project)
+  = nav_link(path: 'branches#index') do
+    = link_to 'All branches', project_branches_path(@project)
diff --git a/app/views/projects/repositories/branches.html.haml b/app/views/projects/repositories/branches.html.haml
deleted file mode 100644 (file)
index 2bdd304..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-= render "projects/commits/head"
-.row
-  .span3
-    = render "filter"
-  .span9
-    - unless @branches.empty?
-      %table
-        %thead
-          %tr
-            %th Name
-            %th Last commit
-            %th
-        %tbody
-          - @branches.each do |branch|
-            = render "projects/repositories/branch", branch: branch
index 84a32e6..611d0ed 100644 (file)
@@ -3,12 +3,7 @@
   .span3
     = render "filter"
   .span9
-    %table
-      %thead
-        %tr
-          %th Name
-          %th Last commit
-          %th
+    %ul.bordered-list
       - @activities.each do |update|
-        = render "branch", branch: update.head
+        = render "projects/branches/branch", branch: update.head
 
index 30c5dea..c5fdec1 100644 (file)
@@ -225,6 +225,7 @@ Gitlab::Application.routes.draw do
         end
       end
 
+      resources :branches, only: [:index, :create, :destroy]
       resources :protected_branches, only: [:index, :create, :destroy]
 
       resources :refs, only: [] do