diff --git a/app/assets/stylesheets/sections/tree.scss b/app/assets/stylesheets/sections/tree.scss index cd31b6a3ee4..c08a93fc8af 100644 --- a/app/assets/stylesheets/sections/tree.scss +++ b/app/assets/stylesheets/sections/tree.scss @@ -59,3 +59,11 @@ } } } + +.tree-btn-group { + .btn { + margin-right:-3px; + padding:2px 10px; + } +} + diff --git a/app/controllers/tree_controller.rb b/app/controllers/tree_controller.rb index 8109d1c19c6..475e2b61a18 100644 --- a/app/controllers/tree_controller.rb +++ b/app/controllers/tree_controller.rb @@ -21,23 +21,23 @@ class TreeController < ProjectResourceController end def edit - @last_commit = @project.commits(@ref, @path, 1).first.sha + @last_commit = @project.last_commit_for(@ref, @path).sha end def update file_editor = Gitlab::FileEditor.new(current_user, @project, @ref) update_status = file_editor.update( - @path, - params[:content], - params[:commit_message], + @path, + params[:content], + params[:commit_message], params[:last_commit] ) - + if update_status redirect_to project_tree_path(@project, @id), :notice => "File has been successfully changed" else flash[:notice] = "You can't save file because it has been changed" - render :edit + render :edit end end end diff --git a/app/roles/repository.rb b/app/roles/repository.rb index 35093a2fc75..88fd90d061f 100644 --- a/app/roles/repository.rb +++ b/app/roles/repository.rb @@ -32,6 +32,10 @@ module Repository Commit.commits(repo, ref, path, limit, offset) end + def last_commit_for(ref, path = nil) + commits(ref, path, 1).first + end + def commits_between(from, to) Commit.commits_between(repo, from, to) end diff --git a/app/views/tree/_tree_file.html.haml b/app/views/tree/_tree_file.html.haml index bae43087335..5202126792a 100644 --- a/app/views/tree/_tree_file.html.haml +++ b/app/views/tree/_tree_file.html.haml @@ -5,10 +5,11 @@ = tree_file.name.force_encoding('utf-8') %small #{tree_file.mode} %span.options - = link_to "raw", project_blob_path(@project, @id), class: "btn very_small", target: "_blank" - = link_to "history", project_commits_path(@project, @id), class: "btn very_small" - = link_to "blame", project_blame_path(@project, @id), class: "btn very_small" - = link_to "Edit", edit_project_tree_path(@project, @id), class: "btn very_small" + .btn-group.tree-btn-group + = link_to "raw", project_blob_path(@project, @id), class: "btn very_small", target: "_blank" + = link_to "history", project_commits_path(@project, @id), class: "btn very_small" + = link_to "blame", project_blame_path(@project, @id), class: "btn very_small" + = link_to "edit", edit_project_tree_path(@project, @id), class: "btn very_small" - if tree_file.text? - if gitlab_markdown?(tree_file.name) .file_content.wiki diff --git a/app/views/tree/edit.html.haml b/app/views/tree/edit.html.haml index a97abc68cf2..b81373b5587 100644 --- a/app/views/tree/edit.html.haml +++ b/app/views/tree/edit.html.haml @@ -3,7 +3,10 @@ .file_holder .file_title %i.icon-file - = @tree.path.force_encoding('utf-8') + %span.file_name + = @tree.path.force_encoding('utf-8') + %span.options + = link_to "cancel editing", project_tree_path(@project, @id), class: "btn very_small" .file_content.code #editor= @tree.data diff --git a/features/project/source/browse_files.feature b/features/project/source/browse_files.feature index 9b650d64041..0b8495ffc58 100644 --- a/features/project/source/browse_files.feature +++ b/features/project/source/browse_files.feature @@ -23,5 +23,5 @@ Feature: Project Browse files @javascript Scenario: I can edit file Given I click on "Gemfile" file in repo - And I click button "Edit" + And I click button "edit" Then I can edit code diff --git a/features/steps/project/project_browse_files.rb b/features/steps/project/project_browse_files.rb index b0a0995730c..7fb9dccd767 100644 --- a/features/steps/project/project_browse_files.rb +++ b/features/steps/project/project_browse_files.rb @@ -32,8 +32,8 @@ class ProjectBrowseFiles < Spinach::FeatureSteps page.source.should == ValidCommit::BLOB_FILE end - Given 'I click button "Edit"' do - click_link 'Edit' + Given 'I click button "edit"' do + click_link 'edit' end Then 'I can edit code' do diff --git a/lib/gitlab/file_editor.rb b/lib/gitlab/file_editor.rb index 1d52f16ae7d..64155967ef4 100644 --- a/lib/gitlab/file_editor.rb +++ b/lib/gitlab/file_editor.rb @@ -1,6 +1,9 @@ module Gitlab + # GitLab file editor + # + # It gives you ability to make changes to files + # & commit this changes from GitLab UI. class FileEditor - attr_accessor :user, :project, :ref def initialize(user, project, ref) @@ -35,22 +38,21 @@ module Gitlab r.git.sh "git add ." r.git.sh "git commit -am '#{commit_message}'" output = r.git.sh "git push origin #{ref}" + if output =~ /reject/ return false end end end end - true - end - + protected + def can_edit?(path, last_commit) current_last_commit = @project.commits(ref, path, 1).first.sha last_commit == current_last_commit end - end end