ФорумПрограммированиеPython → Использование curl

Использование curl

  • polin11

    Сообщения: 41 Репутация: N Группа: Кто попало

    Spritz Янв. 22, 2019, 11:22 д.п.

    Хочу написать скрипт на python, который удалит файл из удаленного репозитория gitlab (из определенной ветки).
    Для начала решил ознакомиться с gitlab api. Есть документация Commits API | GitLab [docs.gitlab.com]
    там есть пример для 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 существует,
    id проекта bp url указан верно, почему не удаляется файл?

  • polin11

    Сообщения: 41 Репутация: N Группа: Кто попало

    Spritz Янв. 22, 2019, 12:39 п.п., спустя 1 час 16 минут 40 секунд

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

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Янв. 22, 2019, 1:01 п.п., спустя 21 минуту 43 секунды

    @polin11, ну вы заголовком и так указали что формат запроса JSON

    Спустя 112 сек.

    С виду параметры в curl верные, жаль у меня нет гитлаба чтобы проверить

    Спустя 168 сек.

    Вашим синтаксисом задал запрос на Smappi, синтаксис верный, нет опечаток

    
    curl --request POST --header "Content-Type: application/json" --data '{"name": "friend"}' https://json.smappi.org/adw0rd/example/greeting
    

    Остается вопрос только к токену, телу запроса или пермишенам на гитлабе

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • polin11

    Сообщения: 41 Репутация: N Группа: Кто попало

    Spritz Янв. 22, 2019, 7:27 п.п., спустя 6 часов 26 минут 28 секунд

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

  • polin11

    Сообщения: 41 Репутация: N Группа: Кто попало

    Spritz Янв. 31, 2019, 2:36 д.п., спустя 8 дней 7 часов 8 минут

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

  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz Фев. 1, 2019, 1:47 д.п., спустя 23 часа 11 минут 35 секунд

    гитлог надо смотреть, чтобы понять чего там куда реально вмерджилось

Пожалуйста, авторизуйтесь, чтобы написать комментарий!