Exemplo n.º 1
0
        private int QuerySave(out tagVSQuerySaveResult qsResult)
        {
            uint result;
            IVsQueryEditQuerySave2 querySave =
                (IVsQueryEditQuerySave2)serviceProvider.GetService(typeof(SVsQueryEditQuerySave));
            int hr = querySave.QuerySaveFile(fileName, 0, null, out result);

            qsResult = (tagVSQuerySaveResult)result;
            return(hr);
        }
        private bool CheckoutForSave(params string[] fileNames)
        {
            uint result;

            uint[] rgrgf = new uint[fileNames.Length];

            ErrorHandler.ThrowOnFailure(this.QueryFileOperation.QuerySaveFiles((uint)VsQuerySaveFlags.SilentMode, fileNames.Length, fileNames, rgrgf, null, out result));
            tagVSQuerySaveResult saveResult = (tagVSQuerySaveResult)result;

            if (saveResult == tagVSQuerySaveResult.QSR_NoSave_NoisyPromptRequired)
            {
                ErrorHandler.ThrowOnFailure(this.QueryFileOperation.QuerySaveFiles((uint)VsQuerySaveFlags.DefaultOperation, fileNames.Length, fileNames, rgrgf, null, out result));
                saveResult = (tagVSQuerySaveResult)result;
            }

            return(tagVSQuerySaveResult.QSR_SaveOK == saveResult);
        }
Exemplo n.º 3
0
        private void SaveOptionsExternal()
        {
            Dispatcher.CurrentDispatcher.VerifyAccess();

            SolutionManager solMgr = GetSolutionManager();

            if (solMgr != null)
            {
                SolutionInfo           info = solMgr.GetSolutionInfo();
                IVsQueryEditQuerySave2 queryEditQuerySave = (IVsQueryEditQuerySave2)GetService(typeof(SVsQueryEditQuerySave));

                string targetPath = Path.ChangeExtension(info.SolutionFile, ".projectSets.json");
                if (m_repository.ProjectSets.Any() || File.Exists(targetPath))
                {
                    string tempPath = Path.GetTempFileName();
                    using (FileStream fs = new FileStream(tempPath, FileMode.Create, FileAccess.Write, FileShare.None))
                    {
                        m_repository.SaveJson(fs);
                    }

                    if (!AreFilesIdentical(tempPath, targetPath))
                    {
                        tagVSQuerySaveResult querySaveResult = tagVSQuerySaveResult.QSR_SaveOK;
                        if (queryEditQuerySave != null)
                        {
                            uint result;
                            ErrorHandler.ThrowOnFailure(queryEditQuerySave.QuerySaveFile(targetPath, 0, null, out result));
                            querySaveResult = (tagVSQuerySaveResult)result;
                        }

                        if (querySaveResult == tagVSQuerySaveResult.QSR_SaveOK)
                        {
                            var settings = GetSettings();
                            using (FileStream fin = new FileStream(tempPath, FileMode.Open, FileAccess.Read, FileShare.None))
                                using (FileStream fout = new FileStream(targetPath, FileMode.Create, FileAccess.Write, FileShare.None))
                                {
                                    fin.CopyTo(fout);
                                }
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
        private bool CheckoutForSave(params string[] fileNames)
        {
            uint result;

            uint[] rgrgf = new uint[fileNames.Length];

            ErrorHandler.ThrowOnFailure(this.QueryFileOperation.QuerySaveFiles((uint)VsQuerySaveFlags.SilentMode, fileNames.Length, fileNames, rgrgf, null, out result));
            tagVSQuerySaveResult saveResult = (tagVSQuerySaveResult)result;

            if (saveResult == tagVSQuerySaveResult.QSR_NoSave_NoisyPromptRequired)
            {
                ErrorHandler.ThrowOnFailure(this.QueryFileOperation.QuerySaveFiles((uint)VsQuerySaveFlags.DefaultOperation, fileNames.Length, fileNames, rgrgf, null, out result));
                saveResult = (tagVSQuerySaveResult)result;
            }

            var success = (tagVSQuerySaveResult.QSR_SaveOK == saveResult);

            if (!success)
            {
                this.logger.WriteLine(Resources.Strings.SCCFS_FailedToCheckOutFilesForSave, saveResult);
            }
            return(success);
        }
Exemplo n.º 5
0
 private int QuerySave(out tagVSQuerySaveResult qsResult)
 {
   uint result;
   IVsQueryEditQuerySave2 querySave =
     (IVsQueryEditQuerySave2)serviceProvider.GetService(typeof(SVsQueryEditQuerySave));
   int hr = querySave.QuerySaveFile(fileName, 0, null, out result);
   qsResult = (tagVSQuerySaveResult)result;
   return hr;
 }
        /// <summary>
        /// Notifies the environment that multiple files are about to be saved.
        /// </summary>
        /// <param name="rgfQuerySave">The RGF query save.</param>
        /// <param name="cFiles">The c files.</param>
        /// <param name="rgpszMkDocuments">The RGPSZ mk documents.</param>
        /// <param name="rgrgf">The RGRGF.</param>
        /// <param name="rgFileInfo">The rg file info.</param>
        /// <param name="pdwQSResult">The PDW QS result.</param>
        /// <returns></returns>
        public int QuerySaveFiles(uint rgfQuerySave, int cFiles, string[] rgpszMkDocuments, uint[] rgrgf, VSQEQS_FILE_ATTRIBUTE_DATA[] rgFileInfo, out uint pdwQSResult)
        {
            pdwQSResult = (uint)tagVSQuerySaveResult.QSR_SaveOK;
            bool silent = (rgfQuerySave & (uint)tagVSQuerySaveFlags.QSF_SilentMode) != 0;

            List <SvnItem> toBeSvnLocked = new List <SvnItem>();

            if (rgpszMkDocuments == null)
            {
                return(VSErr.E_POINTER);
            }

            if (_querySaveBatchCancel)
            {
                pdwQSResult = (uint)tagVSQuerySaveResult.QSR_NoSave_Cancel;
                return(VSErr.S_OK);
            }

            try
            {
                bool saveAs = false;
                bool saveOk = false;

                for (int i = 0; i < cFiles; i++)
                {
                    string file = rgpszMkDocuments[i];

                    if (!IsSafeSccPath(file))
                    {
                        continue;
                    }

                    file = SvnTools.GetNormalizedFullPath(file);

                    SvnItem item = StatusCache[file];
                    if (item.IsReadOnlyMustLock)
                    {
                        if (silent)
                        {
                            pdwQSResult = (uint)tagVSQuerySaveResult.QSR_NoSave_NoisyPromptRequired;
                            return(VSErr.S_OK);
                        }
                        toBeSvnLocked.Add(item);
                        continue;
                    }
                    else if (!item.IsReadOnly)
                    {
                        continue;
                    }
                    else if (silent)
                    {
                        pdwQSResult = (uint)tagVSQuerySaveResult.QSR_NoSave_NoisyPromptRequired;
                        return(VSErr.S_OK);
                    }

                    tagVSQuerySaveResult rslt = QueryReadOnlyFile(item);
                    switch (rslt)
                    {
                    case tagVSQuerySaveResult.QSR_NoSave_Cancel:
                        pdwQSResult = (uint)tagVSQuerySaveResult.QSR_NoSave_Cancel;
                        if (IsInSaveBatch)
                        {
                            _querySaveBatchCancel = true;
                        }
                        return(VSErr.S_OK);

                    case tagVSQuerySaveResult.QSR_ForceSaveAs:
                        saveAs = true;
                        break;

                    case tagVSQuerySaveResult.QSR_SaveOK:
                        saveOk = true;
                        break;

                    default:
                        throw new InvalidOperationException();
                    }
                }

                if (saveAs && !saveOk)
                {
                    pdwQSResult = (uint)tagVSQuerySaveResult.QSR_ForceSaveAs;
                }
                else
                {
                    pdwQSResult = (uint)tagVSQuerySaveResult.QSR_SaveOK;
                }

                if (toBeSvnLocked.Count > 0)
                {
                    // File(s) need to be locked
                    CommandService.DirectlyExecCommand(AnkhCommand.SccLock, toBeSvnLocked.ToArray());

                    bool notWritable = false;
                    foreach (SvnItem item in toBeSvnLocked)
                    {
                        if (item.IsReadOnlyMustLock)
                        {
                            notWritable = true;
                        }
                    }

                    if (notWritable)
                    {
                        pdwQSResult = (uint)tagVSQuerySaveResult.QSR_NoSave_Cancel;
                    }
                }

                return(VSErr.S_OK);
            }
            finally
            {
                for (int i = 0; i < cFiles; i++)
                {
                    string file = rgpszMkDocuments[i];

                    if (!IsSafeSccPath(file))
                    {
                        continue;
                    }

                    MarkDirty(SvnTools.GetNormalizedFullPath(file));
                }
            }
        }