c# - usuarios - team foundation server manual español
¿Cómo puedo verificar mediante programación un artículo para editar en TFS? (6)
Estoy trabajando en una utilidad que procesa archivos bajo control de fuente usando TFS 2010.
Si un elemento aún no se ha revisado para su edición, recibiré una excepción, lo que definitivamente es predecible porque el archivo está en modo de solo lectura.
¿Qué formas existen para sacar un archivo?
PD: Quiero algo para programática en lugar de Process.Start("tf.exe", "...");
si eso es aplicable
Algunos de los otros enfoques mencionados aquí solo funcionan para ciertas versiones de TFS o hacen uso de métodos obsoletos. Si está recibiendo un 404, el enfoque que está utilizando probablemente no sea compatible con la versión de su servidor.
Este enfoque funciona en 2005, 2008 y 2010. No uso TFS por más tiempo, por lo que no he probado 2013.
var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(fileName);
using (var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri))
{
var workspace = workspaceInfo.GetWorkspace(server);
workspace.PendEdit(fileName);
}
Primero, obtenga el espacio de trabajo
var tfs = new TeamFoundationServer("http://server:8080/tfs/collection");
var version = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
var workspace = version.GetWorkspace("WORKSPACE-NAME", version.AuthorizedUser);
Con el espacio de trabajo puede verificar el archivo
workspace.PendEdit(fileName);
Puede usar la API de cliente de Team Foundation Version Control. El método es PendEdit ()
workspace.PendEdit(fileName);
Ejemplo detallado de pago y envío en MSDN http://blogs.msdn.com/b/buckh/archive/2006/03/15/552288.aspx
Tengo dos enfoques sobre cómo hacerlo: simple y avanzado.
1). Sencillo:
#region Check Out
public bool CheckOut(string path)
{
using (TfsTeamProjectCollection pc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(ConstTfsServerUri)))
{
if (pc == null) return false;
WorkspaceInfo workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(path);
Workspace workspace = workspaceInfo?.GetWorkspace(pc);
return workspace?.PendEdit(path, RecursionType.Full) == 1;
}
}
public async Task<bool> CheckoutAsync(string path)
{
return await Task.Run(() => CheckOut(path));
}
#endregion
2). Avanzado (con estado de recepción):
private static string GetOwnerDisplayName(PendingSet[] pending)
{
var result = pending.FirstOrDefault(pendingSet => pendingSet.Computer != Environment.MachineName) ?? pending[0];
return result.OwnerDisplayName;
}
private string CheckoutFileInternal(string[] wsFiles, string folder = null)
{
try
{
var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(folder);
var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri);
var workspace = workspaceInfo.GetWorkspace(server);
var request = new GetRequest(folder, RecursionType.Full, VersionSpec.Latest);
GetStatus status = workspace.Get(request, GetOptions.None);
int result = workspace.PendEdit(wsFiles, RecursionType.Full, null, LockLevel.None);
if (result == wsFiles.Length)
{
//TODO: write info (succeed) to log here - messageText
return null;
}
var pending = server.GetService<VersionControlServer>().QueryPendingSets(wsFiles, RecursionType.None, null, null);
var messageText = "Failed to checkout !.";
if (pending.Any())
{
messageText = string.Format("{0}/nFile is locked by {1}", messageText, GetOwnerDisplayName(pending));
}
//TODO: write error to log here - messageText
return messageText;
}
catch (Exception ex)
{
UIHelper.Instance.RunOnUiThread(() =>
{
MessageBox.Show(Application.Current.MainWindow, string.Format("Failed checking out TFS files : {0}", ex.Message), "Check-out from TFS",
MessageBoxButton.OK, MessageBoxImage.Error);
});
return null;
}
}
public async Task<string> CheckoutFileInternalAsync(string[] wsFiles, string folder)
{
return await Task.Run(() => CheckoutFileInternal(wsFiles, folder));
}
private const string tfsServer = @"http://tfsserver.org:8080/tfs";
public void CheckOutFromTFS(string fileName)
{
using (TfsTeamProjectCollection pc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsServer)))
{
if (pc != null)
{
WorkspaceInfo workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(fileName);
if (null != workspaceInfo)
{
Workspace workspace = workspaceInfo.GetWorkspace(pc);
workspace.PendEdit(fileName);
}
}
}
FileInfo fi = new FileInfo(fileName);
}
Tenga en cuenta que Microsoft.TeamFoundation.Client.TeamFoundationServerFactory
está obsoleto: la clase TeamFoundationServer
está obsoleta. Utilice las clases TeamFoundationProjectCollection
o TfsConfigurationServer
para hablar con un 2010 Team Foundation Server. Para hablar con un Team Foundation Server 2005 o 2008, use la clase TeamFoundationProjectCollection
. La clase de fábrica correspondiente para eso es TfsTeamProjectCollectionFactory
.
var registerdCollection = RegisteredTfsConnections.GetProjectCollections().First();
var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(registerdCollection);
var versionControl = projectCollection.GetService<VersionControlServer>();
var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(_fileName);
var server = new TeamFoundationServer(workspaceInfo.ServerUri.ToString());
var workspace = workspaceInfo.GetWorkspace(server);
workspace.PendEdit(fileName);