Commit c49f9c61 authored by Jeroen van Baarsen's avatar Jeroen van Baarsen

Merge branch 'api-retrieve-tag' into 'master'

API: Ability to retrieve a single tag

* Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/14330

/cc @dblessing 

See merge request !3567
parents f76bfed9 7f287c91
...@@ -22,6 +22,7 @@ v 8.7.0 (unreleased) ...@@ -22,6 +22,7 @@ v 8.7.0 (unreleased)
- Remove "Congratulations!" tweet button on newly-created project. (Connor Shea) - Remove "Congratulations!" tweet button on newly-created project. (Connor Shea)
- Improved UX of the navigation sidebar - Improved UX of the navigation sidebar
- Build status notifications - Build status notifications
- API: Ability to retrieve a specific tag (Robert Schilling)
v 8.6.5 (unreleased) v 8.6.5 (unreleased)
- Check permissions when user attempts to import members from another project - Check permissions when user attempts to import members from another project
......
...@@ -38,6 +38,38 @@ Parameters: ...@@ -38,6 +38,38 @@ Parameters:
] ]
``` ```
## Get a single repository tag
Get a specific repository tag determined by its name. It returns 200 together
with the tag information if the tag exists. It returns 404 if the tag does not
exist.
Parameters:
- `id` (required) - The ID of a project
- `tag_name` (required) - The name of the tag
```json
{
"name": "v5.0.0",
"message": null,
"commit": {
"id": "60a8ff033665e1207714d6670fcd7b65304ec02f",
"message": "v5.0.0\n",
"parent_ids": [
"f61c062ff8bcbdb00e0a1b3317a91aed6ceee06b"
],
"authored_date": "2015-02-01T21:56:31.000+01:00",
"author_name": "Arthur Verschaeve",
"author_email": "contact@arthurverschaeve.be",
"committed_date": "2015-02-01T21:56:31.000+01:00",
"committer_name": "Arthur Verschaeve",
"committer_email": "contact@arthurverschaeve.be"
},
"release": null
}
```
## Create a new tag ## Create a new tag
Creates a new tag in the repository that points to the supplied ref. Creates a new tag in the repository that points to the supplied ref.
......
...@@ -16,6 +16,20 @@ module API ...@@ -16,6 +16,20 @@ module API
with: Entities::RepoTag, project: user_project with: Entities::RepoTag, project: user_project
end end
# Get a single repository tag
#
# Parameters:
# id (required) - The ID of a project
# tag_name (required) - The name of the tag
# Example Request:
# GET /projects/:id/repository/tags/:tag_name
get ":id/repository/tags/:tag_name", requirements: { tag_name: /.*/ } do
tag = user_project.repository.find_tag(params[:tag_name])
not_found!('Tag') unless tag
present tag, with: Entities::RepoTag, project: user_project
end
# Create tag # Create tag
# #
# Parameters: # Parameters:
......
...@@ -40,6 +40,23 @@ describe API::API, api: true do ...@@ -40,6 +40,23 @@ describe API::API, api: true do
end end
end end
describe "GET /projects/:id/repository/tags/:tag_name" do
let(:tag_name) { project.repository.tag_names.sort.reverse.first }
it 'should return a specific tag' do
get api("/projects/#{project.id}/repository/tags/#{tag_name}", user)
expect(response.status).to eq(200)
expect(json_response['name']).to eq(tag_name)
end
it 'should return 404 for an invalid tag name' do
get api("/projects/#{project.id}/repository/tags/foobar", user)
expect(response.status).to eq(404)
end
end
describe 'POST /projects/:id/repository/tags' do describe 'POST /projects/:id/repository/tags' do
context 'lightweight tags' do context 'lightweight tags' do
it 'should create a new tag' do it 'should create a new tag' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment