//==========================================================================================
        // 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;
 }
示例#5
0
 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;
        }
示例#8
0
 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;
 }