Исправление свойств svn:externals в svnsync'd копии без новых ревизий?
Как я могу исправить svn:externals
свойство на существующих ревизиях, если у меня есть права администратора на локальной копии (svnsync
'г) хранилище?
Позвольте мне продемонстрировать идею с помощью сценария, который будет называться что-то вроде fixup.sh
и помещается в корневой путь локального репозитория (та же папка, которая содержит conf/
, db/
, hooks/
, так далее):
#!/usr/bin/env bash
CURRBASENAME=$(dirname $(readlink -e $0))
svn propget -R svn:externals "file://$CURRBASENAME"|while read extrnls; do
[[ -n "$extrnls" ]] || continue
LOC=$(echo "$extrnls"|cut -f 1 -d ' ')
NME=$(echo "$extrnls"|cut -f 3 -d ' ')
REV=$(echo "$extrnls"|cut -f 4 -d ' ')
[[ "${REV:0:2}" == "-r" ]] || REV=''
[[ -z "$REV" ]] && EXT=$(echo "$extrnls"|cut -f 4 -d ' ')
[[ -n "$REV" ]] && EXT=$(echo "$extrnls"|cut -f 5 -d ' ')
LOCALIZED="^/${EXT##*/svn/}"
svnmucc -n -m "Adjusting svn:externals $NAME to: $LOCALIZED $REV" propset svn:externals "$NME $REV $LOCALIZED" "$LOC"
done
Обратите внимание, что сценарий не будет работать с путями, которые содержат пробелы, если не экранированы.
К сожалению, такого рода модификация создаст новые ревизии, что, в свою очередь, сделает невозможным постепенное обновление локального репо из исходного удаленного репо.
Желательно сделать это во время sync
фаза, например, с помощью крючка. Представленное здесь "решение" является скорее опорой, чем решением, поскольку это означает, что мне придется переписывать историю каждый раз после синхронизации, фактически сохраняя две отдельные копии: одну измененную и одну "нетронутую" (ну, кроме несовершеннолетний svnsync
fixups).
NB: я работаю над репо, а не над рабочей копией. Также обратите внимание, что svn:externals
это не ревпроп!