Beispiel #1
0
        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);
                    }
                }
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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();
        }
Beispiel #6
0
        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);
        }