5 июн. 2008 г.

Использование copy в mercurial для разбиения модуля

Продолжаю смотреть на поведение mercurial при слиянии изменений. Тест второй, copy + merge. Простое дублирование одинаковой информации вряд ли когда-либо понадобится, поэтому я решил рассмотреть ситуацию, когда часть содержимого черезчур разросшегося модуля выносится в отдельный модуль.
Для начала создаём репозиторий trunk с одним модулем module.py:
def func1():
    return 'initial'

def func2():
    return 'initial'
и клонируем trunk в branch. Теперь изменяем функции в trunk:
def func1():
    return 'changed'

def func2():
    return 'changed'
В branch мы выносим функцию func2 в модуль submodule.py. Но для того, чтобы mercurial "знал", откуда появилась новая функция в submodule.py, мы выполняем команду hg copy module.py submodule.py и удаляем из первого func1, а из второго func2.
Остаётся только перелить изменения из trunk и сделать merge. Однако теперь процесс проходит не так гладко: изменения обоих функций успешно попадают куда нужно, но изменения второй отсутствующей функции mercurial для обоих подмодулей считает конфликтом, который и предлагает разрешить вручную. Впрочем, в данном случае всё разрешение конфликта сводится к удалению ненужной функции. К сожалению, такую операцию, как перенос части кода из одного файла в другой существующий, mercurial никак не позволяет отработать.

2 комментария:

Анонимный комментирует...

Не смотрели - изменилось что-нибудь за прошедшие полтора года?

Unknown комментирует...

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