///////////////////////////////////////////////////////////////////////////// // 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); } }
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); } }
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); } } }
/// <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); } }