Форум сайта python.su
Хочу написать скрипт на python, который удалит файл из удаленного репозитория gitlab (из определенной ветки).
Для начала решил ознакомиться с gitlab api. Есть документация https://docs.gitlab.com/ee/api/commits.html#create-a-commit-with-multiple-files-and-actions
там есть пример для curl:
PAYLOAD=$(cat << 'JSON' { "branch": "master", "commit_message": "some commit message", "actions": [ { "action": "create", "file_path": "foo/bar", "content": "some content" }, { "action": "delete", "file_path": "foo/bar2" }, { "action": "move", "file_path": "foo/bar3", "previous_path": "foo/bar4", "content": "some content" }, { "action": "update", "file_path": "foo/bar5", "content": "new content" }, { "action": "chmod", "file_path": "foo/bar5", "execute_filemode": true } ] } JSON ) curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --header "Content-Type: application/json" --data "$PAYLOAD" https://gitlab.example.com/api/v4/projects/1/repository/commits
curl --request POST --header "PRIVATE-TOKEN: ***" --header "Content-Type: application/json" --data '{"branch":"my_branch","commit_message":"message","actions":[{"action":"delete","file_path":"README.md"}]}' https://gitlab.com/api/v4/projects/1/repository/commits
Отредактировано polin11 (Янв. 22, 2019 03:44:10)
Офлайн
и где тут вопрос про питон?
Офлайн
я хочу понять как это работает через curl, затем самостоятельно на python напишу скрипт при помощи библиотеки requests. Надеюсь, что большинство питонистов часто работают с curl и gitlab и смогут подсказать пути решения
Отредактировано polin11 (Янв. 22, 2019 10:10:03)
Офлайн
попробовал вызвать с ключом -v
ответ такой:
HTTP/ 1.1 400 Bad request
connection #0 to host gitlab.com left intact
Видимо синтаксис запроса неверный, подозреваю проблема из-за информации –data, может быть в запросе нужно указать, что данные в формате JSON
Офлайн
Запроси просто коммит через curl для начала.
Офлайн
Работает, приходит информация о коммите
curl -v –header “PRIVATE-TOKEN: ***” https://gitlab.com/api/v4/projects/1/repository/commits/76acf22
Работает, делает реверт коммита
curl -v –request POST –header “PRIVATE-TOKEN: ***” –form “branch=my_branch” https://gitlab.com/api/v4/projects/1/repository/commits/76acf22/revert
Офлайн
Дальше получи этот файл через curl
https://docs.gitlab.com/ee/api/repository_files.html#get-file-from-repository
Дальше удали файл основным способом через curl
https://docs.gitlab.com/ee/api/repository_files.html#delete-existing-file-in-repository
Если не удаляется, создай второй файл, закоммить его и удали этот второй файл.
Офлайн
Эмпирическим путем выяснил, если записать JSON в файл (например 1.json), то такой запрос прекрасно работает
curl --request POST --header "PRIVATE-TOKEN: ***" --header "Content-Type: application/json" --data "@1.json" https://gitlab.com/api/v4/projects/1/repository/commits
Офлайн
Есть такой вопрос:
Есть 2 ветки, назовем их Branch1 и Branch2, Branch2 создана на основе Branch1.
При помощи gitlab api, создаю на основе ветки Branch1 новую ветку Branch1_new пушу туда некоторые изменения.
Если создаю мерж реквест (пытаюсь смержить) ветку Branch1_new в Branch2 (раздел Changes заполнен) изменения появляются в Branch2.
Если создаю мерж реквест (пытаюсь смержить) ветку Branch1_new в Branch1 (раздел Changes заполнен) изменения появляются в Branch1.
Но когда делаю подряд 2 мерж реквеста, ветку Branch1_new в Branch1 и в Branch2, то изменения отображаются только в Branch1 (раздел Changes заполнен) . В мерже в Branch2 нет никаких изменений (раздел Changes пустой), почему не могу понять?
Пользователи, которые часто пользуются gitlab поясните причину
Прикреплённый файлы:
gitlab_changes.png (84,3 KБ)
Офлайн