Mercurial convert с --filemap не работает с любым фиктивным переименованием

Я пытаюсь очистить репозиторий, используя hg convert --filemap. Преобразование отлично работает с любым параметром в карте файла, кроме rename. Если я добавлю какую-либо опцию rename в карту файлов, она выйдет из строя при первом слиянии с abort: unable to convert merge commit since target parents do not merge cleanly.

Я попытался добавить в карту файла только фиктивный параметр rename foo bar (ни один из путей foo или bar фактически не существует в репозитории) и получил тот же результат.

Я попытался ввести настоящее переименование (существующий 1-й путь), происходит то же самое. Как только туда попадает любое переименование, оно ломается.

Это ошибка? Что я делаю неправильно?

ОБНОВЛЕНИЕ: Чтобы воспроизвести:

Создай файл a, напиши в него что-нибудь, зафиксируй. Обновите до родителя, напишите что-нибудь еще в a, зафиксируйте. Слить с другой головой, исправить конфликт вручную.

Filemap состоит из одной строки и только одной строки: rename foo bar. Выполнить hg convert. Это не удастся, если фиксация не может быть автоматически объединена.


person Dinu    schedule 09.08.2019    source источник
comment
Вы должны показать хотя бы карту файлов, потому что в моем самом маленьком тестовом репо я мог использовать карту файлов и получил конвертированное репо с полностью переименованными файлами.   -  person Lazy Badger    schedule 17.08.2019
comment
@Lazy Badger: Filemap состоит из одной строки и только одной строки: rename foo bar   -  person Dinu    schedule 18.08.2019
comment
а) Имена файлов-каталогов должны быть заключены в кавычки. б) ИМХО, несуществующие объекты бесполезны для тестирования. , слияние и неудавшаяся файловая карта (и, возможно, версии расширения и Mercurial) - поскольку мой тест прошел успешно, это может быть необычной ошибкой.   -  person Lazy Badger    schedule 18.08.2019
comment
JFYI stackoverflow.com /вопросы/44702719/   -  person Lazy Badger    schedule 18.08.2019
comment
Да, кажется, этот вопрос описывает точно такую ​​же проблему. (И у него есть такое же исправление, удаление rename. Так что это не редкость и воспроизводимо на 100%. Создайте файл a, напишите в нем что-то, зафиксируйте. Обновите до родителя, напишите что-то еще в a, зафиксируйте. Слейте с другой головой, устранить конфликт вручную. Запустите hg convert с rename foo bar. Произойдет сбой. Любая директива переименования приведет к повторному выполнению всех слияний в преобразовании. Любое переименование. Все слияния. Слияние, которое не может быть разрешено автоматически, завершится ошибкой. Всегда. Каждый раз.   -  person Dinu    schedule 19.08.2019


Ответы (2)


Не удается воспроизвести ошибку с файловой картой, определенной в соответствии с расширением вики правила:

Исходное репо

Repo>hg log --style changelog
2019-08-17  Me

        * file1.dat, file1.txt:
        Merge all from Data1
        [21caf63b7011] [tip] <Data2>

        * file1.dat:
        Compability fix
        [77667c9ad22c] <Data2>

        * file1.dat, file1.txt:
        Mod for Data2
        [7253bf25d7e7] <Data2>

        * file1.dat, file1.txt:
        Mod for Data1
        [de1f80454b7b] <Data1>

        * file1.dat, file1.txt:
        Mod1
        [7f1dd9e27ceb]

        * file1.dat, file1.txt:
        Initial tree
        [d10d46c86e0f]

Преобразованный репозиторий

Conv>hg log --style changelog
2019-08-17  Me

        * core.code, data.dat:
        Merge all from Data1
        [350d1675a713] [tip] <Data2>

        * data.dat:
        Compability fix
        [7b13e52e0887] <Data2>

        * core.code, data.dat:
        Mod for Data2
        [05f2eae8379c] <Data2>

        * core.code, data.dat:
        Mod for Data1
        [6776b7ac4388] <Data1>

        * core.code, data.dat:
        Mod1
        [c733197f909c]

        * core.code, data.dat:
        Initial tree
        [19230ad05c7a]

Карта файла

rename "file1.txt" "core.code"
rename "file1.dat" "data.dat"
person Lazy Badger    schedule 17.08.2019
comment
Является ли слияние тем, что обычно вызывает конфликт, и это было разрешено? Похоже, проблема в том, что convert с переименованием пытается повторить слияние и терпит неудачу при первом слиянии, которое не может разрешить. - person Dinu; 18.08.2019

У меня была та же ошибка, и я обошел ее, разбив конверсию на несколько шагов.

Похоже, проблема заключается в том, что у вас есть комбинация переименований в карте файлов и слияний во включенной истории во время одного запуска convert. Итак, я сделал это:

  1. Шаг 1: запустите hg convert, используя карту файлов БЕЗ ПЕРЕИМЕНОВАНИЙ. В основном просто для включения/исключения вещей из исходного репозитория во временное промежуточное репо.

  2. Шаг 2: снова запустите hg convert, используя карту файлов, которая только переименовывает. Это будет переход от промежуточного к окончательному репозиторию. Хоть слияния еще были в истории, проблем не было.

  3. Удалить промежуточный репозиторий

Это обошло проблему прерывания. Также дополнительным преимуществом было то, что, поскольку шаг 1 был самым длинным (на нем было выбрано всего несколько 100 наборов изменений из примерно 20000), стало намного проще повторять переименования. Я считаю, что файловые карты немного сложно сделать правильно, так как все просто молча выйдет из строя.

Я использовал Mercurial Distributed SCM (версия 5.7)

person StayOnTarget    schedule 14.05.2021