Skip to content

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

Open
@xmo-odoo

Description

@xmo-odoo

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)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions