2010-02-10 91 views
4

我想在以某种方式修改(实际上是格式化代码格式化程序中的文件),然后将它们提交到存储库。 我从Precommit example(使用guest作为名字并且没有密码)中找到了如何在python中写入。但是我想知道的是如何获取要提交的文件列表以及其他需要执行的命令行参数。还有一件事我更喜欢在C#中编写我自己的预提交钩子,而不是Python或任何其他脚本。预先提交svn钩子以修改要在c中提交的文件#

几点 我会写一个将格式化的exe文件,但我想要提交的文件列表 如何用svn进行配置。

+0

你应该在问题中说明你正在谈论乌龟侧挂钩(来自链接的例子是客户端挂钩)。 – user1068352

回答

10

那些修改提交的文件预提交挂钩被认为是“坏事”:

http://svnbook.red-bean.com/en/1.5/svn.reposadmin.create.html#svn.reposadmin.create.hooks

的想法优点官方SVN文档中的一个红色的大盒子,并警告说,这将影响到SVN客户端以糟糕的方式与存储库协同工作。

+0

这是坏的,但有没有办法做到这一点反正?就像允许提交发生一样(没有预先提交);在提交后,它会检出文件,执行格式化,然后重新检查它们吗?或者删除/删除可执行文件,以免被预先提交(我有人不够聪明,无法知道如何从项目中删除exe文件,即使失败并提供智能回复)? – TamusJRoyce

+0

我问这是关于超大的二进制文件。而且因为Obliterate还不存在。但是我已经意识到,操纵它后文件会有所不同,导致它始终过时。这会导致它始终下载,即使它与之后(不是在它之前)签入相同。如果有解决方法,我仍然感兴趣。 – TamusJRoyce

+0

@TamusJRoyce在那里看到我的问题:http://stackoverflow.com/questions/9888667/ankhsvn-client-side-pre-commit-hook – santa

1

首先,我认为这是一个坏主意。为什么你要在提交之前更改代码?在我看来,检查代码格式/标准违规并中止提交会好得多。如果我的代码在提交期间发生了更改,我会非常沮丧。

要回答您的具体问题,请使用svnlook changed来获取已更改文件的列表。 svnlook dirs-changed会为您提供受挂起事务影响的目录。

+0

这只是为了格式化代码风格。它不会以任何其他方式影响内容。我正在做的是美化类文件。 – Ravisha

+0

svnlook不会帮助:他想要使用TSVN的客户端挂钩脚本功能,而不是服务器端挂接脚本。 – Stefan

+0

+1原始问题没有提到客户端/服务器端挂钩。这是试图解释如何去做的唯一答案,即使这是你不想做的事情。 – TamusJRoyce

1

正如你可能已经阅读,a hook in subversion只是一个程序,在some parameters and a return value提交过程中的一个特定时间调用。您可以将任何可运行程序放置在挂接目录中。所以你也可以放置任何.exe(也可以是.Net程序)。然后检查命令行参数并执行任何你喜欢的操作,并将任何int值作为errorlevel返回。

在您的应用程序中,您可以使用SharpSVNanything else来轻松访问存储库以进行任何检查并将结果发送给用户。

3

传递给预提交钩子脚本的第一个参数是文本文件的路径。该文本文件包含所有要提交的路径,并用换行符分隔。

但是对于您的情况,您最好使用启动提交挂钩:在提交开始之前调用该脚本,但在用户选择要提交的文件/文件夹之后调用该脚本。在用户在提交对话框中单击确定后,在实际提交开始之前调用启动提交脚本。这个钩子有一个确切的内容列表。

+0

错!预先提交是在用户单击所选文件上的提交后调用的。即使在显示脏文件列表的UI之前也会调用开始提交svnbook.red-bean.com/nightly/en/... – Ravisha

+0

@Ravisha:在您的问题中,您链接到CLIENT SIDE钩子脚本,它是TortoiseSVN特定的。不知何故,我不相信这个工具的作者是错误的... ... – jeroenh

+1

@ jeroenh 我的回复是由斯特凡的这个声明“预先提交脚本被调用时提交对话框显示,之前用户开始选择文件/文件夹进行提交。“ 这是错误的, 预先提交是用户选择文件之后,但在他点击确定按钮之前。这就是我说的。我不是说任何矛盾的龟龟SVN文档 – Ravisha