in Extensions/CircleCI/Src/Tasks/DownloadCircleCIArtifacts/commitsdownloader.ts [97:162]
private GetCommits(startBuildId: string, endBuildId: string): Q.Promise<string> {
let connection = tl.getInput("connection", true);
let definitionId = tl.getInput("definition", true);
var endpointUrl = tl.getEndpointUrl(connection, false);
let defer = Q.defer<string>();
let url: string = `${endpointUrl}/api/v1.1/project/${definitionId}/${startBuildId}`;
url = url.replace(/([^:]\/)\/+/g, "$1");
let commits = [];
this.executeWithRetries("getCommits", (url, headers) => { return this.webProvider.webClient.get(url, headers) }, url, { 'Accept': 'application/json' }).then((res: HttpClientResponse) => {
if (res && res.message.statusCode === 200) {
res.readBody().then((body: string) => {
let jsonResult = JSON.parse(body);
let branch;
if (!!jsonResult) {
branch = jsonResult.branch;
}
else {
defer.reject(tl.loc("BranchNotFound"));
return;
}
let buildsUrl = `${endpointUrl}/api/v1.1/project/${definitionId}/tree/${branch}`;
buildsUrl = buildsUrl.replace(/([^:]\/)\/+/g, "$1");
this.webProvider.webClient.get(buildsUrl, { 'Accept': 'application/json' }).then((res: HttpClientResponse) => {
res.readBody().then((body: string) => {
let builds = JSON.parse(body);
let commitsIdsMap = {};
if (!!builds) {
builds.forEach(build => {
if (Number(build.build_num) <= Number(endBuildId) && Number(build.build_num) >= Number(startBuildId) && build.all_commit_details[0]) {
build.all_commit_details.forEach(c => {
let commit = {
"Id": c.commit,
"Message": c.subject,
"Author": {
"displayName": c.author_name
},
"DisplayUri": c.commit_url,
"Timestamp": c.author_date
};
if (!commitsIdsMap[commit.Id]) {
commits.push(commit);
commitsIdsMap[commit.Id] = true;
}
});
}
});
}
tl.debug("Downloaded " + commits.length + " commits");
defer.resolve(JSON.stringify(commits));
}, (error) => {
defer.reject(error);
});
}, (error) => {
defer.reject(error);
});
});
}
});
return defer.promise;
}