internal void OnBeforeRemoveDirectory(IVsSccProject2 project, string fullPath, out bool ok) { ok = true; SccProjectData data; if (!_projectMap.TryGetValue(project, out data)) return; // Not managed by us else if (!IsActive) return; if (_backupMap.ContainsKey(fullPath)) { // Don't backup twice string oldBackup = _backupMap[fullPath]; _backupMap.Remove(fullPath); using (GitSccContext git = new GitSccContext(this)) { git.DeleteDirectory(oldBackup); } } else { GitItem dir = StatusCache[fullPath]; if (!dir.IsVersioned) return; // Nothing to do for us } using (GitSccContext git = new GitSccContext(this)) { _backupMap.Add(fullPath, git.MakeBackup(fullPath)); } RegisterForSccCleanup(); }
internal void OnSccCleanup(CommandEventArgs e) { _registeredSccCleanup = false; if ((_ensureIcons || _syncMap) && IsActive) { // Enable our custom glyphs when we are set active IVisualGitSolutionExplorerWindow solutionExplorer = GetService<IVisualGitSolutionExplorerWindow>(); if (solutionExplorer != null) solutionExplorer.EnableVisualGitIcons(true); } if (_syncMap) { _syncMap = false; foreach (SccProjectData pd in _projectMap.Values) pd.Load(); } if (_delayedDelete != null) { List<string> files = _delayedDelete; _delayedDelete = null; using (GitSccContext git = new GitSccContext(Context)) { foreach (string file in files) { if (!File.Exists(file)) { git.SafeDeleteFile(file); MarkDirty(file); } } } } if (_delayedMove != null) { List<FixUp> files = _delayedMove; _delayedMove = null; using (GitSccContext git = new GitSccContext(Context)) { foreach (FixUp fu in files) { if (!git.IsUnversioned(fu.From) && git.IsUnversioned(fu.To)) { git.SafeWcMoveFixup(fu.From, fu.To); } } } } if (_backupMap.Count > 0) { using (GitSccContext git = new GitSccContext(Context)) { foreach (KeyValuePair<string, string> dir in _backupMap) { string originalDir = dir.Key; string backupDir = dir.Value; if (!Directory.Exists(backupDir)) continue; // No backupdir, we can't delete or move it if (Directory.Exists(originalDir)) { // The original has not been deleted by visual studio, must be an exclude. git.DeleteDirectory(backupDir); } else { // Original is gone, must be a delete, put back backup so we can git-delete it GitSccContext.RetriedRename(backupDir, originalDir); // Use retried rename, to prevent virus-scanner locks git.WcDelete(originalDir); } } } _backupMap.Clear(); } }