чтение SVN: внешнее из рабочей копии - PullRequest
3 голосов
/ 02 ноября 2011

До недавнего времени было просто прочитать все SVN: Внешние объекты, на которые есть ссылки в рабочей копии Subversion, просто прочитав некоторые текстовые файлы, хранящиеся в подкаталоге .svn.С переходом на новую структуру на диске с использованием таблиц mysql это уже не так просто.

Я хочу обновить внутренний инструмент, который использовался для чтения этого списка внешних элементов, с использованием новой структуры.Инструмент написан на Delphi 2007, поэтому я бы предпочел, чтобы некоторый код был написан на Delphi.

В Sourceforge есть Version Insight для RAD Studio , которая может содержать некоторый код для решения этой задачи, но мне интересноесли кто-то еще, возможно, уже прошел работу по извлечению необходимых частей из этого проекта или имеет альтернативу.

Ответы [ 3 ]

11 голосов
/ 02 ноября 2011

Вы также можете сделать это программно, используя клиентские DLL-библиотеки Subversion. Вот минимальный пример, написанный на Delphi XE:

program svnext;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  SvnClient;

procedure Main;
var
  SvnClient: TSvnClient;
  SvnItem: TSvnItem;
begin
  // Subversion client DLL directory; here I simply use the .exe's directory
  // (I copied the DLLs there manually.)
  BaseDllDir := ExtractFilePath(ParamStr(0));

  SvnClient := nil;
  SvnItem := nil;
  try
    SvnClient := TSvnClient.Create;
    SvnClient.Initialize;
    SvnItem := TSvnItem.Create(SvnClient, nil, ParamStr(1));
    Writeln(SvnItem.PropValues['svn:externals']);
  finally
    SvnItem.Free;
    SvnClient.Free;
  end;
end;

begin
  try
    Main;
  except
    on E: Exception do
    begin
      ExitCode := 1;
      Writeln(Format('[%s] %s', [E.ClassName, E.Message]));
    end;
  end;
end.

Возможно, вам придется настроить код для Delphi 2007. Похоже, что версия Insight эволюционировала и утратила (частично) обратную совместимость.

5 голосов
/ 02 ноября 2011

Если вы можете вызвать исполняемый файл SVN, довольно легко найти все внешние элементы, хранящиеся в вашем хранилище:

svn propget -R svn:externals .

вернет:

first/path/to/external - name_of_first_external http://first_repos/that/is/in/external
second/path/to/external - name_of_second_external http://second_repos/that/is/in/external
2 голосов
/ 02 ноября 2011

Как уже говорили другие, вызовите исполняемый файл SVN. Вы можете интегрировать это с меню Delphi Tools, используя эту технику: http://delphi.wikia.com/wiki/Adding_TortoiseSVN_to_the_Tools_menu

Чтобы добавить к этой статье, ОЧЕНЬ удобно иметь запись «открыть папку здесь», которая открывает проводник Windows для папки редактируемого файла. Вот "свойства инструмента" для этого:

  • Заголовок: Открыть папку здесь
  • Программа: explorer.exe
  • Параметры: $ PATH ($ EDNAME)

Если у вас есть это, тогда у вас есть все TortoiseSVN под рукой.

...