Различать дерево транзакций по другому пути / ревизии
Как в сценарии предварительной фиксации я могу получить различие зафиксированных изменений от произвольного пути / ревизии в том же хранилище?
Например, когда изменения в файлах внутри /trunk
совершить, я хотел бы получить различий в совершенных /trunk
(еще не ревизия) против, скажем, /branches/feature_x
(который является филиалом /trunk
).
Насколько я могу сказать, svnlook diff
показывает только изменения, предложенные этой транзакцией, а svn diff
работает только с ревизиями, а не с транзакциями.
Подход методом грубой силы был бы, чтобы дифференцировать вывод svnlook cat ...
" а также " svn cat PATH:REV
"для каждого файла, который был изменен. Однако, это кажется довольно неэффективным и не то, что я хотел бы иметь в сценарии ловушки.
Фон:
Я пытаюсь создать сценарий предварительной фиксации, который отклоняет все фиксации в определенных каталогах и позволяет вносить изменения только через реинтеграции веток (связанная статья: Обнаружение реинтеграции веток или слияния в скрипте предварительной фиксации).
Пока что представляется возможным обнаружить использование svn merge
осматривая svn:mergeinfo
свойства базового каталога. Однако невозможно провести различие между изменениями файлов, примененными слиянием, и изменениями, выполненными вручную, и поэтому изменения после слияния останутся незамеченными.
Я хотел бы иметь возможность сравнить дерево подтвержденных транзакций с источником слияния, чтобы убедиться, что никаких дополнительных изменений не было сделано. (В соответствии с нашей политикой проекта все конфликты разрешаются в ветви функций до реинтеграции, поэтому никаких изменений не требуется после merge --reintegrate
в /trunk
).
1 ответ
diff выводит "svnlook cat ..." и "svn cat PATH: REV"
OS-diff может принимать только один ФАЙЛ из стандартного ввода, вы не можете заменить оба
Грязная идея, а не решение
- Вы можете попробовать предварительно зафиксировать файлы коммита в транзакции в дополнительном (не связанном с основным) репозитории и diff-файлы во втором хуке post-commit репозитория, которые возвращают необходимый результат в вызов ловушки pre-commit в репо (есть pre-made локальное репо и WC для этого репо, сохранение файлов в транзакции в WC, добавление / при необходимости /, фиксация)