The following REST Url of GitLab API gives me the repository tree of a project.
Get Repo Tree (WORKS)
https://gitlab.gspt.net/api/v3/projects/2931/repository/tree?private_token=XXXX
Output:
[
{
"id": "a49d11794ed56db7f935abfd61002aef67159d10",
"name": "src",
"type": "tree",
"path": "src",
"mode": "040000"
},
{
"id": "0fbd98527d4b36e3d22c164293d8fd8eee4d18cd",
"name": ".gitignore",
"type": "blob",
"path": ".gitignore",
"mode": "100644"
},
{
"id": "0ef0da472176f2e6a24843ac9d4bb738c8310d23",
"name": "pom.xml",
"type": "blob",
"path": "pom.xml",
"mode": "100644"
}
]
But I am not able to get the raw content of a file, pom.xml to be precise.
Get Raw Content of a file (DOES NOT WORK - Gives 404)
https://gitlab.gspt.net/api/v3/projects/2931/repository/files/pom%2Exml/raw?private_token=xxxx&ref_name=master
Output:
{
"error": "404 Not Found"
}
As per the documentation here (https://docs.gitlab.com/ee/api/repository_files.html#get-raw-file-from-repository) I am specify the correct rest url. The only thing that's different however is the use of V4 instead of V3 in the rest api endpoint. I searched around but could not find the endpoint of v3 api.
The GitLab API allows you to perform many of the actions you typically do when using the user interface. Using the API allows us to automate the process and eliminate any user interaction. The GitLab API comes in two flavors: the REST API and the GraphQL API.
The file finder feature allows you to search for a file in a repository using the GitLab UI. To use it: Go to your project's Repository > Files. In the upper right corner, select Find File.
First, just in case, don't percent encode the ".":
.../files/pom.xml/raw?...
^^
Second, you can check how the files endpoint was affected from v3 to v4 in the merge request 9637 and this comparison
v3:
GET /projects/:id/repository/raw_blobs/:sha
v4:
GET /projects/:id/repository/blobs/:sha/raw
You can see the examples (in v3) did not percent encode the dot.
curl --request GET --header 'PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK' \
'https://gitlab.example.com/api/v3/projects/13083/repository/files?file_path=app/models/key.rb&ref=master'
However, the v3 API only allows to get raw blobs, not a raw file.
See merge request 16834:
- Modify
/projects/:id/repository/files
to/projects/:id/repository/files/:filepath
(:filepath
should be URL-encoded)- Move
/projects/:id/repository/blobs/:sha
to/projects/:id/repository/files/:filepath/raw
Only v4 API allows for a :filepath
parameters.
See "Git objects SHA-1 are file contents or file names?" to decode the raw blob you get from API v3.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With