2011-11-02 98 views
3

直到最近,通過讀取存儲在.svn子目錄中的一些文本文件,讀取所有在Subversion工作副本中引用的SVN:Externals變得非常簡單。隨着使用mysql表更改爲新的磁盤結構,這不再那麼簡單。閱讀SVN:外部工作副本

我想更新一個內部使用的工具,用來讀取外部列表使用新的結構。該工具是用Delphi 2007編寫的,所以我寧願使用Delphi編寫的代碼。

Version Insight for RAD Studio在SourceForge上可能包含一些代碼,這樣的伎倆,但我不知道,如果任何機構其他人也許已經通過從該項目中提取所需零件的工作了或有替代品。

+2

你可以使用顛覆命令行實用程序來做到這一點?這總是正確的做法。 –

+0

像'svn propget svn:externals'? –

回答

11

你也可以做到這一點編程,使用Subversion客戶端DLL。下面是用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在此期間已經演變和失去(一些)的向後兼容性。

+1

非常好的示例。 +1 –

+0

@WarrenP謝謝! :-) –

+0

這正是我所期待的。謝謝! – dummzeuch

5

如果你可以調用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 
+0

調用svn可執行文件的問題在於它不會與TortoisSVN一起自動安裝。另外我更喜歡調用一個DLL來調用可執行文件,因爲它通常要快得多。在這種特殊情況下,這並不重要,我的工具只會調用一次。 – dummzeuch

2

像其他人說的那樣,調用SVN可執行文件。您可以使用這種技術與德爾福工具菜單中集成這樣的: http://delphi.wikia.com/wiki/Adding_TortoiseSVN_to_the_Tools_menu

要添加到文章中,它也很方便有打開Windows資源管理器的文件的文件夾被編輯的「在這裏打開文件夾」項。下面是的 「工具性」:

  • 標題:打開文件夾下面
  • 程序:explorer.exe的
  • 參數:$ PATH($ EDNAME)

如果你有這個,那麼你已經掌握了所有的TortoiseSVN。

+1

結合Cedric顯示的命令,再加上Chris的鏈接答案將是一條很好的輔助路徑,如果由於某種原因基於版本Insight代碼的示例不起作用。 –

+1

有趣的東西被指向我寫的一篇文章。 ;-) – dummzeuch