Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
hgbook.pdf
Скачиваний:
50
Добавлен:
17.03.2015
Размер:
3.15 Mб
Скачать

Управление изменениями с Mercurial Queues

12.6.5. Обработка отказа

Если qpush не удается применить патч, он выведет сообщение об ошибке и завершит работу. Если он оставит

.rej файлы, как правило, лучше устранить отклонения блоков перед добавлением других патчей или какой-либо дальнейшей работой.

Если ваш патч применялся чисто, и больше не может, потому что вы изменили исходный код, на котором основан ваши патч, Mercurial Queues может помочь, смотрите в разделе Раздел 12.9, «Обновление патчей когда исходный код измененился» для подробностей.

К сожалению, не так много методов для решения отклоненных блоков. Чаще всего, вам понадобится просмотреть

.rej файл и отредактировать целевой файл, применяя отклоненный блок вручную.

Разработчик ядра Linux, Крис Мейсон (автор Mercurial Queues), пишет инструмент под названием mpatch ((http://oss.oracle.com/~mason/mpatch/), который принимает простой подход к автоматизации применения блоков отклонённых patch. Команда mpatch может помочь с 4-я распространенными причинами отклонения блока:

Контекст, в середине блока изменился.

Часть контекста блока отсутствуют в начале или в конце.

Большой блок может применится лучше полностью или частично, если его разбить на мелкие куски.

Блок удаляет строки с несколько иным содержанием, чем в настоящее время в файле.

Если вы используете mpatch, вы должны быть особенно осторожным, и проверять свои результаты, когда закончите. В самом деле, mpatch применяет метод двойной проверки вывода инструмента, автоматически передавая вас программе объединения, когда он сделает свою работу, так что вы можете проверить свою работу и закончить всё оставшееся слияние.

12.7. Подробнее о управление патчами

По мере того как вы познаёте MQ, вы пожелаете выполнять другие виды операций по управлению патчами.

12.7.1. Удаление нежелательных патчей

Если вы хотите, избавиться от патча, воспользуйтесь командой hg qdelete, чтобы удалить файл патча и удалить его из серии патчей. Если вы попытаетесь удалить патч, который все еще применяется, hg qdelete откажется.

$ hg init myrepo $ cd myrepo

$ hg qinit

$ hg qnew bad.patch $ echo a > a

$ hg add a

$ hg qrefresh

$ hg qdelete bad.patch

abort: cannot delete applied patch bad.patch $ hg qpop

popping bad.patch patch queue now empty $ hg qdelete bad.patch

12.7.2. Преобразование в и из постоянных ревизий

Как только вы закончите работу над патчем и хотите превратить его в постоянную ревизию, используйте команду hg qfinish. При переходе к ревизии команда определяет патч, который вы хотите превратить в обычную ревизию, этот патч уже должен быть применен.

$ hg qnew good.patch $ echo a > a

$ hg add a

148

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]