/// <summary> /// Called by SccTranslateData.set_SccPath /// </summary> internal bool Translate_SetSccPath(SccTranslateData translateData, string value) { if (translateData == null) throw new ArgumentNullException("translateData"); SccTranslateData td; if (!string.IsNullOrEmpty(translateData.SccPathName) && !string.Equals(translateData.SccPathName, translateData.EnlistPathName, StringComparison.OrdinalIgnoreCase)) { if (_sccPaths.TryGetValue(translateData.SccPathName, out td)) { Debug.Assert(translateData == td, "Same translation"); // Keep the value in the list if the EnlistPathName still has this value _storedPaths.Remove(translateData.StoredPathName); } } if (!string.IsNullOrEmpty(value)) { if (!_storedPaths.TryGetValue(value, out td)) _storedPaths.Add(value, translateData); else if (td != translateData) throw new InvalidOperationException("Can't store a path twice"); } return true; }
/// <summary> /// Called by SccTranslateData.set_StoredPath /// </summary> internal void Translate_SetStoredPath(SccTranslateData translateData, string oldValue, string newValue) { if (translateData == null) throw new ArgumentNullException("translateData"); else if (string.IsNullOrEmpty(newValue)) throw new ArgumentNullException("newValue"); if (string.Equals(oldValue, newValue, StringComparison.OrdinalIgnoreCase)) return; SccTranslateData td; if (!string.IsNullOrEmpty(oldValue)) { if (_storedPaths.TryGetValue(oldValue, out td)) { Debug.Assert(translateData == td, "Same translation"); _storedPaths.Remove(translateData.StoredPathName); } } if (!string.IsNullOrEmpty(newValue)) { Debug.Assert(!_storedPaths.ContainsKey(newValue)); _storedPaths[newValue] = translateData; } }
internal SccTranslateData GetTranslateData(Guid projectId, SccEnlistMode createType, string solutionName) { if (createType > SccEnlistMode.None && string.IsNullOrEmpty(solutionName)) throw new ArgumentNullException("solutionName"); foreach (SccTranslateData td in _translations) { if (td.ProjectId == projectId) return td; } if (createType > SccEnlistMode.None) { SccTranslateData td; if (createType <= SccEnlistMode.GitStateOnly) td = new SccTranslateData(this, projectId, solutionName); else td = new SccTranslateEnlistData(this, projectId, solutionName); _translations.Add(td); return td; } return null; }