TortoiseHg: Есть ли способ обновить значки из пакетного файла?

TortoiseHg: Есть ли способ обновить значки из пакетного файла?

Я обнаружил, что все время обновляю значки из меню TortoiseHg, и я хотел бы запустить обновление значков из командного файла, заранее спасибо


person Jhonny D. Cano -Leftware-    schedule 24.05.2010    source источник


Ответы (1)


Вроде. Вам нужно открыть определенный именованный канал, а затем отправить команду. Насколько я знаю, для этого вам придется написать (по общему признанию, очень маленький) скрипт или приложение, но тогда этот скрипт можно будет завернуть в пакетный файл.

Имя канала:
TortoiseHgRpcServer-bc0c27107423-[username]
(для компьютера, на котором я это пишу, это TortoiseHgRpcServer-bc0c27107423-nholley)

Команда:
update|[path-to-update]
(поэтому в моем тесте используется update|c:\projects\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

Ух, это было весело!

изменить: использовать правильные ключевые слова для языка и добавить немного больше проверки ошибок.

person neilh    schedule 09.05.2011
comment
Я изменил первые операторы [import] для использования. Это заставило его скомпилироваться, однако он остается на черном экране на неопределенный срок. - person Jhonny D. Cano -Leftware-; 10.05.2011
comment
По какой-то причине TortoiseHgOverlayServer потерял дескриптор именованного канала. Простая проверка тайм-аута и try-catch решает эту проблему. Конечно, вы можете расширить его для автоматического перезапуска этого исполняемого файла, но это выходит за рамки этого вопроса. - person neilh; 10.05.2011