2009-05-26 2 views
1

Я являюсь пользователем mercurial на окнах, и я пытаюсь написать пакетный файл, чтобы проверять входящие изменения на количество репозиториев, хранящихся в общей папке (т. Е. Может быть 10 или, таким образом, небольшие ртутные репозитории в основной папке). У меня есть следующий пакетный файл, который успешно выполняет итерации через несколько репозиториев и запускает hg входящий. Однако я не могу заставить его выполнить hg -pull -u, когда найден репозиторий с удаленными изменениями.файл меркурийных окон для вытягивания изменений в несколько репозиториев

FOR /D /r %%G in (".hg*") DO (
    @echo Processing: %%G 
    cd /d %%G\.. 
    hg incoming 
    IF NOT ERRORLEVEL 0 (
     echo Pulling changes from the server 
     hg pull -u 
    ) 
    cd.. 
    ) 

Я уверен, что проблема заключается в утверждении If. hg входящий, похоже, не имеет возвращаемого значения, которое может быть интерпретировано ERRORLEVEL. Это правильный подход или я должен использовать python?

+0

Я создал два пакетных файла. Один, который выполняет hg pull и другой, который выполняет обновление hg. Это, по-видимому, самое безопасное решение, так как вывод hg pull указывает, что репо нужно объединить или просто обновить. Спасибо всем за ваши ответы. – Bluebill

ответ

3

Выходной код hg incoming и hg outgoing является 1, если не было входящих/исходящих и ревизий 0 иначе, и это означает, что ваш тест в обратном направлении. (Коды выхода были задокументированы, поскольку этот вопрос был задан, и теперь можно найти в hg help incoming и hg help outgoing.)

Кроме того, делая как hg incoming и hg pull делает работу дважды: вы должны просто использовать hg pull. Помощь hg incoming говорит:

Для удаленного хранилища, используя --bundle избегает загрузки дважды ревизии, если поступающая следует тянуть.

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

+0

У меня создалось впечатление, что входящие и исходящие hg были просто превью того, что бы вытащили/нажали, не натягивая все наборы изменений. Если я правильно понимаю, что hg входящий захватывает списки изменений и когда закончил их отбрасывать? Если это так, то просто использовать hg pull -u было бы достаточно. – Bluebill

+0

Да, я согласен: «hg incoming» должен просто быстро получать метаданные (авторы, фиксировать сообщения и т. Д.), А не фактические данные. Я недостаточно знаком с этой частью кода, чтобы сказать, почему это делается именно так. –