summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorLin Jen-Shin <godfat@godfat.org>2017-01-05 02:53:45 +0800
committerLin Jen-Shin <godfat@godfat.org>2017-01-05 02:53:45 +0800
commite01c692a35d817c09416356b549f473f63d78dc8 (patch)
tree188eec336302d0aa314f19817ddd793df7a61950 /app
parent99ac0935271b1e99f4512e496104219045f1018e (diff)
downloadgitlab-ce-e01c692a35d817c09416356b549f473f63d78dc8.tar.gz
Remove tag with git hooks
Diffstat (limited to 'app')
-rw-r--r--app/models/repository.rb19
-rw-r--r--app/services/delete_tag_service.rb2
-rw-r--r--app/services/git_operation_service.rb12
3 files changed, 23 insertions, 10 deletions
diff --git a/app/models/repository.rb b/app/models/repository.rb
index b1a789492d3..e834936aa93 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -196,16 +196,14 @@ class Repository
true
end
- # TODO: why we don't pass user here?
- def rm_tag(tag_name)
+ def rm_tag(user, tag_name)
before_remove_tag
+ tag = find_tag(tag_name)
- begin
- rugged.tags.delete(tag_name)
- true
- rescue Rugged::ReferenceError
- false
- end
+ GitOperationService.new(user, self).rm_tag(tag)
+
+ after_remove_tag
+ true
end
def ref_names
@@ -401,6 +399,11 @@ class Repository
repository_event(:remove_tag)
end
+ # Runs code after removing a tag.
+ def after_remove_tag
+ expire_tags_cache
+ end
+
def before_import
expire_content_cache
end
diff --git a/app/services/delete_tag_service.rb b/app/services/delete_tag_service.rb
index a44dee14a0f..9d4bffb93e9 100644
--- a/app/services/delete_tag_service.rb
+++ b/app/services/delete_tag_service.rb
@@ -7,7 +7,7 @@ class DeleteTagService < BaseService
return error('No such tag', 404)
end
- if repository.rm_tag(tag_name)
+ if repository.rm_tag(current_user, tag_name)
release = project.releases.find_by(tag: tag_name)
release.destroy if release
diff --git a/app/services/git_operation_service.rb b/app/services/git_operation_service.rb
index ed9822cfee6..3b7f702e3ab 100644
--- a/app/services/git_operation_service.rb
+++ b/app/services/git_operation_service.rb
@@ -15,7 +15,7 @@ class GitOperationService
def rm_branch(branch)
ref = Gitlab::Git::BRANCH_REF_PREFIX + branch.name
- oldrev = branch.dereferenced_target.id
+ oldrev = branch.target
newrev = Gitlab::Git::BLANK_SHA
update_ref_in_hooks(ref, newrev, oldrev)
@@ -36,6 +36,16 @@ class GitOperationService
end
end
+ def rm_tag(tag)
+ ref = Gitlab::Git::TAG_REF_PREFIX + tag.name
+ oldrev = tag.target
+ newrev = Gitlab::Git::BLANK_SHA
+
+ update_ref_in_hooks(ref, newrev, oldrev) do
+ repository.rugged.tags.delete(tag_name)
+ end
+ end
+
# Whenever `source_branch_name` is passed, if `branch_name` doesn't exist,
# it would be created from `source_branch_name`.
# If `source_project` is passed, and the branch doesn't exist,