summaryrefslogtreecommitdiff
path: root/lib/api
diff options
context:
space:
mode:
authorJan-Willem van der Meer <mail@jewilmeer.nl>2014-09-11 11:46:08 +0200
committerJan-Willem van der Meer <mail@jewilmeer.nl>2014-09-11 11:46:08 +0200
commitbf0de1a500e7a9aecc7c8bbf623ad39b75c6433b (patch)
tree382df65e2b17c91e03278d58bce8dce0129a6a7b /lib/api
parentb18d1c2786c2a385d6b797734a1afad7a01ddf35 (diff)
parent78ec7d9c9d156fe556d165c1c096bf5534d62d25 (diff)
downloadgitlab-ce-bf0de1a500e7a9aecc7c8bbf623ad39b75c6433b.tar.gz
Merge remote-tracking branch 'origin/master' into feature-oauth-refactoring
Diffstat (limited to 'lib/api')
-rw-r--r--lib/api/branches.rb16
-rw-r--r--lib/api/issues.rb29
-rw-r--r--lib/api/repositories.rb17
3 files changed, 51 insertions, 11 deletions
diff --git a/lib/api/branches.rb b/lib/api/branches.rb
index b32a4aa7bc2..4db5f61dd28 100644
--- a/lib/api/branches.rb
+++ b/lib/api/branches.rb
@@ -80,9 +80,17 @@ module API
# POST /projects/:id/repository/branches
post ":id/repository/branches" do
authorize_push_project
- @branch = CreateBranchService.new.execute(user_project, params[:branch_name], params[:ref], current_user)
-
- present @branch, with: Entities::RepoObject, project: user_project
+ result = CreateBranchService.new.execute(user_project,
+ params[:branch_name],
+ params[:ref],
+ current_user)
+ if result[:status] == :success
+ present result[:branch],
+ with: Entities::RepoObject,
+ project: user_project
+ else
+ render_api_error!(result[:message], 400)
+ end
end
# Delete branch
@@ -99,7 +107,7 @@ module API
if result[:state] == :success
true
else
- render_api_error!(result[:message], 405)
+ render_api_error!(result[:message], result[:return_code])
end
end
end
diff --git a/lib/api/issues.rb b/lib/api/issues.rb
index 043ce04d321..5369149cdfc 100644
--- a/lib/api/issues.rb
+++ b/lib/api/issues.rb
@@ -11,6 +11,10 @@ module API
else issues
end
end
+
+ def filter_issues_labels(issues, labels)
+ issues.includes(:labels).where("labels.title" => labels.split(','))
+ end
end
resource :issues do
@@ -18,13 +22,22 @@ module API
#
# Parameters:
# state (optional) - Return "opened" or "closed" issues
- #
+ # labels (optional) - Comma-separated list of label names
+
# Example Requests:
# GET /issues
# GET /issues?state=opened
# GET /issues?state=closed
+ # GET /issues?labels=foo
+ # GET /issues?labels=foo,bar
+ # GET /issues?labels=foo,bar&state=opened
get do
- present paginate(filter_issues_state(current_user.issues, params['state'])), with: Entities::Issue
+ issues = current_user.issues
+ issues = filter_issues_state(issues, params[:state]) unless params[:state].nil?
+ issues = filter_issues_labels(issues, params[:labels]) unless params[:labels].nil?
+ issues = issues.order('issues.id DESC')
+
+ present paginate(issues), with: Entities::Issue
end
end
@@ -34,13 +47,23 @@ module API
# Parameters:
# id (required) - The ID of a project
# state (optional) - Return "opened" or "closed" issues
+ # labels (optional) - Comma-separated list of label names
#
# Example Requests:
# GET /projects/:id/issues
# GET /projects/:id/issues?state=opened
# GET /projects/:id/issues?state=closed
+ # GET /projects/:id/issues
+ # GET /projects/:id/issues?labels=foo
+ # GET /projects/:id/issues?labels=foo,bar
+ # GET /projects/:id/issues?labels=foo,bar&state=opened
get ":id/issues" do
- present paginate(filter_issues_state(user_project.issues, params['state'])), with: Entities::Issue
+ issues = user_project.issues
+ issues = filter_issues_state(issues, params[:state]) unless params[:state].nil?
+ issues = filter_issues_labels(issues, params[:labels]) unless params[:labels].nil?
+ issues = issues.order('issues.id DESC')
+
+ present paginate(issues), with: Entities::Issue
end
# Get a single project issue
diff --git a/lib/api/repositories.rb b/lib/api/repositories.rb
index 42068bb343d..07c29aa7b4c 100644
--- a/lib/api/repositories.rb
+++ b/lib/api/repositories.rb
@@ -32,14 +32,23 @@ module API
# id (required) - The ID of a project
# tag_name (required) - The name of the tag
# ref (required) - Create tag from commit sha or branch
+ # message (optional) - Specifying a message creates an annotated tag.
# Example Request:
# POST /projects/:id/repository/tags
post ':id/repository/tags' do
authorize_push_project
- @tag = CreateTagService.new.execute(user_project, params[:tag_name],
- params[:ref], current_user)
-
- present @tag, with: Entities::RepoObject, project: user_project
+ message = params[:message] || nil
+ result = CreateTagService.new.execute(user_project, params[:tag_name],
+ params[:ref], message,
+ current_user)
+
+ if result[:status] == :success
+ present result[:tag],
+ with: Entities::RepoObject,
+ project: user_project
+ else
+ render_api_error!(result[:message], 400)
+ end
end
# Get a project repository tree