diff --git a/app/controllers/projects/branches_controller.rb b/app/controllers/projects/branches_controller.rb index b43017f55229f782f0be8df0adf36ca773578664..a9d9cfb61e177da4cd3560c5bc7787c0824a4c5c 100644 --- a/app/controllers/projects/branches_controller.rb +++ b/app/controllers/projects/branches_controller.rb @@ -10,7 +10,9 @@ class Projects::BranchesController < Projects::ApplicationController end def create - # TODO: implement + @project.repository.add_branch(params[:branch_name], params[:ref]) + + redirect_to project_branches_path(@project) end def destroy @@ -21,7 +23,7 @@ class Projects::BranchesController < Projects::ApplicationController end respond_to do |format| - format.html { redirect_to project_branches_path } + format.html { redirect_to project_branches_path(@project) } format.js { render nothing: true } end end diff --git a/app/models/repository.rb b/app/models/repository.rb index 08574625012dad291f4206d217eccdb2105f61f2..b1f751a5cf3f865ae115044b383f10f5d768ceb4 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -35,11 +35,21 @@ class Repository commits end + def add_branch(branch_name, ref) + Rails.cache.delete(cache_key(:branch_names)) + + gitlab_shell.add_branch(path_with_namespace, branch_name, ref) + end + def rm_branch(branch_name) + Rails.cache.delete(cache_key(:branch_names)) + gitlab_shell.rm_branch(path_with_namespace, branch_name) end def rm_tag(tag_name) + Rails.cache.delete(cache_key(:tag_names)) + gitlab_shell.rm_tag(path_with_namespace, tag_name) end diff --git a/app/views/projects/branches/new.html.haml b/app/views/projects/branches/new.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..8df2c03f6c12ad9364f16d18cd6023c10ad97300 --- /dev/null +++ b/app/views/projects/branches/new.html.haml @@ -0,0 +1,24 @@ +%h3.page-title + %i.icon-code-fork + New branch += form_tag project_branches_path, method: :post do + .control-group + = label_tag :branch_name, 'Name for new branch', class: 'control-label' + .controls + = text_field_tag :branch_name, nil, placeholder: 'feature/dashboard' + .control-group + = label_tag :ref, 'Create from', class: 'control-label' + .controls + = text_field_tag :ref, nil, placeholder: 'master' + .light branch name or commit SHA + .form-actions + = submit_tag 'Create branch', class: 'btn btn-create' + = link_to 'Cancel', project_branches_path(@project), class: 'btn btn-cancel' + +:javascript + var availableTags = #{@project.repository.ref_names.to_json}; + + $("#ref").autocomplete({ + source: availableTags, + minLength: 1 + }); diff --git a/app/views/projects/repositories/_filter.html.haml b/app/views/projects/repositories/_filter.html.haml index f42493ea4a01fb5c4d2f0d7f0ef9f159bacbef8b..138fd6d511816643b39c507df3dcb461a6805dc3 100644 --- a/app/views/projects/repositories/_filter.html.haml +++ b/app/views/projects/repositories/_filter.html.haml @@ -7,3 +7,10 @@ %i.icon-lock = nav_link(path: 'branches#index') do = link_to 'All branches', project_branches_path(@project) + + +%hr + = link_to new_project_branch_path(@project), class: 'btn btn-create' do + %i.icon-add-sign + New branch + diff --git a/config/routes.rb b/config/routes.rb index 0bae5d443955225696ae9d117fba9d0e2337ca99..2d9875eb496941207cffa3114caa707acc8edf94 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -223,8 +223,8 @@ Gitlab::Application.routes.draw do end end - resources :tags, only: [:index, :create, :destroy] - resources :branches, only: [:index, :create, :destroy] + resources :tags, only: [:index, :new, :create, :destroy] + resources :branches, only: [:index, :new, :create, :destroy] resources :protected_branches, only: [:index, :create, :destroy] resources :refs, only: [] do