需求:
Azure DevOps Server 的拉取請求模塊,為開發團隊提供了強大而且靈活的代碼評審功能。拉取請求中變更文件清單,對質量管理人員,是一個寶貴的材料。質量保障人員可以從代碼清單中分析不通文件的修改頻率、不通文件對應需求類型的關聯關系的功能。通過對這些數據的分析,可以深度挖掘開發過程中積累的數據的價值。下面介紹如何使用Azure DevOps Server 提供的Rest Api 輕易獲取拉取請求的變革清單文件。
第一步:獲取所有拉取請求
首先需要從拉取請求清單中獲取你指定的拉取請求的API地址,例如下面的樣例獲取了ID為“”的一個拉取請求,屬性url就是該拉取請求的詳細信息接口。
Api樣例:http://DevOpsServer:8080/tfs/defaultcollection/mydelegate/_apis/git/repositories/HelloWorld2/pullrequests
{
"value": [{
"repository": {
"id": "e7b2adbc-dab4-4432-a0df-072b9a8d48b9",
"name": "HelloWorld2",
"url": "http://DevOpsServer:8080/tfs/DefaultCollection/_apis/git/repositories/e7b2adbc-dab4-4432-a0df-072b9a8d48b9",
......
}],
"count": 1
}
第二步:獲取指定拉取請求的最后一次推送Push(Iteration)
拉取請求中包含了開發人員多次推送的數據,在API中使用Iteration來記錄,實際上就是Push信息。下面的Api獲取拉取請求所有的推送信息
Api樣例:http://DevOpsServer:8080/tfs/DefaultCollection/_apis/git/repositories/e7b2adbc-dab4-4432-a0df-072b9a8d48b9/pullRequests/3/iterations
{
"value": [{
"id": 1,
"description": "已刪除 tfs移動辦公.txt",
"author": {
"displayName": "tfsadmin",
"url": "http://DevOpsServer:8080/tfs/DefaultCollection/_apis/Identities/f2f9bb4a-b4e2-4af2-b7ba-5b0547fdb085",
......
}
}, {
"id": 8,
"description": "change file",
"author": {
"displayName": "tfsadmin",
"url": "http://tfsdb:8080/tfs/DefaultCollection/_apis/Identities/f2f9bb4a-b4e2-4af2-b7ba-5b0547fdb085",
"_links": {
"avatar": {
"href": "http://DevOpsServer:8080/tfs/DefaultCollection/_api/_common/identityImage?id=f2f9bb4a-b4e2-4af2-b7ba-5b0547fdb085"
}
},
"id": "f2f9bb4a-b4e2-4af2-b7ba-5b0547fdb085",
"uniqueName": "",
"imageUrl": "http://DevOpsServer:8080/tfs/DefaultCollection/_api/_common/identityImage?id=f2f9bb4a-b4e2-4af2-b7ba-5b0547fdb085"
},
"createdDate": "2019-03-07T02:07:30.419852Z",
"updatedDate": "2019-03-07T02:07:30.419852Z",
"sourceRefCommit": {
"commitId": "0c962a9213548ffbde87c9e0dfc7d6217e32e8cc"
},
"targetRefCommit": {
"commitId": "8120ded05da8e404f7e2818f71001b4d09ac4325"
},
"commonRefCommit": {
"commitId": "8120ded05da8e404f7e2818f71001b4d09ac4325"
},
"hasMoreCommits": false,
"reason": "push",
"push": {
"pushId": 43
}
}],
"count": 8
}
上面結果中最大的結果為推送編號為8
第三步:獲取最后一次推送的變更
在Azure DevOps的涉及中,系統返回最后一次iteration中的結果,就是拉取請求中的所有變更文件,與git diff的結果一致。
http://DevOpsServer:8080/tfs/DefaultCollection/_apis/git/repositories/e7b2adbc-dab4-4432-a0df-072b9a8d48b9/pullRequests/3/iterations/4/changes?$top=99999
{
"changeEntries": [{
"changeTrackingId": 2,
"changeId": 1,
"item": {
"objectId": "457947435875FCD4A54E734E77F4D418B609079F",
"path": "/incrementalprogram.sln"
},
"changeType": "add"
}, {
"changeTrackingId": 3,
"changeId": 2,
"item": {
"objectId": "FA2758F61086EF18731420FA00AE37050C4BF436",
"path": "/本周工作.txt"
},
"changeType": "add"
}, {
"changeTrackingId": 4,
"changeId": 3,
"item": {
"objectId": "F8B4888565CAADC7510BE75682268D6C18EDD6DE",
"path": "/.vs/ProjectSettings.json"
},
"changeType": "add"
}, {
"changeTrackingId": 5,
"changeId": 4,
"item": {
"objectId": "66EE8634380AE95E26C9EEAD773917D077C62F50",
"path": "/.vs/slnx.sqlite"
},
"changeType": "add"
}]
}
通過統計分析最后一次推送包含的全部變更文件,我們就可以獲取到這個拉取請求中包含的全部文件,效果和Web頁面中拉取請求的文件清單完全一樣。
圖一:拉取請求
注意:
- 如果文件量太大,超出了默認返回100條的數量,需要在URL的參數中指定top=9999,表明每次調用API需要返回的數量。配置skip參數,還可以實現分頁功能。
微軟DevOps MVP 張洪君 http://www.cnblogs.com/danzhang
--End--