Je vyžadována podpora jazyka JavaScript
Některé stránky na tomto webu vyžadují podporu jazyka JavaScript. Váš webový prohlížeč jazyk JavaScript nepodporuje nebo jazyk JavaScript není povolen.
Chcete-li zjistit, zda webový prohlížeč podporuje jazyk JavaScript nebo jazyk JavaScript chcete povolit, přečtěte si nápovědu k vašemu webovému prohlížeči.
SourceControlClient.cs
Download fileToto je zdrojový kód souboru SourceControlClient.cs
Source Control helper class working on TFS current local workspace.
using System;
using System.Linq;
using System.Collections.Generic;
using Microsoft.TeamFoundation;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
namespace IMP.SourceControl
{
/// <summary>
/// Source Control helper class working on TFS current local workspace
/// </summary>
internal static class SourceControlClient
{
#region member varible and default property initialization
private static Workspace Workspace;
#endregion
#region private member functions
static SourceControlClient()
{
var workspaceInfo = GetCurrentWorkspace();
Workspace = GetWorkspace(workspaceInfo);
}
#endregion
#region action methods
/// <summary>
/// Update workspace with the latest version of specified item if item is not currently checked out.
/// </summary>
/// <param name="item">The path to the file to update.</param>
/// <param name="recursive">Recurse to the last child.</param>
/// <returns><c>false</c> if file is currently checked out.</returns>
public static bool GetLatestVersion(string item, bool recursive = false)
{
var checkinChanges = Workspace.GetPendingChangesEnumerable(item, recursive ? RecursionType.Full : RecursionType.None);
if (!PendingChange.IsIEnumerableEmpty(checkinChanges))
{
//File is checked out.
return false;
}
var s = Workspace.Get(new string[] { item }, VersionSpec.Latest, recursive ? RecursionType.Full : RecursionType.None, GetOptions.Overwrite | GetOptions.GetAll);
return true;
}
/// <summary>
/// Performs a check-out of the specified item.
/// </summary>
/// <param name="item">The path to the file to check out.</param>
/// <param name="lockLevel">The lock level to apply to each file checked out.</param>
/// <param name="recursive">Recurse to the last child.</param>
/// <returns><c>false</c> if file was already checked out.</returns>
public static bool CheckOut(string item, LockLevel lockLevel = LockLevel.Unchanged, bool recursive = false)
{
var checkinChanges = Workspace.GetPendingChangesEnumerable(item, recursive ? RecursionType.Full : RecursionType.None);
if (!PendingChange.IsIEnumerableEmpty(checkinChanges))
{
//File is already checked out.
return false;
}
Workspace.PendEdit(new string[] { item }, recursive ? RecursionType.Full : RecursionType.None, null, lockLevel, true,
Microsoft.TeamFoundation.VersionControl.Common.PendChangesOptions.GetLatestOnCheckout);
return true;
}
/// <summary>
/// Performs a check-in of the specified item.
/// </summary>
/// <param name="item">The path of the file to check in.</param>
/// <param name="comment">Check-in comment.</param>
/// <param name="checkinNotes">Check-in notes.</param>
/// <param name="recursive">Recurse to the last child.</param>
/// <returns>The result of the evaluation.</returns>
public static CheckinEvaluationResult CheckIn(string item, string comment = null, CheckinNote checkinNotes = null, bool recursive = false, bool overridePolicyFailures = true)
{
var checkinChanges = Workspace.GetPendingChangesEnumerable(item, recursive ? RecursionType.Full : RecursionType.None);
if (PendingChange.IsIEnumerableEmpty(checkinChanges))
{
throw new InvalidOperationException("There are no pending changes!");
}
var checkinOptions = CheckinEvaluationOptions.Notes | CheckinEvaluationOptions.Policies;
var checkedWorkItems = new WorkItemCheckinInfo[0];
var result = Workspace.EvaluateCheckin2(checkinOptions, null, checkinChanges, comment, checkinNotes, checkedWorkItems);
if (result.Conflicts.Length > 0 || result.NoteFailures.Length > 0 || result.PolicyEvaluationException != null ||
(result.PolicyFailures.Length > 0 && !overridePolicyFailures))
{
return result;
}
PolicyOverrideInfo policyOverrideInfo = null;
if (result.PolicyFailures.Length > 0)
{
policyOverrideInfo = new PolicyOverrideInfo("PolicyFailures override!", result.PolicyFailures);
}
var checkInParameters = new WorkspaceCheckInParameters(checkinChanges, comment);
checkInParameters.CheckinNotes = checkinNotes;
checkInParameters.AssociatedWorkItems = checkedWorkItems;
checkInParameters.PolicyOverride = policyOverrideInfo;
Workspace.CheckIn(checkInParameters);
return result;
}
/// <summary>
/// Undo the pending changes for the specified item.
/// </summary>
/// <param name="item">The path to the file to check out.</param>
/// <param name="recursive">Recurse to the last child.</param>
public static void UndoCheckOut(string item, bool recursive = false)
{
Workspace.Undo(item, recursive ? RecursionType.Full : RecursionType.None);
}
#endregion
#region private member functions
private static WorkspaceInfo GetCurrentWorkspace()
{
WorkspaceInfo[] allLocalWorkspaceInfo = Workstation.Current.GetAllLocalWorkspaceInfo();
if (allLocalWorkspaceInfo.Length == 1)
{
return allLocalWorkspaceInfo[0];
}
string currentDirectory = CurrentDirectory;
WorkspaceInfo localWorkspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(currentDirectory);
if (localWorkspaceInfo != null)
{
return localWorkspaceInfo;
}
WorkspaceInfo[] localWorkspaceInfoRecursively = Workstation.Current.GetLocalWorkspaceInfoRecursively(currentDirectory);
if (localWorkspaceInfoRecursively.Length != 1)
{
throw new InvalidOperationException("Unable to determine Workspace!");
}
return localWorkspaceInfoRecursively[0];
}
private static string CurrentDirectory
{
get
{
string currentDirectory = Environment.CurrentDirectory;
if (currentDirectory.IndexOf('~') >= 0)
{
currentDirectory = System.IO.Path.GetFullPath(currentDirectory);
}
return currentDirectory;
}
}
private static Workspace GetWorkspace(WorkspaceInfo workspaceInfo)
{
string tfsName = workspaceInfo.ServerUri.AbsoluteUri;
var credentials = System.Net.CredentialCache.DefaultCredentials; //new System.Net.NetworkCredential(userName, password, domain);
var projects = new TfsTeamProjectCollection(TfsTeamProjectCollection.GetFullyQualifiedUriForName(tfsName), credentials, new UICredentialsProvider());
return workspaceInfo.GetWorkspace(projects);
}
#endregion
}
}