Commit 132caae73446e23a2ff8a7b1a4110efe42a36eb1

Authored by Dmitriy Zaporozhets
1 parent a165a0b2

Move repo tags to own controller. add ability to remove tags

app/controllers/projects/branches_controller.rb
@@ -17,7 +17,7 @@ class Projects::BranchesController < Projects::ApplicationController @@ -17,7 +17,7 @@ class Projects::BranchesController < Projects::ApplicationController
17 branch = @project.repository.branches.find { |branch| branch.name == params[:id] } 17 branch = @project.repository.branches.find { |branch| branch.name == params[:id] }
18 18
19 if branch && @project.repository.rm_branch(branch.name) 19 if branch && @project.repository.rm_branch(branch.name)
20 - Event.create_rm_branch(@project, current_user, branch) 20 + Event.create_rm_ref(@project, current_user, branch)
21 end 21 end
22 22
23 respond_to do |format| 23 respond_to do |format|
app/controllers/projects/repositories_controller.rb
@@ -8,10 +8,6 @@ class Projects::RepositoriesController < Projects::ApplicationController @@ -8,10 +8,6 @@ class Projects::RepositoriesController < Projects::ApplicationController
8 @activities = @repository.commits_with_refs(20) 8 @activities = @repository.commits_with_refs(20)
9 end 9 end
10 10
11 - def tags  
12 - @tags = @repository.tags  
13 - end  
14 -  
15 def stats 11 def stats
16 @stats = Gitlab::Git::Stats.new(@repository.raw, @repository.root_ref) 12 @stats = Gitlab::Git::Stats.new(@repository.raw, @repository.root_ref)
17 @graph = @stats.graph 13 @graph = @stats.graph
@@ -22,7 +18,6 @@ class Projects::RepositoriesController < Projects::ApplicationController @@ -22,7 +18,6 @@ class Projects::RepositoriesController < Projects::ApplicationController
22 render_404 and return 18 render_404 and return
23 end 19 end
24 20
25 -  
26 storage_path = Rails.root.join("tmp", "repositories") 21 storage_path = Rails.root.join("tmp", "repositories")
27 22
28 file_path = @repository.archive_repo(params[:ref], storage_path) 23 file_path = @repository.archive_repo(params[:ref], storage_path)
app/controllers/projects/tags_controller.rb 0 → 100644
@@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
  1 +class Projects::TagsController < Projects::ApplicationController
  2 + # Authorize
  3 + before_filter :authorize_read_project!
  4 + before_filter :authorize_code_access!
  5 + before_filter :require_non_empty_project
  6 +
  7 + before_filter :authorize_admin_project!, only: [:destroy, :create]
  8 +
  9 + def index
  10 + @tags = Kaminari.paginate_array(@project.repository.tags).page(params[:page]).per(30)
  11 + end
  12 +
  13 + def create
  14 + # TODO: implement
  15 + end
  16 +
  17 + def destroy
  18 + tag = @project.repository.tags.find { |tag| tag.name == params[:id] }
  19 +
  20 + if tag && @project.repository.rm_tag(tag.name)
  21 + Event.create_rm_ref(@project, current_user, tag, 'refs/tags')
  22 + end
  23 +
  24 + respond_to do |format|
  25 + format.html { redirect_to project_tags_path }
  26 + format.js { render nothing: true }
  27 + end
  28 + end
  29 +end
app/models/event.rb
@@ -55,13 +55,13 @@ class Event &lt; ActiveRecord::Base @@ -55,13 +55,13 @@ class Event &lt; ActiveRecord::Base
55 end 55 end
56 end 56 end
57 57
58 - def create_rm_branch(project, user, branch) 58 + def create_rm_ref(project, user, ref, prefix = 'refs/heads')
59 Event.create( 59 Event.create(
60 project: project, 60 project: project,
61 action: Event::PUSHED, 61 action: Event::PUSHED,
62 data: { 62 data: {
63 - ref: branch.name,  
64 - before: branch.commit.id, 63 + ref: "#{prefix}/#{ref.name}",
  64 + before: ref.commit.id,
65 after: '00000000' 65 after: '00000000'
66 }, 66 },
67 author_id: user.id 67 author_id: user.id
app/models/repository.rb
@@ -39,6 +39,10 @@ class Repository @@ -39,6 +39,10 @@ class Repository
39 gitlab_shell.rm_branch(path_with_namespace, branch_name) 39 gitlab_shell.rm_branch(path_with_namespace, branch_name)
40 end 40 end
41 41
  42 + def rm_tag(tag_name)
  43 + gitlab_shell.rm_tag(path_with_namespace, tag_name)
  44 + end
  45 +
42 def round_commit_count 46 def round_commit_count
43 if commit_count > 10000 47 if commit_count > 10000
44 '10000+' 48 '10000+'
app/views/projects/branches/_branch.html.haml
@@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
12 - if can?(current_user, :download_code, @project) 12 - if can?(current_user, :download_code, @project)
13 = link_to archive_project_repository_path(@project, ref: branch.name), class: 'btn grouped btn-small' do 13 = link_to archive_project_repository_path(@project, ref: branch.name), class: 'btn grouped btn-small' do
14 %i.icon-download-alt 14 %i.icon-download-alt
  15 + Download
15 - if can?(current_user, :admin_project, @project) && branch.name != @repository.root_ref 16 - if can?(current_user, :admin_project, @project) && branch.name != @repository.root_ref
16 = 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 17 = 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
17 %i.icon-trash 18 %i.icon-trash
app/views/projects/commits/_head.html.haml
@@ -11,8 +11,8 @@ @@ -11,8 +11,8 @@
11 Branches 11 Branches
12 %span.badge= @repository.branches.length 12 %span.badge= @repository.branches.length
13 13
14 - = nav_link(controller: :repositories, action: :tags) do  
15 - = link_to tags_project_repository_path(@project) do 14 + = nav_link(controller: :tags) do
  15 + = link_to project_tags_path(@project) do
16 Tags 16 Tags
17 %span.badge= @repository.tags.length 17 %span.badge= @repository.tags.length
18 18
app/views/projects/repositories/tags.html.haml
@@ -1,36 +0,0 @@ @@ -1,36 +0,0 @@
1 -= render "projects/commits/head"  
2 -- unless @tags.empty?  
3 - %ul.bordered-list  
4 - - @tags.each do |tag|  
5 - - commit = Commit.new(Gitlab::Git::Commit.new(tag.commit))  
6 - %li  
7 - %h5  
8 - = link_to project_commits_path(@project, tag.name), class: "" do  
9 - %i.icon-tag  
10 - = tag.name  
11 - %small  
12 - = truncate(tag.message || '', length: 70)  
13 - .pull-right  
14 - %span.light  
15 - = time_ago_in_words(commit.committed_date)  
16 - ago  
17 - %div.prepend-left-20  
18 - = link_to commit.short_id(8), project_commit_path(@project, commit), class: "monospace"  
19 - &ndash;  
20 - = link_to_gfm truncate(commit.title, length: 70), project_commit_path(@project, commit.id), class: "cdark"  
21 -  
22 - - if can? current_user, :download_code, @project  
23 - .pull-right  
24 - = link_to archive_project_repository_path(@project, ref: tag.name) do  
25 - %i.icon-download-alt  
26 - Download  
27 -  
28 -  
29 -- else  
30 - %h3.nothing_here_message  
31 - Repository has no tags yet.  
32 - %br  
33 - %small  
34 - Use git tag command to add a new one:  
35 - %br  
36 - %span.monospace git tag -a v1.4 -m 'version 1.4'  
app/views/projects/tags/index.html.haml 0 → 100644
@@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
  1 += render "projects/commits/head"
  2 +- unless @tags.empty?
  3 + %ul.bordered-list
  4 + - @tags.each do |tag|
  5 + - commit = Commit.new(Gitlab::Git::Commit.new(tag.commit))
  6 + %li
  7 + %h4
  8 + = link_to project_commits_path(@project, tag.name), class: "" do
  9 + %i.icon-tag
  10 + = tag.name
  11 + %small
  12 + = truncate(tag.message || '', length: 70)
  13 + .pull-right
  14 + %small.cdark
  15 + %i.icon-calendar
  16 + = time_ago_in_words(commit.committed_date)
  17 + ago
  18 + %p.prepend-left-20
  19 + = link_to commit.short_id(8), project_commit_path(@project, commit), class: "monospace"
  20 + &ndash;
  21 + = link_to_gfm truncate(commit.title, length: 70), project_commit_path(@project, commit.id), class: "cdark"
  22 +
  23 + %span.pull-right
  24 + - if can? current_user, :download_code, @project
  25 + = link_to archive_project_repository_path(@project, ref: tag.name), class: 'btn grouped btn-small' do
  26 + %i.icon-download-alt
  27 + Download
  28 + - if can?(current_user, :admin_project, @project)
  29 + = link_to project_tag_path(@project, tag.name), class: 'btn grouped btn-small remove-row', method: :delete, confirm: 'Removed tag cannot be restored. Are you sure?', remote: true do
  30 + %i.icon-trash
  31 +
  32 + = paginate @tags, theme: 'gitlab'
  33 +
  34 +- else
  35 + %h3.nothing_here_message
  36 + Repository has no tags yet.
  37 + %br
  38 + %small
  39 + Use git tag command to add a new one:
  40 + %br
  41 + %span.monospace git tag -a v1.4 -m 'version 1.4'
config/routes.rb
@@ -205,8 +205,6 @@ Gitlab::Application.routes.draw do @@ -205,8 +205,6 @@ Gitlab::Application.routes.draw do
205 205
206 resource :repository, only: [:show] do 206 resource :repository, only: [:show] do
207 member do 207 member do
208 - get "branches"  
209 - get "tags"  
210 get "stats" 208 get "stats"
211 get "archive" 209 get "archive"
212 end 210 end
@@ -225,6 +223,7 @@ Gitlab::Application.routes.draw do @@ -225,6 +223,7 @@ Gitlab::Application.routes.draw do
225 end 223 end
226 end 224 end
227 225
  226 + resources :tags, only: [:index, :create, :destroy]
228 resources :branches, only: [:index, :create, :destroy] 227 resources :branches, only: [:index, :create, :destroy]
229 resources :protected_branches, only: [:index, :create, :destroy] 228 resources :protected_branches, only: [:index, :create, :destroy]
230 229
lib/gitlab/backend/shell.rb
@@ -96,6 +96,31 @@ module Gitlab @@ -96,6 +96,31 @@ module Gitlab
96 system "#{gitlab_shell_user_home}/gitlab-shell/bin/gitlab-projects", "rm-branch", "#{path}.git", branch_name 96 system "#{gitlab_shell_user_home}/gitlab-shell/bin/gitlab-projects", "rm-branch", "#{path}.git", branch_name
97 end 97 end
98 98
  99 + # Add repository tag from passed ref
  100 + #
  101 + # path - project path with namespace
  102 + # tag_name - new tag name
  103 + # ref - HEAD for new tag
  104 + #
  105 + # Ex.
  106 + # add_tag("gitlab/gitlab-ci", "v4.0", "master")
  107 + #
  108 + def add_tag(path, tag_name, ref)
  109 + system "#{gitlab_shell_user_home}/gitlab-shell/bin/gitlab-projects", "create-tag", "#{path}.git", tag_name, ref
  110 + end
  111 +
  112 + # Remove repository tag
  113 + #
  114 + # path - project path with namespace
  115 + # tag_name - tag name to remove
  116 + #
  117 + # Ex.
  118 + # rm_tag("gitlab/gitlab-ci", "v4.0")
  119 + #
  120 + def rm_tag(path, tag_name)
  121 + system "#{gitlab_shell_user_home}/gitlab-shell/bin/gitlab-projects", "rm-tag", "#{path}.git", tag_name
  122 + end
  123 +
99 # Add new key to gitlab-shell 124 # Add new key to gitlab-shell
100 # 125 #
101 # Ex. 126 # Ex.