/////////////////////////////////////////////////////////////////////////////
        // Overridden Package Implementation
        #region Package Members

        private void autoShelve_OnShelvesetCreated(object sender, ShelvesetCreatedEventArgs e)
        {
            if (e.ExecutionSuccess)
            {
                if (e.ShelvesetChangeCount == 0)
                {
                    //WriteToOutputWindow(".");
                }
                else
                {
                    var str = string.Format("Shelved {0} pending change{1} to Shelveset Name: {2}", e.ShelvesetChangeCount,
                      e.ShelvesetChangeCount != 1 ? "s" : "", e.ShelvesetName);
                    if (e.ShelvesetsPurgeCount > 0)
                    {
                        str += string.Format(" | Maximum Shelvesets: {0} | Deleted: {1}", _autoShelve.MaximumShelvesets, e.ShelvesetsPurgeCount);
                    }
                    WriteToStatusBar(str);
                    WriteLineToOutputWindow(str);
                }
            }
            else
            {
                WriteException(e.ExecutionException);
            }
        }
        /////////////////////////////////////////////////////////////////////////////
        // Overridden Package Implementation
        #region Package Members

        private void AutoShelve_OnShelvesetCreated(object sender, ShelvesetCreatedEventArgs e)
        {
            if (e.IsSuccess)
            {
                if (e.ShelvesetChangeCount != 0)
                {
                    var str = string.Format(Resources.ShelvesetSuccess, e.ShelvesetChangeCount, e.ShelvesetName);
                    if (e.ShelvesetsPurgeCount > 0)
                    {
                        str += string.Format(Resources.ShelvesetSucessPurged, _autoShelve.MaximumShelvesets, e.ShelvesetsPurgeCount);
                    }
                    WriteToStatusBar(str);
                    WriteLineToOutputWindow(str);
                }
            }
            else
            {
                WriteException(e.Error);
            }
        }
Esempio n. 3
0
        public void CreateShelveset(bool force = false)
        {
            try
            {
                if (TfsExt == null)
                {
                    return;
                }
                var domainUri             = WebUtility.UrlDecode(_tfsExt.ActiveProjectContext.DomainUri);
                var teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(domainUri));
                teamProjectCollection.Credentials = CredentialCache.DefaultNetworkCredentials;
                teamProjectCollection.EnsureAuthenticated();

                var service = (VersionControlServer)teamProjectCollection.GetService(typeof(VersionControlServer));
                var allLocalWorkspaceInfo = Workstation.Current.GetAllLocalWorkspaceInfo();

                foreach (var workspaceInfo in allLocalWorkspaceInfo)
                {
                    // Replace(/,"") before comparing domainUri to prevent: "TFS Auto Shelve shelved 0 pending changes. Shelveset Name: "
                    if (workspaceInfo.MappedPaths.Length <= 0 ||
                        workspaceInfo.ServerUri.ToString().Replace("/", string.Empty) !=
                        domainUri.Replace("/", string.Empty))
                    {
                        continue;
                    }
                    var workspace = service.GetWorkspace(workspaceInfo);
                    CreateShelveset(service, workspace, force);
                }
            }
            catch (Exception ex)
            {
                _tfsExt = null; // Force re-init on next attempt
                if (OnShelvesetCreated != null)
                {
                    var autoShelveEventArg = new ShelvesetCreatedEventArgs {
                        ExecutionException = ex
                    };
                    OnShelvesetCreated(this, autoShelveEventArg);
                }
            }
        }
        /////////////////////////////////////////////////////////////////////////////
        // Overridden Package Implementation
        #region Package Members

        private void autoShelve_OnShelvesetCreated(object sender, ShelvesetCreatedEventArgs e)
        {
            if (e.ExecutionSuccess)
            {
                var str = string.Format("Shelved {0} pending change{1} to Shelveset Name: {2}", e.ShelvesetChangeCount,
                                        e.ShelvesetChangeCount != 1 ? "s" :"", e.ShelvesetName);
                if (e.ShelvesetsPurgeCount > 0)
                {
                    str += string.Format(" | Maximum Shelvesets: {0} | Deleted: {1}", _autoShelve.MaximumShelvesets, e.ShelvesetsPurgeCount);
                }
                WriteToStatusBar(str);
                WriteToOutputWindow(str);
            }
            else
            {
                WriteToStatusBar(string.Format("{0} encountered an error.", _extName));
                WriteToOutputWindow(e.ExecutionException.Message);
                WriteToOutputWindow(e.ExecutionException.StackTrace);
                ActivityLog.WriteToActivityLog(e.ExecutionException.Message, e.ExecutionException.StackTrace);
            }
        }
Esempio n. 5
0
        public void SaveShelveset()
        {
            try {
                if (TfsExt == null)
                {
                    return;
                }
                // decode the url: some repo's have spaces in them, which are url encoded to %20.
                var domainUri             = WebUtility.UrlDecode(_tfsExt.ActiveProjectContext.DomainUri);
                var teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(domainUri));
                teamProjectCollection.Credentials = CredentialCache.DefaultNetworkCredentials;
                teamProjectCollection.EnsureAuthenticated();

                var service = (VersionControlServer)teamProjectCollection.GetService(typeof(VersionControlServer));
                var allLocalWorkspaceInfo = Workstation.Current.GetAllLocalWorkspaceInfo();

                foreach (var workspaceInfo in allLocalWorkspaceInfo)
                {
                    // Replace(/,"") before comparing domainUri to prevent: "TFS Auto Shelve shelved 0 pending changes. Shelveset Name: "
                    if (workspaceInfo.MappedPaths.Length <= 0 ||
                        workspaceInfo.ServerUri.ToString().Replace("/", string.Empty) !=
                        domainUri.Replace("/", string.Empty))
                    {
                        continue;
                    }
                    var workspace      = service.GetWorkspace(workspaceInfo);
                    var pendingChanges = workspace.GetPendingChanges();

                    var numPending = pendingChanges.Count();
                    if (numPending <= 0)
                    {
                        continue;
                    }
                    var autoShelveEventArg = new ShelvesetCreatedEventArgs();
                    var setname            = string.Format(ShelvesetName, workspaceInfo.Name, workspaceInfo.OwnerName, DateTime.Now);
                    setname = CleanShelvesetName(setname);

                    var shelveset = new Shelveset(service, setname, workspaceInfo.OwnerName);
                    autoShelveEventArg.ShelvesetChangeCount += numPending;
                    autoShelveEventArg.ShelvesetName         = setname;

                    shelveset.Comment = string.Format("Shelved by {0}. Items in shelve set: {1}", _extensionName, numPending);
                    workspace.Shelve(shelveset, pendingChanges, ShelvingOptions.Replace);
                    if (MaximumShelvesets > 0)
                    {
                        var autoShelvesets = service.QueryShelvesets(null, workspaceInfo.OwnerName).Where(s => s.Comment != null && s.Comment.Contains(_extensionName));
                        if (IsWorkspaceSpecificShelvesetName)
                        {
                            var info = workspaceInfo;
                            autoShelvesets = autoShelvesets.Where(s => s.Name.Contains(info.Name));
                        }
                        foreach (var set in autoShelvesets.OrderByDescending(s => s.CreationDate).Skip(MaximumShelvesets))
                        {
                            service.DeleteShelveset(set);
                            autoShelveEventArg.ShelvesetsPurgeCount++;
                        }
                    }
                    if (OnShelvesetCreated != null)
                    {
                        OnShelvesetCreated(this, autoShelveEventArg);
                    }
                }
            } catch (Exception ex) {
                if (OnShelvesetCreated != null)
                {
                    var autoShelveEventArg = new ShelvesetCreatedEventArgs {
                        ExecutionException = ex
                    };
                    OnShelvesetCreated(this, autoShelveEventArg);
                }
            }
        }
Esempio n. 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="service"></param>
        /// <param name="workspace"></param>
        /// <param name="force">True when the user manually initiates a ShelveSet via the Team menu or mapped shortcut key.</param>
        private void CreateShelveset(VersionControlServer service, Workspace workspace, bool force)
        {
            // Build event args for notification create shelveset result
            var autoShelveEventArg = new ShelvesetCreatedEventArgs();

            autoShelveEventArg.ShelvesetChangeCount = 0; // Shouldn't be necessary, but forcing it to be safe.

            try
            {
                // If there are no pending changes that have changed since the last shelveset then there is nothing to do
                bool isDelta        = false;
                var  pendingChanges = workspace.GetPendingChanges();
                int  numPending     = pendingChanges.Count();

                if (numPending > 0)
                {
                    if (!force)
                    {
                        var lastShelveset = GetPastShelvesets(service, workspace).FirstOrDefault();
                        if (lastShelveset == null)
                        {
                            // If there are pending changes and no shelveset yet exists, then create shelveset.
                            isDelta = true;
                        }
                        else
                        {
                            // Compare numPending to shelvedChanges.Count();  Force shelveset if they differ
                            // Otherwise, resort to comparing file HashValues
                            var shelvedChanges = service.QueryShelvedChanges(lastShelveset).FirstOrDefault();
                            isDelta = (shelvedChanges == null || numPending != shelvedChanges.PendingChanges.Count()) || pendingChanges.DifferFrom(shelvedChanges.PendingChanges);
                        }
                    }
                    if (force || isDelta)
                    {
                        autoShelveEventArg.ShelvesetChangeCount = numPending;

                        // Build a new, valid shelve set name
                        var setname = string.Format(ShelvesetName, workspace.Name, workspace.OwnerName, DateTime.Now, workspace.OwnerName.GetDomain(), workspace.OwnerName.GetLogin());
                        setname = CleanShelvesetName(setname);

                        // Actually create a new Shelveset
                        var shelveset = new Shelveset(service, setname, workspace.OwnerName);
                        autoShelveEventArg.ShelvesetName = setname;
                        shelveset.Comment = string.Format("Shelved by {0}. {1} items", _extensionName, numPending);
                        workspace.Shelve(shelveset, pendingChanges, ShelvingOptions.Replace);

                        // Clean up past Shelvesets
                        if (MaximumShelvesets > 0)
                        {
                            foreach (var set in GetPastShelvesets(service, workspace).Skip(MaximumShelvesets))
                            {
                                service.DeleteShelveset(set);
                                autoShelveEventArg.ShelvesetsPurgeCount++;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _tfsExt = null; // Force re-init on next attempt
                autoShelveEventArg.ExecutionException = ex;
            }
            // Fire event for each VS instance to report results
            if (OnShelvesetCreated != null)
            {
                OnShelvesetCreated(this, autoShelveEventArg);
            }
        }