Open
Description
Schema Inaccuracy
The route is documented as responding with 403 (forbidden e.g. use doesn't have write access), 404 Not Found (repo does not exist?) or 422 Unprocessable Entitiy (both sha and content specified? possibly also invalid mode, or type?)
However it can also reply with an HTTP 409 Conflict iff the repository is empty, while this is not clearly noted /repos/{owner}/{repo}/git/blobs
does document the response code and behaves the same.
Expected
Either documenting the error condition, or allowing the creation of trees and blobs in empty repositories.
Reproduction Steps
import base64
import os
import requests
# add `token` to test with here
s = requests.Session()
s.headers['Accept'] = 'application/vnd.github.v3+json'
s.headers['Authorization'] = f'token {token}'
owner = s.get('https://api.github.com/user').json()['login']
repo = 'test_' + base64.b64encode(os.urandom(6), b'-_').decode()
r = s.post('https://api.github.com/user/repos', json={
'name': repo,
'has_issues': False,
'has_projects': False,
'has_wiki': False,
'auto_init': False,
# at least one merge method must be enabled :(
'allow_squash_merge': False,
# 'allow_merge_commit': False,
'allow_rebase_merge': False,
})
r.raise_for_status()
r = s.post(f'https://api.github.com/repos/{owner}/{repo}/git/trees', json={
'tree': [{
'path': 'a',
'mode': '100644',
'type': 'blob',
'content': 'this is my content'
}]
})
print(r.status_code, r.reason)
for k, v in r.headers.items():
print(f'{k}: {v}')
print()
print(r.text)