From 8587e3a357add7371b2286f3ab642c9ea8f58e2e Mon Sep 17 00:00:00 2001
From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Date: Wed, 17 Jul 2013 15:11:03 +0300
Subject: [PATCH] create corresponding events when create branch/tag with UI

---
 app/controllers/projects/branches_controller.rb | 12 ++++++++----
 app/controllers/projects/tags_controller.rb     | 14 +++++++++-----
 app/models/event.rb                             | 14 +++++++++++---
 app/models/repository.rb                        |  8 ++++++++
 4 files changed, 36 insertions(+), 12 deletions(-)

diff --git a/app/controllers/projects/branches_controller.rb b/app/controllers/projects/branches_controller.rb
index cd28d75409f..97dbb2bc0c0 100644
--- a/app/controllers/projects/branches_controller.rb
+++ b/app/controllers/projects/branches_controller.rb
@@ -12,16 +12,20 @@ class Projects::BranchesController < Projects::ApplicationController
   end
 
   def create
-    @project.repository.add_branch(params[:branch_name], params[:ref])
+    @repository.add_branch(params[:branch_name], params[:ref])
+
+    if new_branch = @repository.find_branch(params[:branch_name])
+      Event.create_ref_event(@project, current_user, new_branch, 'add')
+    end
 
     redirect_to project_branches_path(@project)
   end
 
   def destroy
-    branch = @project.repository.branches.find { |branch| branch.name == params[:id] }
+    branch = @repository.find_branch(params[:id])
 
-    if branch && @project.repository.rm_branch(branch.name)
-      Event.create_rm_ref(@project, current_user, branch)
+    if branch && @repository.rm_branch(branch.name)
+      Event.create_ref_event(@project, current_user, branch, 'rm')
     end
 
     respond_to do |format|
diff --git a/app/controllers/projects/tags_controller.rb b/app/controllers/projects/tags_controller.rb
index 8a6b9a59fdd..9dbb0d81888 100644
--- a/app/controllers/projects/tags_controller.rb
+++ b/app/controllers/projects/tags_controller.rb
@@ -8,20 +8,24 @@ class Projects::TagsController < Projects::ApplicationController
   before_filter :authorize_admin_project!, only: [:destroy]
 
   def index
-    @tags = Kaminari.paginate_array(@project.repository.tags).page(params[:page]).per(30)
+    @tags = Kaminari.paginate_array(@repository.tags).page(params[:page]).per(30)
   end
 
   def create
-    @project.repository.add_tag(params[:tag_name], params[:ref])
+    @repository.add_tag(params[:tag_name], params[:ref])
+
+    if new_tag = @repository.find_tag(params[:tag_name])
+      Event.create_ref_event(@project, current_user, new_tag, 'add', 'refs/tags')
+    end
 
     redirect_to project_tags_path(@project)
   end
 
   def destroy
-    tag = @project.repository.tags.find { |tag| tag.name == params[:id] }
+    tag = @repository.find_tag(params[:id])
 
-    if tag && @project.repository.rm_tag(tag.name)
-      Event.create_rm_ref(@project, current_user, tag, 'refs/tags')
+    if tag && @repository.rm_tag(tag.name)
+      Event.create_ref_event(@project, current_user, tag, 'rm', 'refs/tags')
     end
 
     respond_to do |format|
diff --git a/app/models/event.rb b/app/models/event.rb
index 3ed2a6aa765..759e84bb55a 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -55,14 +55,22 @@ class Event < ActiveRecord::Base
       end
     end
 
-    def create_rm_ref(project, user, ref, prefix = 'refs/heads')
+    def create_ref_event(project, user, ref, action = 'add', prefix = 'refs/heads')
+      if action.to_s == 'add'
+        before = '00000000'
+        after = ref.commit.id
+      else
+        before = ref.commit.id
+        after = '00000000'
+      end
+
       Event.create(
         project: project,
         action: Event::PUSHED,
         data: {
           ref: "#{prefix}/#{ref.name}",
-          before: ref.commit.id,
-          after: '00000000'
+          before: before,
+          after: after
         },
         author_id: user.id
       )
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 1915fb07de0..588cabfbae0 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -35,6 +35,14 @@ class Repository
     commits
   end
 
+  def find_branch(name)
+    branches.find { |branch| branch.name == name }
+  end
+
+  def find_tag(name)
+    tags.find { |tag| tag.name == name }
+  end
+
   def add_branch(branch_name, ref)
     Rails.cache.delete(cache_key(:branch_names))
 
-- 
GitLab