Mercurial命令行客户端:如何从文件中读取命令、选项和参数?

4

有没有一种方法让Mercurial从响应文件中读取我想要给它的大部分/全部命令、选项和参数,而不是将它们传递到命令行上?

例如,可以这样做:

hg commit -m "commit message" --INCLUDE file1 --INCLUDE file2 ...

我会创建一个文本文件,其中包含以下内容:
-m "commit message" --INCLUDE file1 --INCLUDE file2 ...

然后使用Mercurial读取它,采用以下(假定的)语法:

hg commit @responses.txt

我问这个问题的原因是,我正在为.NET创建一个Mercurial命令行客户端的包装库,而这个SO上的问题让我担心命令行的长度可能会成为我的问题:“Resulting command line for hg.exe too long” error in Mercurial

2个回答

2
我所知道的,没有内置的方法可以做到这一点,但我认为你可以构建你需要的东西。使用Mercurial内部API并编写自己的包装脚本。与尝试读取任何和所有命令和选项相比,坚持你的特定目标(即“提交”和你需要的选项)会更容易一些。请注意API页面上的警告。如果你正在构建的这个包装器将被分发给其他人,请考虑许可问题,并制定处理未来可能破坏你的包装器的Mercurial升级的计划。

这意味着我必须使用Mercurial的Python版本。由于我正在编写自己的包装库,所以我想坚持使用纯二进制版本,它不需要安装Python,因为它自带了Python库。 - Lasse V. Karlsen
我想你可以尝试入侵该软件包并添加类似上述的自己的包装命令,但这可能比结果值得的工作还要更多。而且,如果结果被认为是“派生作品”,它可能会使您的分发计划变得复杂。 - Paul Bissex

0

这里有一个笨拙的解决方法...

  1. 在仓库的 .hg 目录下创建一个虚拟的空响应文件,例如 .hg\response。

  2. 在仓库的 .hg\hgrc 文件中添加以下行

    %include response

  3. 在执行任何仓库操作之前,将命令行选项写入此响应文件。使用 [defaults] 部分(我知道它已被弃用)指定您的选项。

    [defaults]
    commit = -m "这是提交信息" -I file1 -I file2 ...

(根据 Microsoft's support 的说法,在 XP 及更高版本上,最大命令行长度为 8,191 个字符。如果您需要使用此技巧,则可能会很有用。)


由于我正在编写一个Mercurial的包装库,因此我将避免修改那些不是我的存储库的hgrc文件,包括任何其他人可能拥有并使用我的库的存储库。我已经开始了一项游说运动,以便将正确的响应文件内置到Mercurial中。 - Lasse V. Karlsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接