internal void MergeInMoreDetailedPendingChanges(VersionedAssetList result, bool isRecursive) { if (result.Count == 0) { return; } var conflicts = GetConflicts(result); foreach (var item in conflicts) { var found = FindVersionedAsset(item, result); if (found != null) { found.AddState(State.kConflicted); found.RemoveState(State.kSynced); found.AddState(State.kOutOfSync); } } if (Workspace.Location == Microsoft.TeamFoundation.VersionControl.Common.WorkspaceLocation.Server) { var time = DateTime.Now; var pending = GetProjectPendingSets(result, isRecursive); var localPending = pending.Where(item => item.Type == PendingSetType.Workspace && item.OwnerName == Workspace.OwnerName && item.Name == Workspace.Name).ToArray(); var remotePending = pending.Where(item => item.Type == PendingSetType.Workspace && !(item.OwnerName == Workspace.OwnerName && item.Name == Workspace.Name)).ToArray(); TfsFileStatusCache.RefreshPendingChanges(result.Select(each => each.GetPath()), Workspace, remotePending, localPending, time); foreach (var item in pending) { if (item.Type != PendingSetType.Workspace) { continue; } if (item.OwnerName == Workspace.OwnerName && item.Name == Workspace.Name) { ApplyStatusFromPendingSet(result, item, true); } else { ApplyStatusFromPendingSet(result, item, false); } } } }
public void UserWantsToGoPartiallyOfflineFor(IEnumerable <VersionedAsset> asset) { if (asset.Any() == false) { return; } var assets = TfsFileStatusCache.Find(asset.Select(each => each.GetPath())); var caption = "Working Partially Offline"; string footer = "Be sure to resolve your offline modifications with TFS when finished."; var messageHeader = string.Format("You are now working with the following files offline, they can be edited and will appear checked out."); ShowWarningMessageBox(assets, caption, messageHeader, footer); }
public void WarnAboutBinaryFilesCheckedOutByOthers(IEnumerable <VersionedAsset> asset) { var assets = TfsFileStatusCache.Find(asset.Where(each => ShouldLock(each)).Select(each => each.GetPath())).Where(each => (each.IsRemoteLocked || each.IsRemoteCheckedOut)); if (assets.Any() == false) { return; } var caption = "Version Control Warning"; var messageHeader = "Other users are also working on the same non-mergable files"; string footer = string.Empty; footer = string.Format("The first user to submit their change to a non-mergable file ({0}) will prevent all other users who had the file checked out from submitting their change, resulting in lost work", ExclusiveCheckoutTypesToString()); ShowWarningMessageBox(assets, caption, messageHeader, footer); }
public void WarnAboutOutOfDateFiles(IEnumerable <VersionedAsset> asset) { var assets = TfsFileStatusCache.Find(asset.Select(each => each.GetPath())).Where(each => each.IsLocalLatest == false); if (assets.Any() == false) { return; } var caption = "Version Control Warning"; var messageHeader = "You do not have the latest versions of the following files"; string footer = string.Empty; footer = string.Format("Changes made to a non-mergable file ({0}) that is not the latest version will not be able to be checked in, resulting in lost work.", ExclusiveCheckoutTypesToString()); ShowWarningMessageBox(assets, caption, messageHeader, footer); }
public void SplitByLockPolicy(IEnumerable <VersionedAsset> assets, out string[] needLocks, out string[] noLocks) { List <string> toLock = new List <string>(); List <string> notToLock = new List <string>(); foreach (var item in assets) { if (ShouldLock(item)) { toLock.Add(Path.GetFullPath(item.GetPath())); } else { notToLock.Add(Path.GetFullPath(item.GetPath())); } } // check the currently lock status of binary files, if they are checked out, or have a checkin lock, dont lock them if (toLock.Count != 0 && shareBinaryFileCheckout.Value) { var lockLevel = GetLockLevel(); List <TfsFileStatus> status = new List <TfsFileStatus>(); TfsFileStatusCache.RefreshExtendedStatus(Workspace, toLock, status); foreach (var item in status) { if (!item.ExtendedItem.HasOtherPendingChange) { continue; } if (lockLevel == LockLevel.Checkin && item.ExtendedItem.LockStatus == LockLevel.None) { continue; } var fullpath = item.LocalFullPath; toLock.RemoveAll(each => each.Equals(fullpath, StringComparison.CurrentCultureIgnoreCase)); notToLock.Add(fullpath); } } needLocks = toLock.ToArray(); noLocks = notToLock.ToArray(); }
public void WarnAboutFailureToPendChange(IEnumerable <VersionedAsset> asset) { if (asset.Any() == false) { return; } var caption = "Version Control Warning"; var messageHeader = "Unable to checkout to the following files"; string footer = string.Empty; var assets = TfsFileStatusCache.Find(asset.Select(each => each.GetPath())); if (assets.Any(each => each.IsRemoteLocked || each.IsRemoteCheckedOut)) { footer = string.Format("Only one user can hold a lock for check-in at a time, locks protect the lock owners work on non-mergable files ({0}).", ExclusiveCheckoutTypesToString()); } ShowWarningMessageBox(assets, caption, messageHeader, footer); }