使用svndumpfilter2在svn中将项目提取到自己的存储库(python断言错误)

时间:2010-06-24 13:49:57

标签: python svn

我正在尝试将项目从一个存储库迁移到自己的存储库,以便通过ldap更轻松地处理身份验证/授权。但是,在尝试svnadmin转储时| svndumpfilter --include ...我得到标准错误,包含路径中的某些文件是从不包含在路径中的某个位置移动或复制的,因此内容不可用。

谷歌告诉我,我需要使用其中一个svndumpfilter python脚本变体。我可以通过命令行访问Windows Server 2003上的python 2.6.5。所有这三个脚本都使用标准输入,但它们各自处理的东西略有不同。 svndumpfilter2启动,但在修订版2中,断言与断言失败。代码显然希望冒号在那条线上,但事实并非如此。我正在使用的转储文件只是一个简单的svnadmin dump repo> out.dump。没有采取任何措施。

我正在使用的命令是: svnadmin dump D:\ svn \ repo | C:\ Python26 \ python.exe“C:\ Program Files \ CollabNet \ Subversion Server \ svndumpfilter2.py”http:// localhost / svn / repo include Project> d:\ svndump \ project.dump

OR

svnadmin dump D:\ svn \ repo> out.dump

输入out.dump | C:\ Python26 \ python.exe“C:\ Program Files \ CollabNet \ Subversion Server \ svndumpfilter2.py”http:// localhost / svn / repo include Project> d:\ svndump \ project.dump

我得到的输出是:

  
      
  • 转发版本0。
  •   
  • 转储版本1. C:\ Program Files \ CollabNet \ Subversion
  •   
  • 服务器\ svndumpfilter2.py:67:
  •   
  • DeprecationWa rning:md5模块是   弃用;改用hashlib
  •   
  • import md5 Traceback(最近一次通话   最后):文件“C:\ Program   文件\ CollabNet的\颠覆   Server \ svndumpfilter2.py“,第40行6,
  •   
  • 在   lump = read_lump(fr)文件“C:\ Program Files \ CollabNet \ Subversion   Server \ svndumpfilter2.py“,第23行9,
  •   read_lump中的
  •   lump = read_rfc822_headers(f)文件“C:\ Program   文件\ CollabNet的\颠覆   Server \ svndumpfilter2.py“,第23行1,
  •   
  • 在read_rfc822_headers中   断言冒号> 0 AssertionError
  •   

它失败的转储文件的第一部分是:

  

SVN-fs-dump-format-version:2

     

UUID:   880c8176-308d-ea4f-8680-45defe5ec145

     

修订号:0   Prop-content-length:56   内容长度:56

     

K 8 svn:日期V 27   2007-01-30T21:25:29.487250Z PROPS-END

     

修订号:1   Prop-content-length:151   内容长度:151

     

K 7 svn:log V 40已添加文件夹   允许适当的分支。 K 10   svn:作者V 15 COMPANY \ USER K 8   svn:日期V 27   2007-02-02T21:02:22.321625Z PROPS-END

     

节点路径:分支Node-kind:dir   节点动作:添加Prop-content-length:   10内容长度:10

     

PROPS-END

     

Node-path:标签Node-kind:dir   节点动作:添加Prop-content-length:   10内容长度:10

     

PROPS-END

     

节点路径:trunk节点类型:dir   节点动作:添加Prop-content-length:   10内容长度:10

     

PROPS-END

     

修订号:2   Prop-content-length:109   内容长度:109

有没有人见过这个或者有任何想法为什么会发生这种情况?

1 个答案:

答案 0 :(得分:3)

可能正在发生此错误,因为Python-on-Windows正在执行换行转换(将stdin视为文本文件)。

因为“svnadmin dump”使用Unix新行约定(即使在Windows上运行)生成转储文件,所以您不希望python执行换行转换。解决方案是使用“-u”选项调用python。

此外,svndumpfilter2.py的第一个参数应该是本地REPOS_PATH,而不是http://字符串。让我们假设您的存储库名为foo_bar并位于c:\ svnrepos \ foo_bar。我们还说你已经在foo_bar上运行了“svnadmin dump”并生成了一个名为out.dump的文件

然后正确的python调用是:

C:\ Python26 \ python.exe -u“C:\ Program Files \ CollabNet \ Subversion Server \ svndumpfilter2.py”c:\ svnrepos \ foo_bar Project D:\ svndump \ project.dump