//========================================================================================== // Methods //========================================================================================== /// <summary> /// Queries the environment to see whether the directories in the project can be renamed. /// </summary> /// <param name="oldPaths">The paths to the old directories.</param> /// <param name="newPaths">The paths to the new directories.</param> /// <returns>true if the directories can be renamed; otherwise, false.</returns> public bool CanRenameDirectories(string[] oldPaths, string[] newPaths) { Tracer.VerifyNonNullArgument(oldPaths, "oldPaths"); Tracer.VerifyNonNullArgument(newPaths, "newPaths"); if (oldPaths.Length != newPaths.Length) { throw new ArgumentException("The old and new path arrays must match in size.", "oldPaths"); } int length = oldPaths.Length; // If the arrays are zero-length, then there's nothing to rename. if (length == 0) { return(true); } // Fill in the flags array (since there are no flags yet, we can leave the array at its default value). VSQUERYRENAMEDIRECTORYFLAGS[] flags = new VSQUERYRENAMEDIRECTORYFLAGS[length]; VSQUERYRENAMEDIRECTORYRESULTS[] summaryResult = new VSQUERYRENAMEDIRECTORYRESULTS[length]; VSQUERYRENAMEDIRECTORYRESULTS[] results = new VSQUERYRENAMEDIRECTORYRESULTS[length]; int hr = this.Tracker.OnQueryRenameDirectories(this.project, length, oldPaths, newPaths, flags, summaryResult, results); NativeMethods.ThrowOnFailure(hr); return(summaryResult[0] == VSQUERYRENAMEDIRECTORYRESULTS.VSQUERYRENAMEDIRECTORYRESULTS_RenameOK); }
int IVsTrackProjectDocumentsEvents2.OnQueryRenameDirectories( IVsProject pProject, int cDirs, string[] rgszMkOldNames, string[] rgszMkNewNames, VSQUERYRENAMEDIRECTORYFLAGS[] rgFlags, VSQUERYRENAMEDIRECTORYRESULTS[] pSummaryResult, VSQUERYRENAMEDIRECTORYRESULTS[] rgResults) { return VSConstants.S_OK; }
public int OnQueryRenameDirectories(IVsProject pProject, int cDirs, string[] rgszMkOldNames, string[] rgszMkNewNames, VSQUERYRENAMEDIRECTORYFLAGS[] rgFlags, VSQUERYRENAMEDIRECTORYRESULTS[] pSummaryResult, VSQUERYRENAMEDIRECTORYRESULTS[] rgResults) { renaimng_in_progress = true; return VSConstants.S_OK; }
public virtual int OnQueryRenameDirectories(IVsProject pProject, int cDirs, string[] rgszMkOldNames, string[] rgszMkNewNames, VSQUERYRENAMEDIRECTORYFLAGS[] rgFlags, VSQUERYRENAMEDIRECTORYRESULTS[] pSummaryResult, VSQUERYRENAMEDIRECTORYRESULTS[] rgResults) { return VSConstants.E_NOTIMPL; }
public int OnQueryRenameDirectories(IVsProject pProject, int cDirs, string[] rgszMkOldNames, string[] rgszMkNewNames, VSQUERYRENAMEDIRECTORYFLAGS[] rgFlags, VSQUERYRENAMEDIRECTORYRESULTS[] pSummaryResult, VSQUERYRENAMEDIRECTORYRESULTS[] rgResults) { return 0; }
public int OnQueryRenameDirectories(IVsProject pProject, int cDirs, string[] rgszMkOldNames, string[] rgszMkNewNames, VSQUERYRENAMEDIRECTORYFLAGS[] rgFlags, VSQUERYRENAMEDIRECTORYRESULTS[] pSummaryResult, VSQUERYRENAMEDIRECTORYRESULTS[] rgResults) { throw new NotImplementedException(); }
public int OnQueryRenameDirectories(IVsProject pProject, int cDirs, string[] rgszMkOldNames, string[] rgszMkNewNames, VSQUERYRENAMEDIRECTORYFLAGS[] rgFlags, VSQUERYRENAMEDIRECTORYRESULTS[] pSummaryResult, VSQUERYRENAMEDIRECTORYRESULTS[] rgResults) { if (rgszMkNewNames == null || pProject == null || rgszMkOldNames == null) return VSConstants.E_POINTER; IVsSccProject2 sccProject = pProject as IVsSccProject2; bool track = SccProvider.TrackProjectChanges(sccProject); if (track) for (int i = 0; i < cDirs; i++) { string s = rgszMkNewNames[i]; if (!string.IsNullOrEmpty(s)) StatusCache.MarkDirty(s); } bool allOk = true; for (int i = 0; i < cDirs; i++) { bool ok = true; if (track) SccProvider.OnBeforeProjectDirectoryRename(sccProject, GitTools.GetNormalizedFullPath(rgszMkOldNames[i]), GitTools.GetNormalizedFullPath(rgszMkNewNames[i]), rgFlags[i], out ok); if (rgResults != null) rgResults[i] = ok ? VSQUERYRENAMEDIRECTORYRESULTS.VSQUERYRENAMEDIRECTORYRESULTS_RenameOK : VSQUERYRENAMEDIRECTORYRESULTS.VSQUERYRENAMEDIRECTORYRESULTS_RenameNotOK; if (!ok) allOk = false; } if (pSummaryResult != null) pSummaryResult[0] = allOk ? VSQUERYRENAMEDIRECTORYRESULTS.VSQUERYRENAMEDIRECTORYRESULTS_RenameOK : VSQUERYRENAMEDIRECTORYRESULTS.VSQUERYRENAMEDIRECTORYRESULTS_RenameNotOK; if (!allOk) _batchOk = false; return VSConstants.S_OK; }
int IVsTrackProjectDocumentsEvents2.OnQueryRenameDirectories(IVsProject pProject, int cDirs, string[] rgszMkOldNames, string[] rgszMkNewNames, VSQUERYRENAMEDIRECTORYFLAGS[] rgFlags, VSQUERYRENAMEDIRECTORYRESULTS[] pSummaryResult, VSQUERYRENAMEDIRECTORYRESULTS[] rgResults) { return NativeMethods.S_OK; // We are not interested in this one }
/// <summary> /// Called just before a directory in a project is renamed /// </summary> /// <param name="project">The SCC project.</param> /// <param name="oldName">The old name.</param> /// <param name="newName">The new name.</param> /// <param name="flags">The flags.</param> /// <param name="ok">if set to <c>true</c> [ok].</param> internal void OnBeforeProjectDirectoryRename(IVsSccProject2 project, string oldName, string newName, VSQUERYRENAMEDIRECTORYFLAGS flags, out bool ok) { ok = true; if (!_projectMap.ContainsKey(project)) return; // Not managed by us if (!IsActive) return; // TODO: Is the file managed in Git: Verify renaming of more than casing if (oldName != newName && string.Equals(oldName, newName, StringComparison.OrdinalIgnoreCase)) { ok = false; // For now just disallow casing only changes } }
//========================================================================================== // Methods //========================================================================================== /// <summary> /// Queries the environment to see whether the directories in the project can be renamed. /// </summary> /// <param name="oldPaths">The paths to the old directories.</param> /// <param name="newPaths">The paths to the new directories.</param> /// <returns>true if the directories can be renamed; otherwise, false.</returns> public bool CanRenameDirectories(string[] oldPaths, string[] newPaths) { Tracer.VerifyNonNullArgument(oldPaths, "oldPaths"); Tracer.VerifyNonNullArgument(newPaths, "newPaths"); if (oldPaths.Length != newPaths.Length) { throw new ArgumentException("The old and new path arrays must match in size.", "oldPaths"); } int length = oldPaths.Length; // If the arrays are zero-length, then there's nothing to rename. if (length == 0) { return true; } // Fill in the flags array (since there are no flags yet, we can leave the array at its default value). VSQUERYRENAMEDIRECTORYFLAGS[] flags = new VSQUERYRENAMEDIRECTORYFLAGS[length]; VSQUERYRENAMEDIRECTORYRESULTS[] summaryResult = new VSQUERYRENAMEDIRECTORYRESULTS[length]; VSQUERYRENAMEDIRECTORYRESULTS[] results = new VSQUERYRENAMEDIRECTORYRESULTS[length]; int hr = this.Tracker.OnQueryRenameDirectories(this.project, length, oldPaths, newPaths, flags, summaryResult, results); NativeMethods.ThrowOnFailure(hr); return (summaryResult[0] == VSQUERYRENAMEDIRECTORYRESULTS.VSQUERYRENAMEDIRECTORYRESULTS_RenameOK); }
public int OnQueryRenameDirectories(IVsProject pProject, int cDirs, string[] rgszMkOldNames, string[] rgszMkNewNames, VSQUERYRENAMEDIRECTORYFLAGS[] rgFlags, VSQUERYRENAMEDIRECTORYRESULTS[] pSummaryResult, VSQUERYRENAMEDIRECTORYRESULTS[] rgResults) { for (int i = 0; i < rgszMkOldNames.Length; i++) { DocumentEvents.Add("OnQueryRenameDirectories " + rgszMkOldNames[i] + " " + rgszMkNewNames[i]); CodeDocumentEvents.Add("OnQueryRenameDirectories (" + GetRelativePath(pProject, rgszMkOldNames[i]) + ", " + GetRelativePath(pProject, rgszMkNewNames[i]) + ")"); } return VSConstants.S_OK; }