5 июн. 2008 г.

Обработка rename и merge в mercurial

Иван Сагалаев написал про проблемы слияния веток репозитория при использовании subversion. Это навело меня на мысль проверить, как с такими вещами в используемом мной mercurial? По ходу обнаружилось, что на моей локальной машине до сих пор установленная версия 0.8, в том время как все вкусности появились только начиная с 1.0. Чтож, хороший повод обновиться.
Итак, тест первый.
mkdir trunk
cd trunk
hg init
Создаю в нём модуль old_name.py с одной функцией:
def old_func():
  return 'initial'
Клонирую репозиторий
cd ..
hg clone trunk branch
и переименовываю модуль в новой ветке
cd branch
hg rename old_name.py new_name.py
hg ci -m 'old_name.py -> new_name.py' old_name.py new_name.py
Меняю функцию в old_name.py в trunk и добавляю новую, в результате получаю такой код:
def old_func():
   return 'changed'

def new_func():
   pass
Комичу изменения и пробую слить trunk с branch:
hg ci -m 'old_func is changed; new_func is added' old_name.py
cd ../branch
hg pull ../trunk
hg merge
Всё проходит замечательно и все изменения old_name.py в trunk успешно попадают в new_name.py в branch.
Ради интереса, я повторил тест со старой версией. При слиянии mercurial сообщает о том, что был изменён удалённый файл и предлагает либо добавить его, либо удалить. То есть ни о каком слиении изменений речи не идёт.

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

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

Спасибо за тесткейс! Попробую, если с bazaar не получится (я с него просто начал).

И пожалуйста, исправьте мою фамилию в посте -- Сагалаев.

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

Oops, исправил.