Выпуск распределённой системы управления версиями Mercurial 3.5

Представлен релиз распределённой системы управления версиями Mercurial 3.5. Код Mercurial написан на языке Python (требующие высокой производительности части оформлены в виде модулей на Си) и распространяется под лицензией GPLv2+. Среди проектов, использующих Mercurial, можно выделить следующие: Mozilla, Python, Go, OpenOffice.org, OpenSolaris, NetBeans, OpenJDK, ALSA, Nginx, Xine, Dovecot, NTFS-3G и W3C.

Ключевым новшеством является задействование протокола bundle2 по умолчанию на стороне клиента (ранее был включен только для серверов, после обновления клиентов для версии 3.5 они смогут работать с hg.mozilla.org по новому протоколу). По сравнению с классическим протоколом, в bundle2 сокращено число этапов согласования соединения, что положительно сказалось на скорости выполнением операций push и pull, и дало возможность сделать данные операции атомарными. В протоколе bundle2 также реализованы средства для обмена дополнительными метаданными в рамках установленного канала связи, что открывает широкие возможности для развития новшеств, например, возможности автоматического перестроения (rebase) сервера при выполнении операции push.

Из других изменений отмечается прекращение поддержки Python 2.4 и 2.5 (ожидается скорое начало портирования на Python 3), добавление параметра конфигурации ui.allowemptycommit (управляет допустимостью пустых коммитов), в hgignore добавлена поддержка директив include и subinclude (для включения содержимого других файлов), а также реализация серии оптимизаций производительности. Продолжена работа над реализацией возможности разбиения единого файла-манифеста на серию локальных манифестов, привязанных к отдельным директориям.

Особенности Mercurial:

  • Быстродействие:
    • Высокая производительность работы с хранилищем, не зависящая от числа элементом в нём (O (1) revlog);
    • Компактное хранение данных в проиндексированном и сжатом виде;
    • Оптимизирован для эффективной работы с данными на жёстком диске;
    • Все изменения и файлы в репозитории дополнительно проиндексированы;
    • Для копирования данных по сети используется HTTP и SSH, данные передаются в сжатом виде.
  • Масштабирование
    • Распределённая модель разработки позволяет участвовать в проекте неограниченному числу разработчиков;
    • Допускается произвольное слияние отдельных децентрализованных репозиториев, поддерживаемых отдельными разработчиками;
    • Объём репозитория, число файлов и зафиксированных изменений не отражается отрицательно на производительности;
    • При работе нет необходимости ждать освобождения блокировки.
  • Надёжность.
    • Для контроля целостности данных в репозитории используется SHA1;
    • Хранилище реализовано в журнальном виде — данные не замещаются, а добавляются. Ведётся журнал транзакций;
    • Быстрый алгоритм проверки целостности репозитория;
    • Встроенные средства резервного копирования и проверки целостности;
  • Удобство использования.
    • Привычный CVS-подобный набор команд;
    • Наличие встроенной системы подсказки;
    • Интегрированный Web-интерфейс;
    • Большой выбор GUI интерфейсов.
  • Лёгкость внедрения:
    • Поддержка платформ UNIX, MacOS X и Windows;
    • Средства, упрощающие миграцию с других систем управления исходными текстами;
    • Поддержка нескольких моделей организации репозитория: централизованная cvs-подобная, децентрализованная иерархическая и распределённая полуиерархическая;
    • Поддержка внешних обработчиков и дополнений.

© OpenNet