Привязать ветки и запросы на слияние к задаче

POST /repos/{owner}/{repo}/issues/{issue_number}/development

Описание

Метод POST привязывает указанные ветки и запросы на слияние к задаче. Метод не применяется к запросам на слияние.

Частичные ошибки привязки возвращаются в теле ответа в поле errors.

Метод применяется для связывания задачи с активной разработкой (ветками и запросами на слияние) для отслеживания прогресса.

Примечание: для pull request маршрут возвращает 422 Unprocessable Entity.

Заголовки

ПараметрОбязательныйОписание
AcceptНетТип содержимого ответа. Рекомендуется установить значение application/vnd.gitverse.object+json;version=1
AuthorizationДаТокен доступа. Формат: Bearer <YOUR-TOKEN> или token <YOUR-TOKEN>
Content-TypeДаТип содержимого запроса: application/json

Параметры пути

ПараметрТипОбязательныйОписание
ownerstringДаВладелец репозитория (логин пользователя или имя организации)
repostringДаНазвание репозитория (без расширения .git)
issue_numberintegerДаНомер задачи

Тело запроса

ПолеОбязательноеТип и форматОписание
pulls или branchesДа, хотя бы одномассивОбъекты, которые нужно прикрепить.
pulls[].numberДа для элемента pullsцелое > 0Номер pull request.
pulls[].owner_name, pulls[].repo_nameНет, но только паройстрокиРепозиторий PR; без обоих полей используется текущий.
branches[].nameДа для элемента branchesстрокаИмя ветки.
branches[].owner_name, branches[].repo_nameНет, но только паройстрокиРепозиторий ветки; без обоих полей используется текущий.

Пример тела запроса со структурированными объектами:

{
  "pulls": [{ "number": 18 }],
  "branches": [{ "name": "feature/login", "owner_name": "acme", "repo_name": "demo" }]
}

Пример запроса

curl -X POST "https://api.gitverse.ru/repos/user/my-repo/issues/18/development" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.gitverse.object+json;version=1" \
  -H "Content-Type: application/json" \
  -d '{"branches": [{"name": "feature/issue-18"}], "pulls": [{"number": 42}]}'

Замените YOUR_TOKEN на ваш личный токен доступа.

Пример ответа (200 OK)

При успешном выполнении сервер возвращает обновленный объект связанной разработки:

{
    "pulls": [
        {
            "id": 6740,
            "url": "https://gitverse.ru/user_42/neo2/pulls/5",
            "number": 5,
            "user": {
                "id": 8960,
                "name": "Maria Kuznetsova",
                "login": "user_99",
                "type": "User",
                "bio": "",
                "email": null,
                "avatar_url": "https://gitverse.ru/avatars/5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8e5c7f5e3d5b0c4a9e6f1d2c3",
                "html_url": "https://gitverse.ru/user_99",
                "url": "https://api.gitverse.ru/users/user_99",
                "followers_url": "https://api.gitverse.ru/users/user_99/followers",
                "following_url": "https://api.gitverse.ru/users/user_99/following{/other_user}",
                "repos_url": "https://api.gitverse.ru/users/user_99/repos",
                "organizations_url": "https://api.gitverse.ru/users/user_99/orgs",
                "site_admin": false,
                "location": null,
                "is_verified": false,
                "followers": 0,
                "following": 0,
                "public_repos": 1,
                "stars_count": 0,
                "created_at": "2026-07-06T12:30:58Z",
                "updated_at": "2026-09-08T14:22:30Z"
            },
            "title": "Примеры синглтона на Java: приватный конструктор (с минусами) и лучшая реализация через enum",
            "body": "## Сводка\n\nРеализованы два варианта синглтона на Java: с приватным статическим конструктором и с использованием enum. Добавлены тесты, демонстрирующие уязвимость первого подхода через reflection и устойчивость enum-синглтона.\n\n## Изменения\n\n- src/main/java/src/SingletonPrivateConstructor.java — пример синглтона с приватным статическим конструктором (ленивая инициализация через classloader). В комментариях описаны все минусы подхода: уязвимость через reflection, уязвимость через десериализацию, сложность тестирования и жёсткая связность.\n- src/main/java/src/SingletonEnum.java — лучшая реализация синглтона через enum (по Joshua Bloch, Effective Java, Item 3). В комментариях объяснены преимущества: устойчивость к reflection, корректная работа с сериализацией, потокобезопасность, компактность.\n- test/java/src/SingletonTest.java — набор тестов, подтверждающих: идентичность обоих синглтонов при нормальном использовании, возможность обхода приватного конструктора через reflection, невозможность обхода enum-синглтона.\n\n## Проверка\n\nКоманды и результаты:\n- javac (javac 25.0.3) — компиляция прошла успешно, ошибок нет\n- java src.SingletonTest — все 4 теста выполнены:\n  1. Базовая работа — оба синглтона возвращают один экземпляр\n  2. Reflection-взлом private-конструктора — подтверждён (true, созданы два разных объекта)\n  3. Enum-устойчивость к reflection — подтверждена (NoSuchMethodException)\n  4. Идентичность getInstance — обе реализации возвращают один объект\n\n## Риски\n\n- Изменений в существующий код нет, risk минимальный.\n- Тесты используют reflection для демонстрации уязвимости; в production-коде это не используется.\n- Нет сборки (Maven/Gradle) — проверено прямой компиляцией javac.",
            "labels": [],
            "milestone": null,
            "assignee": null,
            "assignees": [],
            "requested_reviewers": [
                {
                    "id": 242,
                    "name": "",
                    "login": "user_42",
                    "type": "User",
                    "bio": "",
                    "email": "user_42@mail.org",
                    "avatar_url": "https://gitverse.ru/avatars/8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92",
                    "html_url": "https://gitverse.ru/user_42",
                    "url": "https://api.gitverse.ru/users/user_42",
                    "followers_url": "https://api.gitverse.ru/users/user_42/followers",
                    "following_url": "https://api.gitverse.ru/users/user_42/following{/other_user}",
                    "repos_url": "https://api.gitverse.ru/users/user_42/repos",
                    "organizations_url": "https://api.gitverse.ru/users/user_42/orgs",
                    "site_admin": false,
                    "location": null,
                    "is_verified": false,
                    "followers": 0,
                    "following": 0,
                    "public_repos": 7,
                    "stars_count": 0,
                    "created_at": "2025-05-21T08:07:22Z",
                    "updated_at": "2026-09-02T06:24:23Z"
                }
            ],
            "requested_teams": [],
            "state": "open",
            "locked": false,
            "draft": false,
            "comments": 6,
            "html_url": "https://gitverse.ru/user_42/neo2/pulls/5",
            "diff_url": "https://gitverse.ru/user_42/neo2/pulls/5.diff",
            "patch_url": "https://gitverse.ru/user_42/neo2/pulls/5.patch",
            "mergeable": true,
            "merged": false,
            "merged_at": null,
            "merge_commit_sha": null,
            "merged_by": null,
            "maintainer_can_modify": false,
            "additions": 90,
            "deletions": 0,
            "changed_files": 3,
            "review_comments": 1,
            "base": {
                "label": "master",
                "ref": "master",
                "sha": "756eb2fbea6a74a3119e03f71dd6025b10f15fbb",
                "repo_id": 41662,
                "repo": {
                    "id": 41662,
                    "name": "neo2",
                    "full_name": "user_42/neo2",
                    "owner": {
                        "login": "user_42",
                        "id": 242,
                        "avatar_url": "https://gitverse.ru/avatars/8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92",
                        "url": "https://api.gitverse.ru/users/user_42",
                        "html_url": "https://gitverse.ru/user_42",
                        "followers_url": "https://api.gitverse.ru/users/user_42/followers",
                        "following_url": "https://api.gitverse.ru/users/user_42/following{/other_user}",
                        "organizations_url": "https://api.gitverse.ru/users/user_42/orgs",
                        "repos_url": "https://api.gitverse.ru/users/user_42/repos",
                        "type": "User",
                        "user_view_type": "public",
                        "site_admin": false
                    },
                    "private": false,
                    "html_url": "https://gitverse.ru/user_42/neo2",
                    "description": null,
                    "fork": false,
                    "forks": 0,
                    "forks_count": 0,
                    "language": null,
                    "stargazers_count": 0,
                    "watchers": 0,
                    "watchers_count": 0,
                    "size": 30,
                    "default_branch": "master",
                    "open_issues": 4,
                    "open_issues_count": 4,
                    "is_template": false,
                    "topics": [],
                    "archived": false,
                    "disabled": false,
                    "visibility": "public",
                    "pushed_at": "2026-08-12T16:07:39Z",
                    "has_issues": true,
                    "has_wiki": true,
                    "has_projects": true,
                    "has_pages": false,
                    "has_downloads": false,
                    "allow_forking": true,
                    "homepage": null,
                    "license": null,
                    "created_at": "2026-08-04T10:14:49Z",
                    "updated_at": "2026-09-07T13:26:02Z",
                    "allow_merge_commit": true,
                    "allow_squash_merge": true,
                    "allow_rebase_merge": true,
                    "delete_branch_on_merge": false,
                    "clone_url": "https://gitverse.ru/user_42/neo2.git",
                    "ssh_url": "git@gitverse.ru:user_42/neo2.git",
                    "mirror_url": null,
                    "url": "https://api.gitverse.ru/repos/user_42/neo2",
                    "contents_url": "https://api.gitverse.ru/repos/user_42/neo2/contents/{+path}",
                    "forks_url": "https://api.gitverse.ru/repos/user_42/neo2/forks",
                    "hooks_url": "https://api.gitverse.ru/repos/user_42/neo2/hooks",
                    "issue_comment_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/comments{/number}",
                    "issues_url": "https://api.gitverse.ru/repos/user_42/neo2/issues{/number}",
                    "languages_url": "https://api.gitverse.ru/repos/user_42/neo2/languages",
                    "pulls_url": "https://api.gitverse.ru/repos/user_42/neo2/pulls{/number}",
                    "permissions": {
                        "pull": true,
                        "push": true,
                        "admin": true
                    },
                    "role_name": "admin",
                    "template_repository": null,
                    "parent": null
                }
            },
            "head": {
                "label": "java-singleton",
                "ref": "java-singleton",
                "sha": "6c9042189bcf45b2828f7b7bb6e860476613100d",
                "repo_id": 41662,
                "repo": {
                    "id": 41662,
                    "name": "neo2",
                    "full_name": "user_42/neo2",
                    "owner": {
                        "login": "user_42",
                        "id": 242,
                        "avatar_url": "https://gitverse.ru/avatars/8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92",
                        "url": "https://api.gitverse.ru/users/user_42",
                        "html_url": "https://gitverse.ru/user_42",
                        "followers_url": "https://api.gitverse.ru/users/user_42/followers",
                        "following_url": "https://api.gitverse.ru/users/user_42/following{/other_user}",
                        "organizations_url": "https://api.gitverse.ru/users/user_42/orgs",
                        "repos_url": "https://api.gitverse.ru/users/user_42/repos",
                        "type": "User",
                        "user_view_type": "public",
                        "site_admin": false
                    },
                    "private": false,
                    "html_url": "https://gitverse.ru/user_42/neo2",
                    "description": null,
                    "fork": false,
                    "forks": 0,
                    "forks_count": 0,
                    "language": null,
                    "stargazers_count": 0,
                    "watchers": 0,
                    "watchers_count": 0,
                    "size": 30,
                    "default_branch": "master",
                    "open_issues": 4,
                    "open_issues_count": 4,
                    "is_template": false,
                    "topics": [],
                    "archived": false,
                    "disabled": false,
                    "visibility": "public",
                    "pushed_at": "2026-08-12T16:07:39Z",
                    "has_issues": true,
                    "has_wiki": true,
                    "has_projects": true,
                    "has_pages": false,
                    "has_downloads": false,
                    "allow_forking": true,
                    "homepage": null,
                    "license": null,
                    "created_at": "2026-08-04T10:14:49Z",
                    "updated_at": "2026-09-07T13:26:02Z",
                    "allow_merge_commit": true,
                    "allow_squash_merge": true,
                    "allow_rebase_merge": true,
                    "delete_branch_on_merge": false,
                    "clone_url": "https://gitverse.ru/user_42/neo2.git",
                    "ssh_url": "git@gitverse.ru:user_42/neo2.git",
                    "mirror_url": null,
                    "url": "https://api.gitverse.ru/repos/user_42/neo2",
                    "contents_url": "https://api.gitverse.ru/repos/user_42/neo2/contents/{+path}",
                    "forks_url": "https://api.gitverse.ru/repos/user_42/neo2/forks",
                    "hooks_url": "https://api.gitverse.ru/repos/user_42/neo2/hooks",
                    "issue_comment_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/comments{/number}",
                    "issues_url": "https://api.gitverse.ru/repos/user_42/neo2/issues{/number}",
                    "languages_url": "https://api.gitverse.ru/repos/user_42/neo2/languages",
                    "pulls_url": "https://api.gitverse.ru/repos/user_42/neo2/pulls{/number}",
                    "permissions": {
                        "pull": true,
                        "push": true,
                        "admin": true
                    },
                    "role_name": "admin",
                    "template_repository": null,
                    "parent": null
                }
            },
            "created_at": "2026-08-12T15:58:09Z",
            "updated_at": "2026-08-20T07:38:23Z",
            "closed_at": null
        }
    ],
    "branches": [
        {
            "name": "java-singleton",
            "commit": {
                "url": "https://gitverse.ru/public/api/repos/user_42/neo2/commits/6c9042189bcf45b2828f7b7bb6e860476613100d",
                "sha": "6c9042189bcf45b2828f7b7bb6e860476613100d",
                "html_url": "https://gitverse.ru/user_42/neo2/commit/6c9042189bcf45b2828f7b7bb6e860476613100d",
                "created": "2026-08-12T16:07:34Z"
            },
            "protected": false,
            "repository": {
                "id": 41662,
                "name": "neo2",
                "full_name": "user_42/neo2",
                "owner": {
                    "login": "user_42",
                    "id": 242,
                    "avatar_url": "https://gitverse.ru/avatars/8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92",
                    "url": "https://api.gitverse.ru/users/user_42",
                    "html_url": "https://gitverse.ru/user_42",
                    "followers_url": "https://api.gitverse.ru/users/user_42/followers",
                    "following_url": "https://api.gitverse.ru/users/user_42/following{/other_user}",
                    "organizations_url": "https://api.gitverse.ru/users/user_42/orgs",
                    "repos_url": "https://api.gitverse.ru/users/user_42/repos",
                    "type": "User",
                    "user_view_type": "public",
                    "site_admin": false
                },
                "private": false,
                "html_url": "https://gitverse.ru/user_42/neo2",
                "description": null,
                "fork": false,
                "forks": 0,
                "forks_count": 0,
                "language": "Text",
                "stargazers_count": 0,
                "watchers": 0,
                "watchers_count": 0,
                "size": 30,
                "default_branch": "master",
                "open_issues": 4,
                "open_issues_count": 4,
                "is_template": false,
                "topics": [],
                "archived": false,
                "disabled": false,
                "visibility": "public",
                "pushed_at": "2026-08-12T16:07:39Z",
                "has_issues": true,
                "has_wiki": true,
                "has_projects": true,
                "has_pages": false,
                "has_downloads": false,
                "allow_forking": true,
                "homepage": null,
                "license": null,
                "created_at": "2026-08-04T10:14:49Z",
                "updated_at": "2026-09-07T13:26:02Z",
                "allow_merge_commit": true,
                "allow_squash_merge": true,
                "allow_rebase_merge": true,
                "delete_branch_on_merge": false,
                "clone_url": "https://gitverse.ru/user_42/neo2.git",
                "ssh_url": "git@gitverse.ru:user_42/neo2.git",
                "mirror_url": null,
                "url": "https://api.gitverse.ru/repos/user_42/neo2",
                "contents_url": "https://api.gitverse.ru/repos/user_42/neo2/contents/{+path}",
                "forks_url": "https://api.gitverse.ru/repos/user_42/neo2/forks",
                "hooks_url": "https://api.gitverse.ru/repos/user_42/neo2/hooks",
                "issue_comment_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/comments{/number}",
                "issues_url": "https://api.gitverse.ru/repos/user_42/neo2/issues{/number}",
                "languages_url": "https://api.gitverse.ru/repos/user_42/neo2/languages",
                "pulls_url": "https://api.gitverse.ru/repos/user_42/neo2/pulls{/number}",
                "permissions": {
                    "pull": true,
                    "push": true,
                    "admin": true
                },
                "role_name": "admin",
                "template_repository": null,
                "parent": null
            }
        }
    ]
}

Не найденные или недоступные объекты не отменяют операцию: они перечисляются в errors.pulls или errors.branches как Not Found.

Структура ответа

Ответ — объект Development (связанная разработка). Полная структура описана в графе объектов, раздел «Объект Development».

На корневом уровне объект содержит:

ПолеТипОписание
pullsarrayСвязанные запросы на слияние (см. PullRequest)
branchesarrayСвязанные ветки (см. Branch)

Коды ответа

КодСтатусОписание
200OKВетки и PR привязаны к задаче.
400Bad RequestНекорректные параметры запроса.
404Not FoundЗадача или репозиторий не найдены.
422Unprocessable EntityОшибка валидации данных (в т.ч. вызов для pull request).
500Internal Server ErrorВнутренняя ошибка сервера GitVerse.