web-dev-qa-db-fra.com

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

Existe-t-il un moyen de compter/calculer la taille totale d'un répertoire svn si vous deviez extraire une révision?

Les téléchargements Internet étant limités, je dois donc savoir quelle taille a quelque chose avant de le télécharger.

Je vous remercie.

38
Adam M-W

En utilisant ce qui suit, vous pouvez déterminer la taille de fichiers individuels.

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

Peut-être que vous pouvez regarder autour de cette commande pour trouver un moyen?

10
Dan McGrath

Ceci est ma modification à la réponse. Il indique le nombre de fichiers situés 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/1024000" MB" "\nnumber of files= " i/1000 " K"}'
36
Nico Hailey

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 faut un peu de temps pour obtenir le XML, mais cela fonctionne très bien.

5
Jonathan

En adoptant les solutions ci-dessus, ce qui suit pourrait être utile

 # ------------------------- Afficher les référentiels, les révisions et les tailles individuelles -------------- ------ Sun --- 2011-11-14 - {

 CSVN_DIR =/opt/csvn 

 Cd $ {CSVN_DIR} 

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


 Pour i dans` ls $ {REPO_PREFIX}/*/$ {REPO_SUFFIX}} `
 __. si [-f $ i] 
 puis
 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 sous (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 "Référentiel:" repo "Révision:" rev $ 0} '
 fi 
 done 
 # ------------------------- Afficher les référentiels, les révisions et les tailles individuelles --------- ----------- dim --- 2011-11-14 -} 

ou 

 # ------------------------- Afficher les versions de référentiels et la taille totale -------------- ------ Sun --- 2011-11-14 - {

 CSVN_DIR =/opt/csvn 
 Cd $ {CSVN_DIR} 

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


 pour i dans` ls $ {REPO_PREFIX}/*/$ {REPO_SUFFIX} `
 do 
 si [-f $ i] 
 puis
 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 sous (xstr, 1, idx-1)} '`
.____. # REPONAME = sn_library 
 COL_PREFIX = "Référentiel:\t $ {REPONAME}\tRévision Non:\t $ {REV_NO}\t $ {NOMFICHIER}" 

 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 répartis sur\t" i "\ tfiles/dossiers"} '

 fi 
 done 

 # ------------------------- Afficher les versions de référentiels et la taille totale ------ -------------- Dim --- 2011-11-14 -} 


2
Suresh Nambiar

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

Sous 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 svn checkout est deux fois supérieure à celle calculée ci-dessus, car les fichiers se trouvent dans le répertoire de travail et dans le cache de révision sous le répertoire/les répertoires spéciaux .svn.

Si vous n'êtes pas trop préoccupé par l'utilisation de RAM, vous pouvez également 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 générer une utilisation importante de la mémoire, car des outils tels que xmllint (qui utilise libxml2) construisent souvent l'arborescence complète du document en mémoire avant de commencer à additionner les éléments.

0
maxschlepzig