2011-11-02 125 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