Ruby命令行模拟SVN propedit的输入键svn:ignore

时间:2013-06-24 02:40:59

标签: ruby shell svn command-line automation

我有一个自动化程序,我正在编写用Ruby编写的程序。在程序的过程中,我需要SVN repo忽略2个或更多文件。此过程没有用户输入,因此不可能使用svn propedit svn:ignore .之类的命令,因为它将打开文本编辑器来请求文件。

通常我直接从shell处理这个问题的方法是利用propset svn:ignore并在文件名之间点击[ENTER]来继续声明:

svn propset svn:ignore "filename1
> filename2" .

我尝试使用以下Ruby语句模拟这个:

system("svn propedit svn:ignore 'filename1")
system("filename2' .")

但是在执行时我收到以下错误:

sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file

我还尝试在dir-props目录中创建.svn文件,但无法获取更改以向存储库注册。我用svn proplist -v -R验证了这一点。即使这确实有效,但我无法保证它在我使用该程序的所有可能情况下都能成功。

我现在已经有很长一段时间了,并且已经没有想法了。我试着搜索一个Ruby命令,这个命令允许我模拟propedit svn:ignore命令的两行之间的按键,但是没有成功。

任何人都有解决方案我应该如何处理这个问题?它对我的程序正常运行至关重要。提前谢谢。

1 个答案:

答案 0 :(得分:1)

通过创建一个忽略文件并将其提供给svn propset,可以解决这个问题。不确定是否有更好的解决方案,但这至少满足我的需求:

    File.open("ignore.txt", "wb") { |f| f.write("filename1\nfilename2\n") }
    system("svn propset svn:ignore -F ignore.txt .")
    File.delete("ignore.txt")