BitBucket: как обновить файл через API - PullRequest
0 голосов
/ 30 января 2019

Я изо всех сил пытаюсь понять, как реализовать следующий API для обновления файлов в репо:

https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Busername%7D/%7Brepo_slug%7D/src#post

GitLab и GitHub имеют простой api - pass содержимое файла+ commit SHA, и он обновится, если коммит SHA все еще актуален.

Я попробовал это и, конечно, он с радостью перезаписывает все, что уже было:

curl -X POST \
  'https://api.bitbucket.org/2.0/repositories/%7B%7D/{uuid}/src' \
  -H 'Authorization: Bearer ***' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'cache-control: no-cache' \
  -d 'src%2Flocale%2Fen.js=test&message=Test%20commit'

Как мне указатьфайл фиксирует SHA, чтобы он не перезаписывал содержимое, если оно было обновлено?Спасибо

1 Ответ

0 голосов
/ 01 августа 2019

В документации, которая у вас уже есть в вашем вопросе, указано:

parents (string):
A comma-separated list of SHA1s of the commits that should be the parents of the newly created commit.
When omitted, the new commit will inherit from and become a child of the main branch's tip/HEAD commit.
When more than one SHA1 is provided, the first SHA1 identifies the commit from which the content will be inherited.
When more than 2 parents are provided on a Mercurial repo, a 400 is returned as Mercurial does not support "octopus merges".

Это действительно ничего не говорит о профилактике, но в описании параметра branch указано:

When a branch name is not specified, but a parent SHA1 is provided, then Bitbucket asserts that it represents the main branch's current HEAD/tip, or a 409 is returned.

Похоже, вам просто нужно добавить этот параметр в полезную нагрузку данных, и это должно предотвратить изменения, если предоставленный хэш не является текущим коммитом.Затем вы получите ответ со статусом http 409.

-d 'src%2Flocale%2Fen.js=test&message=Test%20commit&parents=sha-hash'
...