Azure DevOps Server: 使用Rest Api獲取拉取請求Pull Request中的變更文件清單


需求:

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頁面中拉取請求的文件清單完全一樣。
image
圖一:拉取請求

注意:

  1. 如果文件量太大,超出了默認返回100條的數量,需要在URL的參數中指定top=9999,表明每次調用API需要返回的數量。配置skip參數,還可以實現分頁功能。

微軟DevOps MVP 張洪君 http://www.cnblogs.com/danzhang

--End--


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM