Запустите этот скрипт как cron-job или systemd.timer с сервера linux (используя учетную запись с доступом для записи в хранилище).
Это решает проблему возврата к более старой версии project1 также вернется к версии common , которая использовалась в то время, путем постоянного обновления привязанной версии SVN.
В качестве дополнительного бонуса, если кто-то обновит common , все проекты, выполняющие этот сценарий, автоматически передадут обновление внешнего свойства, которое может вызвать CI (используя что-то вроде Jenkins).Это означает, что фиксация common будет немедленно протестирована во всех зависимых проектах.
#!/bin/bash
# Updates all svn externals in a remote repository
# argument 1 is the server
# argument 2 is the path to the externals directory relative to the server root
#
# Note: all externals in the repository must be relative to the server root.
# See `svn help pset`
#
# Example:
# If you have externals in https://example.com/svn/project1/trunk, then:
#
# this-script https://example.com /svn/project1/trunk
#
server=$1
repo=$2
# Get the commited properties
svn checkout $server$repo wc --depth=empty
svn pget svn:externals wc > wc.externals
# Remove empty lines
sed -i '/^$/d' wc.externals
# for each external in existing properties:
while read line; do
# tokenize
IFS='@ ' tokens=( $line )
# extract interesting stuff from the tokens
extrepo=${tokens[0]}
rev=${tokens[1]}
dir=${tokens[2]}
# Query the external repository for the last change
latest=$(svn info $server$extrepo | sed -ne 's/^Last Changed Rev: //p')
# Write a new set of externals based on latest info
echo "$extrepo@$latest $dir" >> wc.newexternals
done <wc.externals
# Get the differences between the new and old externals
details=$(diff -y --suppress-common-lines wc.externals wc.newexternals)
# If differences exist (and the diff was valid)
retval=$?
if [ $retval -eq 1 ]; then
# Set the new properties
svn pset svn:externals -F wc.newexternals wc
# Generate the SVN log
echo "Automatic externals update" > wc.log
echo $details >> wc.log
# Commit the changes
svn ci -F wc.log wc
fi
# Cleanup
rm -rf wc wc.externals wc.newexternals wc.log
Ограничение состоит в том, что он поддерживает только внешние настройки, настроенные относительно корня того же сервера.