Embarcadero уже долгое время обещает интегрировать поддержку систем контроля версий в Delphi. И эта функция довольно востребована. Официально даже было объявлено, что эта поддержка доступна уже в Delphi 2010. Давайте посмотрим, что приготовила для нас Embarcadero.
Для работы с VCS (Version Control System - системами контроля версий) в файле ToolsApi.pas добавлены 3 интерфейса:
- IOTAVersionControlNotifier - интерфейс отвечающий непосредственно за реализацию связи с VCS.
- IOTANotifier - базовый интерфейс для уведомлений. Содержит методы позволяющие получать уведомления при изменении файла, его сохранении и закрытии редактора.
- IOTAVersionControlServices - сервисный интерфейс, позволяющий подключить и отключить свою реализацию VCS.
IOTAVersionControlNotifier = interface(IOTANotifier) ['{C301E578-D2AE-48EA-9EEA-AEE48D578FE7}'] { Returns the name that is shown if more than one version control system is installed and the user wants to add a project to a version control system } function GetDisplayName: string; { Returns true if the file is currently managed/versioned by the version control system. Under most cases "Ident" will be a fully-qualified filename -- however, if the user clicks on a node that is not a file (for example the "Contains" node for a package project), then "Ident" will be the name of that node } function IsFileManaged(const Project: IOTAProject; const IdentList: TStrings): Boolean; { This procedure is called when the project manager is creating its local menu. The version control system may add any menu items to ProjectManagerMenuList that it wishes to have shown } procedure ProjectManagerMenu(const Project: IOTAProject; const IdentList: TStrings; const ProjectManagerMenuList: IInterfaceList; IsMultiSelect: Boolean); { Called then the user selects a menu item to add thier project to this version control system } function AddNewProject(const Project: IOTAProject): Boolean; property DisplayName: string read GetDisplayName; end;
IOTANotifier = interface(IUnknown) ['{F17A7BCF-E07D-11D1-AB0B-00C04FB16FB3}'] { This procedure is called immediately after the item is successfully saved. This is not called for IOTAWizards } procedure AfterSave; { This function is called immediately before the item is saved. This is not called for IOTAWizard } procedure BeforeSave; { The associated item is being destroyed so all references should be dropped. Exceptions are ignored. } procedure Destroyed; { This associated item was modified in some way. This is not called for IOTAWizards } procedure Modified; end;
{ IOTAVersionControlServices provides functionality for version control systems to plug into the IDE } IOTAVersionControlServices = interface(IInterface) ['{1BFE2647-9BFC-4084-AE3E-3E09A9179E34}'] function AddNotifier(const ANotifier: IOTAVersionControlNotifier): Integer; function GetCount: Integer; function GetItem(const Index: Integer): IOTAVersionControlNotifier; procedure RemoveNotifier(Index: Integer); property Count: Integer read GetCount; property Items[const Index: Integer]: IOTAVersionControlNotifier read GetItem; end;
Что же можно сделать с их помощью?
Можно реализовать эксперт, который будет автоматически делать фиксировать изменения в хранилище кода (делать Commit) при сохранении файла. Можно реализовать свой подсвечиватель синтаксиса и при получении уведомления об изменении файла, подсвечивать изменившиеся строки другим цветом. В меню, появляющееся в окне менеджера проектов можно добавить свои пункты: Commit и Update.
Будет ли в окне менеджера проектов видно, что файл изменился? Насколько я понимаю - нет. Просмотрев остальные интерфесы, я не нашёл способа как-то легально повлиять на окно Project Manager-a. Вероятно можно как-то перехватить процедуру отрисовки, но это будет очень грязным трюком.
Можно ли будет изменить ТАБ в редакторе для файла, который изменился в сравнении с SVN? Да, вроде бы так делают то ли gExperts, то ли CnPack Wizards.
Чего хочется
1) Хочется чтобы в Project Manager изменившиеся файлы как-то выделялись. Например с помощью overlay-картинки. А также, чтобы эта картинка была видна на закладках (TabControl) редактора кода.
2) Хочется, чтобы в редакторе кода, изменённый текст подсвечивался другим цветом.
Выводы
Стоит ли овчинка выделки? На мой взгляд, нет. Новые интерфейсы доступны только в Delphi 2010. А многие всё ещё используют более ранние версии Delphi. К тому же, даже для старых версий доступны как платные так и бесплатные эксперты. Я не буду их перечислять. Их очень много, и большая часть из них только добавляет в меню новые команды для работы с VCS (чаще бесплатные), а также новые диалоги для просмотра изменений (чаще платные). К слову, аналогичный эксперт устанавливается вместе с JCL.
В данный момент, я использую TortoiseSVN и меня в принципе устраивает вариант "SVN для бедных" который позволяет вызвать Shell menu при правом клике на заголовке Tab-a редактора. Позже, я опишу эту интеграцию подробнее.
Посмотрим, что приготовит для нас шеф-повар в Delphi 2011: Fulcrum.
Спонсоры поста:
- Москва. 2010-й год. Настольный компьютер есть у каждого. А сервер? Покупать не позволяют средства? Тогда может взять сервер в аренду?
- Уронили мишку на пол? Оторвали мишке лапу? Всё-равно его не брошу, потому что
он хорошийего можно пофиксить. =) Ветеринарная помощь и лечение животных.
Комментариев нет:
Отправить комментарий