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