public SccProjectFileReference(IVisualGitServiceProvider context, SccProjectData project, SccProjectFile file) { if (context == null) throw new ArgumentNullException("context"); else if (project == null) throw new ArgumentNullException("project"); _context = context; _project = project; _file = file; _refCount = 1; // One should only create a reference if one needs one file.AddReference(this); }
/// <summary> /// This method is called by projects that are under source control /// when they are first opened to register project settings. /// </summary> /// <param name="pscp2Project">The PSCP2 project.</param> /// <param name="pszSccProjectName">Name of the PSZ SCC project.</param> /// <param name="pszSccAuxPath">The PSZ SCC aux path.</param> /// <param name="pszSccLocalPath">The PSZ SCC local path.</param> /// <param name="pszProvider">The PSZ provider.</param> /// <returns></returns> public int RegisterSccProject(IVsSccProject2 pscp2Project, string pszSccProjectName, string pszSccAuxPath, string pszSccLocalPath, string pszProvider) { SccProjectData data; if (!_projectMap.TryGetValue(pscp2Project, out data)) { // This method is called before the OpenProject calls _projectMap.Add(pscp2Project, data = new SccProjectData(Context, pscp2Project)); } data.IsManaged = (pszProvider == VisualGitId.GitSccName); data.IsRegistered = true; _syncMap = true; RegisterForSccCleanup(); return VSConstants.S_OK; }
internal void OnProjectRenamed(IVsSccProject2 project) { if (string.IsNullOrEmpty(SolutionFilename)) return; SccProjectData data; if (!_projectMap.TryGetValue(project, out data)) return; string oldLocation = data.ProjectLocation; try { using (SccProjectData newData = new SccProjectData(Context, project)) { string newLocation = newData.ProjectLocation; if (newLocation == null && oldLocation == null) return; // No need to do anything for this case (e.g. solution folders) SccStore.OnProjectRenamed(oldLocation, newLocation); if (string.Equals(newData.ProjectFile, data.ProjectFile, StringComparison.OrdinalIgnoreCase)) return; // Project rename, without renaming the project file (C++ project for instance) } } finally { // Mark the sln file edited, so it shows up in Pending Changes/Commit if (!string.IsNullOrEmpty(SolutionFilename)) DocumentTracker.CheckDirty(SolutionFilename); data.Reload(); // Reload project name, etc. } }
/// <summary> /// Initializes a new instance of the <see cref="WrapProjectInfo"/> class. /// </summary> /// <param name="data">The data.</param> public WrapProjectInfo(SccProjectData data) { if (data == null) throw new ArgumentNullException("data"); _data = data; }
/// <summary> /// Called by ProjectDocumentTracker when a scc-capable project is opened /// </summary> /// <param name="project">The loaded project</param> /// <param name="added">The project was added after opening</param> internal void OnProjectOpened(IVsSccProject2 project, bool added) { SccProjectData data; if (!_projectMap.TryGetValue(project, out data)) _projectMap.Add(project, data = new SccProjectData(Context, project)); if (data.IsSolutionFolder || data.IsWebSite) { if (IsSolutionManaged) { // We let them follow the solution settings (See OnSolutionOpen() for the not added case if (added && data.IsSolutionFolder) data.SetManaged(true); } // Solution folders are projects without Scc state data.NotifyGlyphsChanged(); } _syncMap = true; // Don't take the focus from naming the folder. The rename will perform the .Load() // and dirty check if (added && data.IsSolutionFolder) return; bool isReload = (_reloading == data.ProjectLocation); _reloading = null; if (added && !isReload) { if (!string.IsNullOrEmpty(SolutionFilename)) DocumentTracker.CheckDirty(SolutionFilename); } RegisterForSccCleanup(); }