41 votes

Déterminer la taille totale du répertoire/trunk SVN

Existe-t-il un moyen de compter/calculer la taille totale d'un répertoire svn en cas d'extraction d'une révision ?

J'ai des possibilités de téléchargement limitées sur Internet et j'ai besoin de connaître la taille d'un fichier avant de le télécharger.

Merci.

36voto

Nico Hailey Points 131

Voici ma modification de la réponse. Elle indique combien de fichiers se trouvent sous un certain répertoire dans svn et la taille totale.

svn list -vR svn://svn/repo/subdir|awk '{if ($3 !="") sum+=$3; i++} END {print "\ntotal size= " sum/(1024*1024)" MB" "\nnumber of files= " i/1000 " K"}'

0 votes

Non, cela fonctionne toujours pendant plus d'une heure pour vérifier la taille d'un répertoire repo <15GB. J'attends toujours............. :(

9voto

Dan McGrath Points 9839

En utilisant le tableau ci-dessous, vous pouvez déterminer la taille des fichiers individuels.

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

Peut-être pouvez-vous chercher dans cette commande pour trouver un moyen ?

6 votes

Cela semble fonctionner correctement, mais cela prend un temps fou et je n'ai aucune idée du trafic que cela engloutit déjà. En PowerShell, c'est aussi simple que ça : ([xml](svn list --xml --recursive https://svn/repo/path)).lists.list.entry | measure -sum size

0 votes

Non. Les externes sont un tout autre jeu de balle.

6voto

Jonathan Points 31

J'ai testé la solution PowerShell et elle nécessite juste une petite correction :

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

Il a fallu un certain temps pour obtenir le xml, mais il fonctionne très bien.

2voto

Suresh Nambiar Points 11

En adoptant les solutions ci-dessus, les éléments suivants pourraient être utiles

#------------------------- 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 -- }

ou

#------------------------- 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 -- }

1voto

maxschlepzig Points 3578

Vous pouvez utiliser le mode XML de la commande Subversion list et additionner la taille du fichier.

Sur 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)}'

Notez que l'utilisation du disque d'un checkout svn réel est en fait deux fois plus importante que celle calculée ci-dessus parce que dans le checkout, vous avez les fichiers dans le répertoire de travail et dans le cache de révision sous la balise .svn répertoire(s) spécial(s).

Sinon, si vous n'êtes pas trop préoccupé par l'utilisation de la RAM, vous pouvez utiliser une expression XPath pour calculer la somme, par exemple :

$ 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')

Ou :

$ 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' -)

L'utilisation d'un tel processeur XPath sur un référentiel contenant de nombreux fichiers peut entraîner une utilisation élevée de la mémoire, car des outils comme xmllint (qui utilise libxml2) construisent souvent l'arbre complet du document en mémoire avant de commencer à additionner les éléments.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X