2012-07-23 58 views
0

我正在用Ruby编写一个程序,它必须在启动时从SVN下载我的团队软件的最新版本。使用Ruby SVN绑定将本地工作区更新为SVN仓库'Head'

结帐功能(从Ruby SVN绑定)是我相信我想要使用的,因为更新不会添加我的机器的本地“主干”工作区中不存在的任何文件。结帐语句会更新不匹配HEAD的文件,它会下载完全不存在的文件。实际上,在运行完全递归结帐之后,我希望能够获得最新的SVN存储库的完整副本。

根据这一API,结账声明基本上采用以下:

  • 一个确切的SVN URL
  • 本地根项目目录
  • 修订(我将使用字符串“HEAD” )
  • 递归(整数1或0)
  • 一个池对象(我不能确定这是什么,但我认为它不会影响我)

这里是我写的,是在SVN仓库的每个文件迭代块内部:

if status != NORMAL #any file that changed or is 'missing' 
    ctx.checkout(status.entry.url, ROOTDIR, 'HEAD', 0, nil) #update abnormal file to HEAD 
end 

作为一个测试,我删除一个目录从我的本地工作区,并试图将其与该还原命令。它会一直运行,直到它到达其中一个丢失的文件,此时它会产生一个错误:

`svn_client_checkout3':subversion/libsvn_fs_fs/tree.c:663:Svn :: Error :: FsNotFound:File not found:版本0,路径'/trunk/project-gadfly/SocketServer/DiscoveryServer.cpp'(Svn :: Error :: FsNotFound)

我不明白为什么会引发这个错误,因为我认为结帐语句会看到该目录(即文件)本地不存在,然后创建它。也许我做错了什么?

回想我所写的内容,我认为所有这些都是一个冗长的方式来提出以下一个简单问题:如何将最新版本的SVN存储库加载到本地硬盘上,并使用SVN Ruby命令?

由于提前, 埃尔伍德·霍普金斯

回答

0

我不知道这个问题的具体Ruby的一部分,但很明显,你问SVN API在修订0结帐“status.entry.url”这当然不存在于这里。

这很奇怪,你研究了用Ruby编写Perl文档。我建议你去看看Subversion的源代码。

这里的Ruby方法声明: http://svn.apache.org/repos/asf/subversion/branches/1.7.x/subversion/bindings/swig/ruby/svn/client.rb

def checkout(url, path, revision=nil, peg_rev=nil, 
       depth=nil, ignore_externals=false, 
       allow_unver_obstruction=false) 
    revision ||= "HEAD" 
    Client.checkout3(url, path, peg_rev, revision, depth, 
        ignore_externals, allow_unver_obstruction, 
        self) 
    end 

因此,大家可以看到,您所指定0作为peg修订。但是你应该指定HEAD。

池怎么样---它们是SVN内存管理的一部分。这里的解释是:http://subversion.apache.org/docs/community-guide/conventions.html#apr-pools

+0

哦,我的确在一些地方看过那个页面上的Perl这个词,但由于某种原因,我从来没有质疑SVN绑定可能与Ruby不同。这解释了一切。谢谢。 – 2012-07-23 15:28:23