Mercurial [subpaths], содержащий абсолютный путь, добавляется к пути основного репо по умолчанию при нажатии - PullRequest
3 голосов
/ 27 января 2012

Запуск Mercurial 2.0.2 в Windows:

В моем .hgrc:

[subpaths]
MYREPOS/(.*) = https://server/repos/\1

И в моем .hgsub:

subrepo/lib = MYREPOS/lib

Когда я делаюpush, push-путь суб-репо - это конкатенация его пути к основному репо, а не абсолютный путь - вывод:

pushing to https://server/repos/main 
pushing subrepo subrepo\lib to https://server/repos/main/http%3A//server/repos/lib

Я бы ожидал:

pushing to https://server/repos/main
pushing subrepo subrepo\lib to https://server/repos/lib

Это потому, что «абсолютность или относительность» пути суб репо определяется путем правой руки в .hgsub, а не значением, на которое он отображается?Например, MYREPOS / lib является относительным, и поэтому сопоставленный путь будет обрабатываться как относительный, независимо от того, является он или нет?

1 Ответ

3 голосов
/ 27 января 2012

Логика субпозитория была изменена между 1,9 и 2,0 . Процедура сейчас:

  1. если путь в .hgsub является относительным, то присоедините его к основному пути к хранилищу
  2. применить правила переназначения к этому окончательному пути

Перед этим изменением мы бы:

  1. применить правила переназначения к пути от .hgsub
  2. если переназначенный путь является относительным, то присоедините его к основному пути к хранилищу

Итак, вы правы, что MYREPOS/lib рассматривается как относительный путь на первом шаге. Таким образом, полный путь для под-репозитория

https://server/repos/main/MYREPOS/lib

и ваш шаблон переотображения все еще срабатывает. Это объясняет, почему вы видите http://... в середине push-адреса. Однако существует отступление , которое вернется к старому поведению. Если ваш шаблон

^MYREPOS/(.*) = https://server/repos/\1

тогда он не будет ничего совпадать на новом шаге 2 - он только переназначит MYREPOS в начале пути. Мы замечаем это и используем старый алгоритм!

...