За последние 24 часа нас посетили 22627 программистов и 1049 роботов. Сейчас ищут 662 программиста ...

применение curl

Тема в разделе "PHP для новичков", создана пользователем polin11, 22 янв 2019.

Метки:
  1. polin11

    polin11 Активный пользователь

    С нами с:
    22 янв 2019
    Сообщения:
    20
    Симпатии:
    0
    Хочу написать скрипт, который удалит файл из удаленного репозитория gitlab (из определенной ветки).
    Для начала решил ознакомиться с gitlab api. Есть документация https://docs.gitlab.com/ee/api/commits.html#create-a-commit-with-multiple-files-and-actions
    там есть пример для curl:
    Код (Javascript):
    1. PAYLOAD=$(cat << 'JSON'
    2. {
    3.   "branch": "master",
    4.   "commit_message": "some commit message",
    5.   "actions": [
    6.     {
    7.       "action": "create",
    8.       "file_path": "foo/bar",
    9.       "content": "some content"
    10.     },
    11.     {
    12.       "action": "delete",
    13.       "file_path": "foo/bar2"
    14.     },
    15.     {
    16.       "action": "move",
    17.       "file_path": "foo/bar3",
    18.       "previous_path": "foo/bar4",
    19.       "content": "some content"
    20.     },
    21.     {
    22.       "action": "update",
    23.       "file_path": "foo/bar5",
    24.       "content": "new content"
    25.     },
    26.     {
    27.       "action": "chmod",
    28.       "file_path": "foo/bar5",
    29.       "execute_filemode": true
    30.     }
    31.   ]
    32. }
    33. JSON
    34. )
    35. 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 выполнить

    Код (Javascript):
    1. 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 указан верно, почему не удаляется файл?
     
  2. polin11

    polin11 Активный пользователь

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

    polin11 Активный пользователь

    С нами с:
    22 янв 2019
    Сообщения:
    20
    Симпатии:
    0
    Эмпирическим путем выяснил, если записать 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, который делает тоже самое…
     
  4. polin11

    polin11 Активный пользователь

    С нами с:
    22 янв 2019
    Сообщения:
    20
    Симпатии:
    0
    Сам спросил, сам ответил - красота, всем СПАСИБО
     
  5. polin11

    polin11 Активный пользователь

    С нами с:
    22 янв 2019
    Сообщения:
    20
    Симпатии:
    0
    Есть такой вопрос:
    Есть 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