我正在使用ant从cvs中签出文件夹:
<cvspass cvsroot=":ext:breddy@cvs.oatsystems.com:/usr/local/cvs" password="passwd"/>
<cvs cvsRSH="ssh" cvsRoot=":ext:breddy@cvs.oatsystems.com:/usr/local/cvs" package="atf/home" dest="." passfile=".cvspass">
输出像这样出现并挂起。我已经等了半个小时了。
Buildfile: build.xml
test:
checkout:
它是这样挂的
CVS Ant任务只是对CVS命令本身进行系统调用,因此使用CVS任务比简单地自己调用CVS实际上没有任何优势。
我的CVS任务除了问题之外什么都没有,所以我只使用<exec>
任务来处理CVS签出、提交等。最后,通过<exec>
任务调用CVS并不会更低效,也不需要更多的输入,而且同样容易理解。
响应bhasker
你好,谢谢你的回复。但是只有pserver支持在根目录下提供密码。它给出了以下错误cvs checkout: CVSROOT密码规范仅对cvs checkout有效:pserver连接方法。[checkout aborted] - bhasker
我已经下载了Ant源代码并查看了Java中的cvspass任务。这很有趣。
CVS密码以加密格式存储,但它不是一个非常安全的算法。很多程序员都知道这一点,而且有各种各样的程序可以生成和破解密码。
<cvspass>
任务接受您给它的密码,使用该算法,然后将其添加到$HOME目录下的.cvspass
文件中。事实上,如果您在Windows上使用CVSNT,这将不起作用,甚至可能挂起。(也许这就是你的问题?)。
我有一个叫做scramble.pl的程序,它可以获取密码,然后打乱它。获取该结果并将其添加到.cvspass
文件中,您将模拟<cvspass>
任务正在执行的操作。.cvspass
的格式相当直接:
1 <cvsRoot> <encryptedPasswd>
CVSNT将这些条目写入Windows注册表。
您可以将scramble.pl
添加到您的项目中。通过<exec>
任务运行它,然后使用<echo>
任务将条目附加到.cvspass
文件上。如果您在Windows上使用CVSNT,您可以使用regedit
来添加注册表项来完成此操作。