Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 22, 2019 03:43:51

polin11
Зарегистрирован: 2013-05-02
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

применение curl

Хочу написать скрипт на 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 выполнить

 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
никакое сообщение с ошибкой не падает, но файл README.md не удаляется, проверял PRIVATE-TOKEN -указан верно, ветка my_branch существует,
в url id проекта указан верно, почему не удаляется файл?

Отредактировано polin11 (Янв. 22, 2019 03:44:10)

Офлайн

#2 Янв. 22, 2019 06:51:40

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

применение curl

и где тут вопрос про питон?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Янв. 22, 2019 09:58:37

polin11
Зарегистрирован: 2013-05-02
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

применение curl

я хочу понять как это работает через curl, затем самостоятельно на python напишу скрипт при помощи библиотеки requests. Надеюсь, что большинство питонистов часто работают с curl и gitlab и смогут подсказать пути решения

Отредактировано polin11 (Янв. 22, 2019 10:10:03)

Офлайн

#4 Янв. 22, 2019 11:37:29

polin11
Зарегистрирован: 2013-05-02
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

применение curl

попробовал вызвать с ключом -v
ответ такой:
HTTP/ 1.1 400 Bad request
connection #0 to host gitlab.com left intact
Видимо синтаксис запроса неверный, подозреваю проблема из-за информации –data, может быть в запросе нужно указать, что данные в формате JSON

Офлайн

#5 Янв. 22, 2019 13:23:29

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8145
Репутация: +  734  -
Профиль   Отправить e-mail  

применение curl

Запроси просто коммит через curl для начала.



Офлайн

#6 Янв. 22, 2019 14:18:26

polin11
Зарегистрирован: 2013-05-02
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

применение 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

Офлайн

#7 Янв. 22, 2019 15:02:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8145
Репутация: +  734  -
Профиль   Отправить e-mail  

применение curl

Дальше получи этот файл через 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

Если не удаляется, создай второй файл, закоммить его и удали этот второй файл.



Офлайн

#8 Янв. 22, 2019 18:21:31

polin11
Зарегистрирован: 2013-05-02
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

применение curl

Эмпирическим путем выяснил, если записать 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

Для полного счастья, осталось написать скрип на python, наверно при помощи библиотеки requests или urllib, который делает тоже самое…

Офлайн

#9 Янв. 31, 2019 01:30:24

polin11
Зарегистрирован: 2013-05-02
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

применение curl

Есть такой вопрос:
Есть 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 поясните причину

Прикреплённый файлы:
attachment gitlab_changes.png (84,3 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version