Motto

В тихом саду здравомыслия
Пусть на вас постоянно падают
кокосовые орехи пробужденности.
Чогьям Трунгпа РИНПОЧЕ


Версия для мобильного


четверг, 27 мая 2010 г.

Delphi 2010: Open Tools API интерфейсы для интеграции системы контроля версий в IDE.

Embarcadero уже долгое время обещает интегрировать поддержку систем контроля версий в Delphi. И эта функция довольно востребована. Официально даже было объявлено, что эта поддержка доступна уже в Delphi 2010. Давайте посмотрим, что приготовила для нас Embarcadero.

Для работы с VCS (Version Control System - системами контроля версий) в файле ToolsApi.pas добавлены 3 интерфейса:

  1. IOTAVersionControlNotifier - интерфейс отвечающий непосредственно за реализацию связи с VCS.
  2. IOTANotifier - базовый интерфейс для уведомлений. Содержит методы позволяющие получать уведомления при изменении файла, его сохранении и закрытии редактора.
  3. 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-й год. Настольный компьютер есть у каждого. А сервер? Покупать не позволяют средства? Тогда может взять сервер в аренду?
  • Уронили мишку на пол? Оторвали мишке лапу? Всё-равно его не брошу, потому что он хороший его можно пофиксить. =) Ветеринарная помощь и лечение животных.

Комментариев нет:

Отправить комментарий

Постоянные читатели