summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/stylesheets/sections/tree.scss8
-rw-r--r--app/controllers/tree_controller.rb12
-rw-r--r--app/roles/repository.rb4
-rw-r--r--app/views/tree/_tree_file.html.haml9
-rw-r--r--app/views/tree/edit.html.haml5
-rw-r--r--features/project/source/browse_files.feature2
-rw-r--r--features/steps/project/project_browse_files.rb4
-rw-r--r--lib/gitlab/file_editor.rb12
8 files changed, 37 insertions, 19 deletions
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