Обновление архивов исходных кодов программ из систем контроля версий: различия между версиями
Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
Rain (обсуждение | вклад) (Создана новая страница размером Обычно исходники всяких программ, скачанных с различных CVS/SVN/GIT храню в архи...) |
Rain (обсуждение | вклад) (bugfix) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 13: | Строка 13: | ||
find "${@}" -regextype posix-extended -type f -regex "[[:print:]]*\.(svn|cvs|git)\.7z" | | find "${@}" -regextype posix-extended -type f -regex "[[:print:]]*\.(svn|cvs|git)\.7z" | | ||
while read file | while read file | ||
do | do | ||
vcstype="$(sed -r 's/.*\.(.{3})\.7z$/\1/g' <<< ${file/*\/ | vcstype="$(sed -r 's/.*\.(.{3})\.7z$/\1/g' <<< ${file/*\//})" | ||
mywd="${PWD}" | mywd="${PWD}" | ||
tmpdir="/tmp/vcsupdate.$RANDOM" | tmpdir="/tmp/vcsupdate.$RANDOM" | ||
dirname="$(sed -r 's/(.*)\..{3}\.7z$/\1/g' <<< ${file/*\/ | dirname="$(sed -r 's/(.*)\..{3}\.7z$/\1/g' <<< ${file/*\//})" | ||
file="$(readlink -f "${file}")" | |||
[ ! -e $tmpdir ] && mkdir $tmpdir || exit 1 | [ ! -e $tmpdir ] && mkdir $tmpdir || exit 1 | ||
echo -e '\e[35mExtracting files...\e[0m' | echo -e '\e[35mExtracting files...\e[0m' | ||
7z x "${ | 7z x "${file}" -o"${tmpdir}" 1>/dev/null | ||
cd "${dirname}" | cd "${tmpdir}/${dirname}" | ||
echo -e "\e[35mUpdating sources for \e[36m$file \e[35mfrom \e[36m$vcstype \e[35mrepository.\e[0m" | echo -e "\e[35mUpdating sources for \e[36m$file \e[35mfrom \e[36m$vcstype \e[35mrepository.\e[0m" | ||
case ${vcstype} in | case ${vcstype} in | ||
Строка 35: | Строка 35: | ||
cd .. | cd .. | ||
echo -e "\e[31mRemoving old archive \e[36m$file\e[0m" | echo -e "\e[31mRemoving old archive \e[36m$file\e[0m" | ||
rm -f " | rm -f "${file}" | ||
echo -e "\e[35mCompressing files\e[0m" | echo -e "\e[35mCompressing files\e[0m" | ||
7z a -mx=9 " | 7z a -mx=9 "${file}" ${dirname} 1>/dev/null | ||
echo -e "\e[31mRemoving old source files\e[0m" | echo -e "\e[31mRemoving old source files\e[0m" | ||
cd "${mywd}" | cd "${mywd}" |
Текущая версия на 15:19, 25 июня 2009
Обычно исходники всяких программ, скачанных с различных CVS/SVN/GIT храню в архивах вида "название каталога.тип системы контроля версий.7z". Ниже скриптик, который распаковывает такие архивы, обновляет программу в соответствии с синтаксисом соответствующих утилит, после чего пакует архив назад под тем же именем. Может работать с отдельным архивом/архивами или каталогом (в последнем случае обновляются все найденные внутри архивы).
#!/bin/bash
# By Rain ;)
if [ -z "${1}" ]
then
echo -e "\e[5;31mError: Please, specify target archive or directory\e[0;0m"
exit 1
fi
find "${@}" -regextype posix-extended -type f -regex "[[:print:]]*\.(svn|cvs|git)\.7z" |
while read file
do
vcstype="$(sed -r 's/.*\.(.{3})\.7z$/\1/g' <<< ${file/*\//})"
mywd="${PWD}"
tmpdir="/tmp/vcsupdate.$RANDOM"
dirname="$(sed -r 's/(.*)\..{3}\.7z$/\1/g' <<< ${file/*\//})"
file="$(readlink -f "${file}")"
[ ! -e $tmpdir ] && mkdir $tmpdir || exit 1
echo -e '\e[35mExtracting files...\e[0m'
7z x "${file}" -o"${tmpdir}" 1>/dev/null
cd "${tmpdir}/${dirname}"
echo -e "\e[35mUpdating sources for \e[36m$file \e[35mfrom \e[36m$vcstype \e[35mrepository.\e[0m"
case ${vcstype} in
svn)
svn update;;
cvs)
cvs update;;
git)
git pull;;
esac
cd ..
echo -e "\e[31mRemoving old archive \e[36m$file\e[0m"
rm -f "${file}"
echo -e "\e[35mCompressing files\e[0m"
7z a -mx=9 "${file}" ${dirname} 1>/dev/null
echo -e "\e[31mRemoving old source files\e[0m"
cd "${mywd}"
rm -rf $tmpdir
echo -e "\e[36m$file \e[35mupdated successfully\e[0m"
done