Commit 132caae73446e23a2ff8a7b1a4110efe42a36eb1
1 parent
a165a0b2
Exists in
master
and in
4 other branches
Move repo tags to own controller. add ability to remove tags
Showing
11 changed files
with
107 additions
and
49 deletions
Show diff stats
app/controllers/projects/branches_controller.rb
... | ... | @@ -17,7 +17,7 @@ class Projects::BranchesController < Projects::ApplicationController |
17 | 17 | branch = @project.repository.branches.find { |branch| branch.name == params[:id] } |
18 | 18 | |
19 | 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 | 21 | end |
22 | 22 | |
23 | 23 | respond_to do |format| | ... | ... |
app/controllers/projects/repositories_controller.rb
... | ... | @@ -8,10 +8,6 @@ class Projects::RepositoriesController < Projects::ApplicationController |
8 | 8 | @activities = @repository.commits_with_refs(20) |
9 | 9 | end |
10 | 10 | |
11 | - def tags | |
12 | - @tags = @repository.tags | |
13 | - end | |
14 | - | |
15 | 11 | def stats |
16 | 12 | @stats = Gitlab::Git::Stats.new(@repository.raw, @repository.root_ref) |
17 | 13 | @graph = @stats.graph |
... | ... | @@ -22,7 +18,6 @@ class Projects::RepositoriesController < Projects::ApplicationController |
22 | 18 | render_404 and return |
23 | 19 | end |
24 | 20 | |
25 | - | |
26 | 21 | storage_path = Rails.root.join("tmp", "repositories") |
27 | 22 | |
28 | 23 | file_path = @repository.archive_repo(params[:ref], storage_path) | ... | ... |
... | ... | @@ -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 < ActiveRecord::Base |
55 | 55 | end |
56 | 56 | end |
57 | 57 | |
58 | - def create_rm_branch(project, user, branch) | |
58 | + def create_rm_ref(project, user, ref, prefix = 'refs/heads') | |
59 | 59 | Event.create( |
60 | 60 | project: project, |
61 | 61 | action: Event::PUSHED, |
62 | 62 | data: { |
63 | - ref: branch.name, | |
64 | - before: branch.commit.id, | |
63 | + ref: "#{prefix}/#{ref.name}", | |
64 | + before: ref.commit.id, | |
65 | 65 | after: '00000000' |
66 | 66 | }, |
67 | 67 | author_id: user.id | ... | ... |
app/models/repository.rb
... | ... | @@ -39,6 +39,10 @@ class Repository |
39 | 39 | gitlab_shell.rm_branch(path_with_namespace, branch_name) |
40 | 40 | end |
41 | 41 | |
42 | + def rm_tag(tag_name) | |
43 | + gitlab_shell.rm_tag(path_with_namespace, tag_name) | |
44 | + end | |
45 | + | |
42 | 46 | def round_commit_count |
43 | 47 | if commit_count > 10000 |
44 | 48 | '10000+' | ... | ... |
app/views/projects/branches/_branch.html.haml
... | ... | @@ -12,6 +12,7 @@ |
12 | 12 | - if can?(current_user, :download_code, @project) |
13 | 13 | = link_to archive_project_repository_path(@project, ref: branch.name), class: 'btn grouped btn-small' do |
14 | 14 | %i.icon-download-alt |
15 | + Download | |
15 | 16 | - if can?(current_user, :admin_project, @project) && branch.name != @repository.root_ref |
16 | 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 | 18 | %i.icon-trash | ... | ... |
app/views/projects/commits/_head.html.haml
... | ... | @@ -11,8 +11,8 @@ |
11 | 11 | Branches |
12 | 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 | 16 | Tags |
17 | 17 | %span.badge= @repository.tags.length |
18 | 18 | ... | ... |
app/views/projects/repositories/tags.html.haml
... | ... | @@ -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 | - – | |
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' |
... | ... | @@ -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 | + – | |
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 | 205 | |
206 | 206 | resource :repository, only: [:show] do |
207 | 207 | member do |
208 | - get "branches" | |
209 | - get "tags" | |
210 | 208 | get "stats" |
211 | 209 | get "archive" |
212 | 210 | end |
... | ... | @@ -225,6 +223,7 @@ Gitlab::Application.routes.draw do |
225 | 223 | end |
226 | 224 | end |
227 | 225 | |
226 | + resources :tags, only: [:index, :create, :destroy] | |
228 | 227 | resources :branches, only: [:index, :create, :destroy] |
229 | 228 | resources :protected_branches, only: [:index, :create, :destroy] |
230 | 229 | ... | ... |
lib/gitlab/backend/shell.rb
... | ... | @@ -96,6 +96,31 @@ module Gitlab |
96 | 96 | system "#{gitlab_shell_user_home}/gitlab-shell/bin/gitlab-projects", "rm-branch", "#{path}.git", branch_name |
97 | 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 | 124 | # Add new key to gitlab-shell |
100 | 125 | # |
101 | 126 | # Ex. | ... | ... |