/// <summary> /// Removes a reference from the references linked list /// </summary> /// <param name="reference"></param> internal void RemoveReference(SccProjectFileReference reference) { if (reference == null) { throw new ArgumentNullException("reference"); } if (reference == FirstReference) { _firstReference = reference.NextReference; reference._nextReference = null; if (_firstReference == null) { _map.RemoveFile(this.FullPath); } return; } SccProjectFileReference rf = FirstReference; while (rf != null) { if (rf.NextReference == reference) { rf._nextReference = reference.NextReference; reference._nextReference = null; return; } rf = rf.NextReference; } throw new InvalidOperationException("Reference list invalid; scc project mapping corrupted; please reopen the solution"); }
public IEnumerable <string> GetAllFiles() { HybridCollection <string> mapped = null; yield return(FullPath); SccProjectFileReference rf = FirstReference; while (rf != null) { IList <string> subFiles = rf.GetSubFiles(); if (subFiles.Count > 0) { if (mapped == null) { mapped = new HybridCollection <string>(StringComparer.OrdinalIgnoreCase); mapped.Add(FullPath); } foreach (string sf in subFiles) { if (mapped.Contains(sf)) { continue; } mapped.Add(sf); yield return(sf); } } rf = rf.NextReference; } }
public IEnumerable <SccProjectFileReference> GetAllReferences() { List <SccProjectFileReference> refs = new List <SccProjectFileReference>(); SccProjectFileReference rf = FirstReference; while (rf != null) { yield return(rf); rf = rf.NextReference; } }
public void OnClose() { Hook(false); while (_files.Count > 0) { SccProjectFileReference r = _files[0]; while (r.ReferenceCount > 0) { r.ReleaseReference(); } } _loaded = false; }
public void OnClose() { ThreadHelper.ThrowIfNotOnUIThread(); Hook(false); while (_files.Count > 0) { SccProjectFileReference r = _files[0]; while (r.ReferenceCount > 0) { r.ReleaseReference(); } } _loaded = false; }
/// <summary> /// Gets the owner projects. /// </summary> /// <returns></returns> public IList <SccProjectData> GetOwnerProjects() { List <SccProjectData> pd = new List <SccProjectData>(); SccProjectFileReference rf = FirstReference; while (rf != null) { pd.Add(rf.Project); rf = rf.NextReference; } return(pd); }
internal void AddReference(SccProjectFileReference reference) { if (reference == null) { throw new ArgumentNullException("reference"); } if (reference.NextReference != null || reference.ProjectFile != this) { throw new InvalidOperationException(); } reference._nextReference = FirstReference; _firstReference = reference; }
internal void InvokeRemoveReference(SccProjectFileReference sccProjectFileReference) { _files.Remove(sccProjectFileReference); }
public void AddPath(string path) { ThreadHelper.ThrowIfNotOnUIThread(); if (ExcludedFromScc) { return; } bool alreadyLoaded = _loaded && !_inLoad; if (alreadyLoaded && WebLikeFileHandling) { uint fid = VSItemId.Nil; if (TryGetProjectFileId(path, out fid)) { // OK: Websites try to add everything they see below their directory // We only add these files if they are actually SCC items bool add = false; ISccProjectWalker walker = GetService <ISccProjectWalker>(); foreach (string file in walker.GetSccFiles(ProjectHierarchy, fid, ProjectWalkDepth.SpecialFiles, null)) { if (string.Equals(file, path, StringComparison.OrdinalIgnoreCase)) { add = true; break; } } if (!add) { return; } } else { // File is either not in project or a scc special file // Pass } } if (alreadyLoaded && GetService <IAnkhConfigurationService>().Instance.AutoAddEnabled) { GetService <IFileStatusMonitor>().ScheduleAddFile(path); } SccProjectFileReference reference; if (_files.TryGetValue(path, out reference)) { reference.AddReference(); } else { reference = new SccProjectFileReference(_context, this, Map.GetFile(path)); _files.Add(reference); if (alreadyLoaded) { GetService <IFileStatusMonitor>().ScheduleGlyphUpdate(path); } } if (string.Equals(path, ProjectFile, StringComparison.OrdinalIgnoreCase)) { reference.IsProjectFile = true; } if (alreadyLoaded && !string.IsNullOrEmpty(ProjectFile)) { ISccProjectWalker walker = GetService <ISccProjectWalker>(); if (walker != null) { walker.SetPrecreatedFilterItem(null, VSItemId.Nil); } ClearIdCache(); SetDirty(); } }