Skip to content

[Schema Inaccuracy] /repos/{owner}/{repo}/git/trees can respond with an undocumented 409 #637

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
xmo-odoo opened this issue Oct 21, 2021 · 0 comments

Comments

@xmo-odoo
Copy link

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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants