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

Est-il possible de compter / calculer la taille totale d’un répertoire svn si vous deviez extraire une révision?

J’ai un nombre limité de téléchargements sur Internet. Je dois donc savoir quelle est la taille avant de la télécharger.

Je vous remercie.

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

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

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

Ceci est ma modification de la réponse. Il 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/1024000" MB" "\nnumber of files= " i/1000 " K"}' 

J’ai testé la solution PowerShell et il suffit d’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 ça marche très bien.

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

 # ------------------------- Afficher les repositorys, 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}`
 faire
   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 substr (xstr, 1, idx-1)} '`

     # REPONAME = sn_library

     $ {CSVN_DIR} / bin / svn list --verbose https://vctl.ds.xxxxxx.in:9501/svn/${REPONAME} |  awk 'BEGIN {repo = "' $ {REPONAME} '";  rev = "'$ {REV_NO}'";} {print "Repository:" repo "Révision:" rev $ 0} "
   Fi
 terminé
 # ------------------------- Afficher les repositorys, les révisions et les tailles individuelles ----------------- --- SuN --- 2011-11-14 -}

ou

 # ------------------------- Montrer les versions des repositorys 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}`
 faire
   si [-f $ i]
   puis
     FILENAME = `ls -l $ i`
     REV_NO = `awk '{imprimer $ 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);  imprimer 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éparti sur \ t" i "\ tfiles / folders"} '

   Fi
 terminé

 # ------------------------- Montrer les versions des repositorys et la taille totale ----------------- --- SuN --- 2011-11-14 -}


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

Sous Linux / UNIX:

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

Notez que l’utilisation du disque pour un checkout svn réel est en gros deux fois supérieure à celle calculée ci-dessus car dans le checkout, vous avez les fichiers dans le répertoire de travail et dans le cache de révision sous les répertoires / répertoires spéciaux .svn .

Alternativement, si vous n’êtes pas trop préoccupé par l’utilisation de la RAM, vous utilisez une expression XPath pour calculer la sum, 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.