microsoft / microsoft/azure-devops-python-api

Create new git branch: azure.devops.exceptions.AzureDevOpsClientRequestError: The requested resource does not support http method 'PATCH'

未關閉
#449 2 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

主要語言
Python
星號
684
分支
218
平均合併
8 天 10 小時
30 天內合併 PR
1

描述

Background:

I'm using the azure-devops-python-api - library in order to programmatically push a commit to my Azure DevOps organization (git) repository.

The Azure DevOps REST API docs for "Update - Ref" did not help me to figure out the solution.
This discussion did not help me either.

Problem:

"The requested resource does not support http method 'PATCH'" when calling update_ref() in module azure\devops\released\git\git_client_base.py.

There is no obvious function for creating a branch, which would be called create_branch() according to the principle of least surprise.
As opposed to this Azure DevOps API, this is much more intuitively resolved in e.g. the AWS CodeCommit API.

Anyways, I would like understand what exactly goes wrong here.
The error message is very generic, I could not determine which of the inputs are the problem.

Even when I provide the filter - argument instead of being None to the target or source branch name, it throws the following error:

azure.devops.exceptions.AzureDevOpsServiceError: The only property which can be patched is isLocked.

For the sake of completeness, the short docstring of filter from the above-mentioned module:

:param str filter: The name of the branch to lock/unlock

I would also be greatful for any other way of simply creating a new branch which does not exist.


Source Code:

The code involved until invoking the git_client.update_ref() - method, is:

from azure.devops.v5_1.git.models import (
    GitRefUpdate,
)
from azure.devops.connection import Connection


release_head_commit_id = '12312314123123123213123123123'
project_name = 'project_x'
repo_name = 'project_x'
release_branch_name = 'target-branch'
feature_branch_name = 'feature-branch'
git_client = Connection(base_url=organization_url, creds=credentials).clients.get_git_client()

filter_name = None  # or feature_branch_name or release_branch_name alternatively

git_client.update_ref(
                GitRefUpdate(
                    is_locked=False,
                    name=feature_branch_name,
                    new_object_id=release_head_commit_id,
                    old_object_id='0' * 40,
                    repository_id=repo_name,
                ),
                repo_name,
                filter_name ,
                project=project_name,
                project_id=project_name,
            )

The old_object_id='0' * 40 was set like this based on this comment.

貢獻指南

這個儲存庫沒有索引到貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

研究方向

從 azure/devops/released/git/git_client_base.py 和 update_ref() 進入點開始,接著檢視連結的 Azure DevOps REST API 文件以及提供的 GitRefUpdate 呼叫。判斷是否支援透過此方法建立分支,或是否需要獨立的 API 路徑,並將有效輸入或用戶端缺少的功能記錄為結果。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
azure, python
領域
api, backend
Issue 類型
功能
難度
4/5
預估耗時
3-5 天
活躍度
停滯
描述清晰度
需要釐清
新手友好度
25/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。