Исправление свойств svn: externals в svnsync'd копии без новых ревизий? - PullRequest
1 голос
/ 07 февраля 2012

Как я могу исправить свойство svn:externals в существующих ревизиях, если у меня есть права администратора для локальной копии (svnsync 'd) хранилища?

Позвольте мне продемонстрировать идею с помощью сценария, который будет иметь имя, например, 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 исправлений).

NB. Я работаю над репо, а не над рабочей копией. Также обратите внимание, что svn:externals это не revprop!

...