TortoiseHg:有没有更新批处理文件图标的方法?

问题描述:

TortoiseHg:有没有更新批处理文件图标的方法?TortoiseHg:有没有更新批处理文件图标的方法?

我发现我所有的从TortoiseHg菜单图标更新的时间,我想触发从批处理文件,感谢图标更新提前

排序的。您需要打开特定的命名管道,然后发送命令。据我所知,你将不得不写一个(不可否认的是非常小)的脚本或应用程序来做到这一点,但是那时脚本可以被包装在一个批处理文件中。

管道名称是:
TortoiseHgRpcServer-bc0c27107423- [用户名]
(用于计算机,我就可以写这才是TortoiseHgRpcServer-bc0c27107423-nholley)

的命令是:
更新| [路径到更新]
(所以我的测试使用更新| C:\项目\ scripts)中

短的C#命令行应用程序做,这是

using System; 
using System.IO; 
using System.IO.Pipes; 

namespace NamedPipeTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var username = Environment.UserName; 
      using (var pipe = new NamedPipeClientStream("TortoiseHgRpcServer-bc0c27107423-" + username)) 
      { 
       try 
       { 
        pipe.Connect(1000); 

        using (var sw = new StreamWriter(pipe)) 
        { 
         sw.Write("update|" + args[0]); 
        } 
       } 
       catch (TimeoutException ex) 
       { 
        Console.WriteLine("Named pipe could not be found. Please restart TortoiseHgOverlayServer"); 
        Console.WriteLine("Press any key to continue..."); 
        Console.ReadKey(); 
       } 
      } 
     } 
    } 
} 

这应该至少让你开始。值得注意的是,浏览器外壳似乎调用删除| [路径]后续更新| [路径],但我不能说,删除步骤实际上是必要的,当我在上面的程序中尝试这样做,我会得到第二个命令后,“管道已损坏”异常,但该命令实际上已将其传送到覆盖服务器。知道更多关于命名管道的人可能很容易解决这个问题。

如果你想钻研它在https://bitbucket.org/tortoisehg/thg/src/bcf0eaf6db6a/TortoiseHgOverlayServer.py

Whee多看一看,这很有趣!

编辑:使用正确的关键字为语言,并添加了更多的错误检查。

+0

我改变了第一个使用的[import]语句。这使得它编译,但它无限期地停留在黑屏 – 2011-05-09 22:09:28

+0

由于某种原因,TortoiseHgOverlayServer失去了在命名管道上的句柄。一个简单的超时检查和try-catch可以解决这个问题。你当然可以扩展它来自动重启该exe,但这超出了这个问题的范围。 – neilh 2011-05-09 23:43:38