TFS REST API: изнутри расширения VSTS, регистрация на другой источник контроля
Из моего расширения TFS, используя TfvcHttpClient, я могу зарегистрировать файлы в том же TFS, где установлено расширение, но как я могу зарегистрироваться в другом TFS' tfvc?
import TFS_VC_TfvcRestClient = require("TFS/VersionControl/TfvcRestClient");
var tfvcApi = TFS_VC_TfvcRestClient.getClient();
Могу ли я как-то сказать getClient() использовать другой serverUrl?
Изменить: добавлен код регистрации, чтобы быть более конкретным
function checkinXML() {
$(".vlc-tvc").hide();
$(".vlc-button").hide();
var changeset/*: TFS_VC_Contracts.TfvcChangeset*/ = {
accountId: VSS.getWebContext().account.id,
//author: {
// id: VSS.getWebContext().user.id,
// displayName: VSS.getWebContext().user.name,
// uniqueName: VSS.getWebContext().user.uniqueName,
// //url: how to get URL?
//},
//changesetId: currentChangeset ++?,
//checkedInBy: {
// id: VSS.getWebContext().user.id,
// displayName: VSS.getWebContext().user.name,
// uniqueName: VSS.getWebContext().user.uniqueName
// //url: how to get URL?
//},
//checkinNotes: [],
//collectionId: collectionID,
//teamProjectIds: [projectID],
//commentTruncated: false,
//createdDate: null,
//hasMoreChanges: false,
policyOverride: {
policyFailures: []
},
//url: how to get URL?
//workItems: null,
//_links: null,
comment: VSS.getWebContext().user.name,
changes: [
{
//mergeSources: [],
//pendingVersion: {},
changeType: TFS_VC_Contracts.VersionControlChangeType.Add,
item: {
//changeDate: {},
//deletionId: {},
//hashValue: {},
isFolder: false,
isBranch: false,
isPendingChange: false,
//size: {},
//_links: {},
//version: {},
contentMetadata: {
contentType: "text/xml",
encoding: 65001
// fileName: "D.USD.xml",
// extension: ".xml"
},
path: sourceControlPath //+ "/" + projectName + ".xml"
},
newContent: {
content: newXML,
contentType: TFS_VC_Contracts.ItemContentType.RawText
},
//sourceServerItem: sourceControlPath + "/" + projectName + ".xml"
}
]
};
statusindicatorObject.startWait();
tfvcApi.getItem(changeset.changes[0].item.path).then(function (result) {
changeset.changes[0].changeType = TFS_VC_Contracts.VersionControlChangeType.Edit;
changeset.changes[0].item['version'] = result.version;
}, function (error) {
console.log(error);
}).then(function () {
tfvcApi.createChangeset(<any>changeset/*, projectName*/).then(function () {
statusindicatorObject.endWait();
var successCheckInDialog = VSS_Controls_Dialogs.show(VSS_Controls_Dialogs.ModalDialog, {
title: "XML Check-In " + sourceControlPath,
content: $("<p/>").addClass("confirmation-text").html("Successfully checked-in XML to <b>" + sourceControlPath + "</br>."),
useBowtieStyle: true,
buttons: {
"OK": function () {
successCheckInDialog.close();
successCheckInDialog.dispose();
}
}
});
$(".vlc-button").show();
$(".vlc-tvc").show();
}, function (error) {
statusindicatorObject.endWait();
var failureCheckInDialog = VSS_Controls_Dialogs.show(VSS_Controls_Dialogs.ModalDialog, {
title: "XML Check-In " + sourceControlPath,
content: $("<p/>").addClass("confirmation-text").html("Check-In failure: <b>" + error + "</b>!"),
useBowtieStyle: true,
buttons: {
"OK": function () {
failureCheckInDialog.close();
failureCheckInDialog.dispose();
}
}
});
$(".vlc-button").show();
$(".vlc-tvc").show();
});
});
}
1 ответ
Ты не можешь.
Соединение использует маркер неявной аутентификации, действительный только для TFVC, указанного в определении сборки.
Это означает, что вы должны получить второй токен явно, например, передавая PAT через переменную. Более того, вы не можете использовать одно и то же рабочее пространство для другого сопоставления TFVC, но вы должны использовать два рабочих пространства (это определение гранж и определять одно из них) и копировать файлы поверх.