2

我正在开发一个基于 Web 的工具,以允许项目经理设置新的 subversion 存储库和相应的 Trac 实例。

作为这个工具的一部分,我希望能够自动将一些特定的依赖项添加到新的存储库中,比如为其他库设置一些外部。

我知道这svn propset不适用于远程存储库,但是svn propedit可以。

我的问题是 - 我如何在命令行的一个命令中发出svn propedit并设置属性?svn:externals

换句话说,propedit需要一个编辑器,是否有某种我可以使用的“假”编辑器只接受命令行参数(我可以与 svn 的--editor-cmd选项一起使用)?这样,我可以以编程方式构建 CLI 命令并通过系统调用发出它。

我不担心覆盖现有属性,因为这只适用于在几个 CPU 周期之前创建的全新存储库。

4

2 回答 2

6

您可以编写一个可执行脚本作为您的道具编辑器。它将获得$1一个临时文件名作为其第一个参数(在类 unix 系统上),其中包含正在编辑的属性的当前值。您在脚本中修改文件的内容 - 这就是属性的新值。您将脚本传递为svn propedit <pro-name> <item> --editor-cmd <my-custom-editor>.

于 2012-06-07T12:44:15.900 回答
2

更具体的答案是使用简单的命令行“编辑器”,它使用 echo 命令设置属性的新文本。在 unix 上,这非常简单:

svn propedit svn:externals \
--editor-cmd "echo '<property_value>' >" \
<target> -m "<commit_message>"

这甚至可以处理多行属性值(如多个外部),因为 unix 很乐意接受带引号的字符串中的换行符:

svn propedit svn:externals \
--editor-cmd "echo 'first property value
another property value
yet another one' >" \
<target> -m "<commit_message>"

在 Windows 上,简单的情况看起来像这样,因为它的 echo 不需要引号:

svn propedit svn:externals ^
--editor-cmd "echo <property_value> >" ^
<target> -m "<commit_message>"

但多行版本更棘手:

svn propedit svn:externals ^
--editor-cmd "(echo first property value & echo another property value & echo yet another one) >" ^
<target> -m "<commit_message>"

在大多数脚本语言中,构建最后一个实际上非常简单,只需将属性值的行用“ & echo”而不是“ \n”连接起来,然后用括号括起来。

于 2013-09-10T18:27:54.110 回答