Определить общий размер SVN-каталога / транка - PullRequest
39 голосов
/ 16 ноября 2009

Есть ли способ подсчитать / рассчитать общий размер каталога svn, если вы хотите получить ревизию?

У меня ограниченное количество загрузок в Интернете, поэтому мне нужно знать, насколько велика что-то, прежде чем я пойду и скачаю это.

Спасибо.

Ответы [ 5 ]

35 голосов
/ 10 ноября 2011

Это моя модификация к ответу. Он сообщает, сколько файлов находится под определенным каталогом в SVN и общий размер.

svn list -vR svn://svn/repo/subdir|awk '{if ($3 !="") sum+=$3; i++} END {print "\ntotal size= " sum/1024000" MB" "\nnumber of files= " i/1000 " K"}'
9 голосов
/ 16 ноября 2009

Используя приведенное ниже, вы можете определить размер отдельных файлов.

svn list --verbose --recursive http://svn/repo/path

Может быть, вы можете просмотреть эту команду, чтобы найти способ?

5 голосов
/ 18 марта 2011

Я протестировал решение PowerShell, и оно просто нуждается в небольшой коррекции:

([xml](svn list --xml --recursive https://svn/repo/path)).lists.list.entry | measure-object -sum size

Это некоторое время, чтобы получить XML, но работает очень хорошо.

2 голосов
/ 14 ноября 2011

Принимая во внимание вышеприведенные решения, может быть полезно следующее

#------------------------- Show Repositories, Revisions and Individual Sizes -------------------- SuN ---  2011-11-14 -- {

CSVN_DIR=/opt/csvn

cd ${CSVN_DIR}

REPO_PREFIX="${CSVN_DIR}/data/repositories"
REPO_SUFFIX="db/current"


for i in `ls ${REPO_PREFIX}/*/${REPO_SUFFIX} `
do
  if [ -f $i ]
  then
    FILENAME=`ls -l $i`
    REV_NO=`cat $i`
    REPONAME=`echo  $i | awk '{ srch="'${REPO_PREFIX}'/";  idx = index($0,srch); xstr=substr($0,idx + length(srch)); idx = index(xstr, "/'${REPO_SUFFIX}'"); print substr(xstr,1,idx-1)}'`

    #REPONAME=sn_library

    ${CSVN_DIR}/bin/svn list --verbose --recursive https://vctl.ds.xxxxxx.in:9501/svn/${REPONAME} | awk 'BEGIN {repo="'${REPONAME}'"; rev="'${REV_NO}'";} {print "Repository: " repo " Revision: " rev $0 } '
  fi
done
#------------------------- Show Repositories, Revisions and Individual Sizes -------------------- SuN ---  2011-11-14 -- }

или

#------------------------- Show Versions of Repositories and Total Size -------------------- SuN ---  2011-11-14 -- {

CSVN_DIR=/opt/csvn
cd ${CSVN_DIR}

REPO_PREFIX="${CSVN_DIR}/data/repositories"
REPO_SUFFIX="db/current"


for i in `ls ${REPO_PREFIX}/*/${REPO_SUFFIX} `
do
  if [ -f $i ]
  then
    FILENAME=`ls -l $i`
    REV_NO=`awk '{print $1; exit}' $i`
    REPONAME=`echo  $i | awk '{ srch="'${REPO_PREFIX}'/";  idx = index($0,srch); xstr=substr($0,idx + length(srch)); idx = index(xstr, "/'${REPO_SUFFIX}'"); print substr(xstr,1,idx-1)}'`

    #REPONAME=sn_library
    COL_PREFIX="Repository:\t${REPONAME}\tRevision No:\t${REV_NO}\t${FILENAME}"

    COL_PREFIX=`echo "${COL_PREFIX}" | awk '{xstr = $0; gsub(" ","_",xstr); gsub(":","_",xstr); print xstr;}'`


    ${CSVN_DIR}/bin/svn list -vR https://vctl.ds.xxxxxx.in:9501/svn/${REPONAME} | awk 'BEGIN{xstr="'${COL_PREFIX}'"} {if ($3 !="") sum+=$3; i++} END {print xstr "\tTotal size= \t" sum/1024/1024 "\tMB" "\t spread across \t" i "\tfiles/folders "}'

  fi
done

#------------------------- Show Versions of Repositories and Total Size -------------------- SuN ---  2011-11-14 -- }


0 голосов
/ 26 апреля 2017

Вы можете использовать режим XML команды списка Subversion и суммировать по размеру файла.

В Linux / UNIX:

$ svn list --xml --recursive http://svn.example.org/module/trunk | awk -F'[><]' \
      '/^ *<size>/ {s+=$3} END {printf("%.1f GiB\n", s/1024/1024/1024)}'

Обратите внимание, что использование диска при фактической проверке svn в основном вдвое больше, чем вычислено выше, потому что при оформлении покупки у вас есть файлы в рабочем каталоге и в кэше ревизий в специальном каталоге / 1006 * каталогах. *

В качестве альтернативы, если вы не слишком озабочены использованием ОЗУ, вы используете выражение XPath для вычисления суммы, например ::

$ printf '%.1f GiB\n' $(svn list --xml --recursive \
     http://svn.example.org/module/trunk | xmlstarlet sel -t -v \
       'sum(/lists/list/entry/size) div 1024 div 1024 div 1024')

Или:

$ printf '%.1f GiB\n' $(svn list --xml --recursive \
     http://svn.example.org/module/trunk | xmllint --xpath \
       'sum(/lists/list/entry/size) div 1024 div 1024 div 1024' -)

Использование такого процессора XPath в репозитории со многими файлами может привести к высокому использованию памяти, поскольку такие инструменты, как xmllint (использующий libxml2), часто создают полное дерево документов в памяти перед началом суммирования по элементам.

...