diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-11-07 18:53:09 +0200 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-11-07 18:53:09 +0200 |
commit | 0b67606af6b339b6d3a84ffd981bf7d850e3b93f (patch) | |
tree | ee70c765349cfce3fdd356eca91eba64919b32d8 /lib/api/files.rb | |
parent | c28786ecbeb7ba2e630896b37481b918af4ed39e (diff) | |
download | gitlab-ce-0b67606af6b339b6d3a84ffd981bf7d850e3b93f.tar.gz |
New API: create file in repo
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'lib/api/files.rb')
-rw-r--r-- | lib/api/files.rb | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/api/files.rb b/lib/api/files.rb new file mode 100644 index 00000000000..5918b6e5ca0 --- /dev/null +++ b/lib/api/files.rb @@ -0,0 +1,41 @@ +module API + # Projects API + class Files < Grape::API + before { authenticate! } + before { authorize! :push_code, user_project } + + resource :projects do + # Create new file in repository + # + # Parameters: + # file_name (required) - The name of new file. Ex. class.rb + # file_path (optiona) - The path to new file. Ex. lib/ + # branch_name (required) - The name of branch + # content (required) - File content + # commit_message (required) - Commit message + # + # Example Request: + # POST /projects/:id/repository/files + post ":id/repository/files" do + required_attributes! [:file_name, :branch_name, :content] + attrs = attributes_for_keys [:file_name, :file_path, :branch_name, :content] + branch_name = attrs.delete(:branch_name) + file_path = attrs.delete(:file_path) + result = ::Files::CreateContext.new(user_project, current_user, attrs, branch_name, file_path).execute + + if result[:status] == :success + status(201) + + { + file_name: attrs[:file_name], + file_path: file_path, + branch_name: branch_name + } + else + render_api_error!(result[:error], 400) + end + end + end + end +end + |