Поделиться через


Редактирование и сохранение запросов (VSPackage системы управления версиями)

Редакторы Visual Studio могут транслировать события "Редактирование Запроса и Сохранение Запроса" (QEQS). Заглушка управления версиями Visual Studio реализует службу QEQS, чтобы она была получателем событий QEQS. Затем эти события делегируются в текущее активное средство управления версиями VSPackage. Активное управление исходным кодом VSPackage реализует IVsQueryEditQuerySave2 и его методы. Методы IVsQueryEditQuerySave2 интерфейса обычно вызываются непосредственно перед первым изменением документа и непосредственно перед сохранением документа.

События QueryEditQuerySave

VSPackage системы контроля версий должен обрабатывать события QEQS, реализуя интерфейс IVsQueryEditQuerySave2 и необходимые методы. Ниже приведено краткое описание двух методов, которые пакет VSPackage должен реализовать как минимум. Фактическая реализация должна соответствовать логике системы контроля версий.

Метод QueryEditFiles

Вызывается QueryEditFiles, когда любой проект или редактор хочет изменить файл. В идеале этот метод вызывается до изменения файла и при сохранении файла. При вызове метод IVsQueryEditQuerySave2::QueryEditFiles проверяет, находятся ли указанные файлы под контролем версий, нужно ли их взять на редактирование и можно ли их перезагрузить. Если обстоятельства не позволяют изменять файлы, IVsQueryEditQuerySave2::QueryEditFiles метод сообщает вызывающей программе отменить изменение. Кроме того, вызывающий объект может указать режим вызова. В "тихом" режиме этот метод выполняется только в том случае, если это не вызывает появление пользовательского интерфейса. Если неизбежно использование пользовательского интерфейса, необходимо вернуть флаг, чтобы указать проблему.

Метод ведет себя в транзакционной манере; То есть, если изменение отменено в одном файле, изменение будет отменено для всех файлов. И наоборот, если правка разрешена, она допускается для всех файлов. Если этот метод позволяет редактировать один раз для заданного набора файлов, он всегда должен разрешать редактирование при последующих вызовах одного набора файлов. Цикл разрешения на редактирование продолжается до тех пор, пока файлы не будут закрыты, сохранены и перезагружены; до изменения атрибутов (свойств); или до тех пор, пока пакет управления версиями не будет изменен. В реализации метода IVsQueryEditQuerySave2::QueryEditFiles следует учитывать множественные файлы, специальные файлы, отмену пользователем и редактирования в памяти.

Метод QuerySaveFiles

Вызывается QuerySaveFiles, когда любой проект или редактор должен сохранить набор файлов. При вызове метод проверяет, IVsQueryEditQuerySave2::QuerySaveFiles являются ли указанные файлы только для чтения и находятся ли они под системой управления версиями. Если файлы необходимо взять на редактирование, вызов делегируется пакету управления исходным кодом. Если обстоятельства не позволяют сохранять файлы, IVsQueryEditQuerySave2::QuerySaveFiles метод должен сообщить редактору отменить сохранение. Как и в случае с методом IVsQueryEditQuerySave2::QueryEditFiles , вызывающий может указать режим вызова. В "тихом" режиме этот метод принимает меры только в том случае, если это не приводит к появлению пользовательского интерфейса. Если пользовательский интерфейс неизбежен, необходимо вернуть флаг, чтобы указать проблему.

Этот метод должен вести себя транзакционной манерой; То есть, если сохранение отменено в одном файле, сохранение будет отменено для всех файлов. И наоборот, если сохранение разрешено, оно должно быть разрешено для всех файлов. Как и в методе IVsQueryEditQuerySave2::QueryEditFiles, в методе IVsQueryEditQuerySave2::QuerySaveFiles следует учитывать несколько файлов, специальные файлы, отмену пользователем и редактирование в памяти.