Changeset 43982 in spip-zone
- Timestamp:
- Jan 29, 2011, 5:04:00 PM (10 years ago)
- Location:
- _outils_/smart_paquets
- Files:
-
- 1 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
_outils_/smart_paquets/inc_empaqueteur.php
r43250 r43982 8 8 #error_reporting(E_ALL); 9 9 10 // Fonction creant le fichier archives.xml final.11 // Ne pas le reecrire si rien de neuf, c'est + efficace et ca permet12 // au detecteur de nouvelle version d'utiliser If-Modified-Since.13 // Attention, file_put_contents fait ce qu'il veut de certaines lignes vides14 // http://fr2.php.net/manual/fr/function.file-put-contents.php15 16 function empaqueteur_xml_archives($depot, $zips, $dir_paq, $dir_repo, $srcname)17 {18 $xml = '';19 $re = ",<"."\?xml[^>]*\?".">,Uims";20 foreach($zips as $zip => $res) {21 list($size, $time, $source, $commit) = $res;22 # if (file_exists($dir_repo . $source . '/lang'))23 # echo_trace("$source a des chaines de langues");24 // Recuperer le xml qui decrit le plugin25 $f = $dir_repo . $source . '/' . $srcname ;26 if (file_exists($f))27 $desc = trim(preg_replace($re,'',file_get_contents($f)));28 else {29 echo_trace("(info) Paquet $zip sans plugin.xml");30 $desc = '';31 }32 33 $xml .= "<archive id=\"$zip\">34 <file>$zip</file>35 <size>$size</size>36 <date>$time</date>37 <source>$source</source>38 <last_commit>$commit</last_commit>39 $desc40 </archive>\n\n";41 }42 if ($xml) {43 $xml_depot = empaqueteur_xml_depot($depot);44 $all = "$xml_depot45 <archives>46 $xml47 </archives>";48 $xml = strlen($all);49 $f = $dir_paq . $dir_repo . 'archives.xml';50 $old = (file_exists($f)) ? trim(file_get_contents($f)) : '';51 if ($old != $all) {52 echo_trace("Nouveau $f de taille $xml");53 file_put_contents($f, $all);54 return;55 }56 }57 echo_trace("$f intact (taille: $xml)");58 }59 60 // Fonction de construction du bloc xml du depot61 // Pour l'instant ce bloc n'implemente pas la nouvelle DTD62 function empaqueteur_xml_depot($depot) {63 $xml = '';64 foreach ($depot as $_balise => $_valeur) {65 $xml .= "<$_balise>$_valeur</$_balise>\n";66 }67 if ($xml)68 $xml = "<depot>\n$xml\n</depot>";69 70 return $xml;71 }72 73 10 function empaqueteur($url, $dir_repo, $dir_paq, $src, $dest, $xml, $nom_vcs, $mail_to, $mail_from) 74 11 { 75 12 global $erreurs; 13 14 $producteur = 'empaqueteur_' . basename($xml, '.xml'); 15 require($producteur . '.php'); 76 16 77 17 $erreurs = array(); … … 80 20 $dir_paq = rtrim($dir_paq ? $dir_paq : '.','/') .'/'; 81 21 82 list($depot, $zips) = empaqueteur_zips($url, $dir_repo, $dir_paq, $src, $nom_vcs );22 list($depot, $zips) = empaqueteur_zips($url, $dir_repo, $dir_paq, $src, $nom_vcs, $xml); 83 23 if (!$erreurs) { 84 24 // ne pas nettoyer le fichier archives.xml ! … … 89 29 } elseif ($mail_to) empaqueteur_mail($erreurs, $mail_to, $mail_from); 90 30 91 foreach(is_array($dest) ? $dest : array($dest) as $nom_dest) { 92 if (!function_exists($dest = 'empaqueteur_xml_' . $nom_dest)) { 93 echo_trace("Producteur xml inconnu: '$nom_dest'"); 94 } else $dest($depot, $zips, $dir_paq, $dir_repo, $xml); 95 } 96 } 97 98 function empaqueteur_zips($url, $dir_repo, $dir_paq, $src, $nom_vcs) 31 $all = $producteur($depot, $zips); 32 if ($all) 33 empaqueteur_xml_archives($all, $dir_paq, $dir_repo); 34 else echo_trace("Aucun Zip produit"); 35 } 36 37 // Fonction creant le fichier archives.xml final. 38 // Ne pas le reecrire si rien de neuf, c'est + efficace et ca permet 39 // au detecteur de nouvelle version d'utiliser If-Modified-Since. 40 // Attention, file_put_contents fait ce qu'il veut de certaines lignes vides 41 // http://fr2.php.net/manual/fr/function.file-put-contents.php 42 43 function empaqueteur_xml_archives($all, $dir_paq, $dir_repo) 44 { 45 $xml = strlen($all); 46 $f = $dir_paq . $dir_repo . 'archives.xml'; 47 $old = (file_exists($f)) ? trim(file_get_contents($f)) : ''; 48 if ($old != $all) { 49 echo_trace("Nouveau $f de taille $xml"); 50 file_put_contents($f, $all); 51 return; 52 } 53 echo_trace("$f intact (taille: $xml)"); 54 } 55 56 function empaqueteur_zips($url, $dir_repo, $dir_paq, $src, $nom_vcs, $xml) 99 57 { 100 58 $dir_tmp = $dir_paq.'tmp/'; 101 59 $dir_paq .= $dir_repo; 102 $zips = array();103 60 104 61 if (!function_exists($vcs = 'empaqueteur_exec_' . $nom_vcs)) { … … 130 87 131 88 list($depot, $paquets) = liste_paquets($dir_repo . $src); 89 $zips = array(); 132 90 foreach($paquets as $paquet){ 133 if ($paquet['revision']=='HEAD') { 134 $source = rtrim($paquet['source'],'/'); 135 $dsource = $dir_repo.$source; 136 if (!file_exists($dsource)){ 137 echo_trace("Erreur : $dsource inexistant"); 138 } else { 139 // ajouter le fichier svn.revision 140 $rev = $dsource . "/svn.revision"; 141 $vcs("info", "$dsource > $rev"); 142 $info = renseigner_revision_paquet($rev); 143 $zip = $paquet['nom'] .".zip"; 144 $zippath = $dir_paq.$zip; 145 $res = paqueter($dsource, $zip, $zippath, $paquet['nom_dossier'], $info, $dir_tmp); 146 // copier le svn.revision de stable/spip.zip qui permet de connaitre la derniere version stable 147 if ($zip=="stable/spip.zip") { 148 // necessaire de remettre le fichier a la date actuelle 149 // car il a la date du dernier commit sur ce paquet 150 # touch($dsource."/svn.revision"); 151 copie_update($rev,$dir_paq.dirname($zip)."/svn.revision"); 152 } 153 // supprimer le fichier info revision cree ci-dessus 154 @unlink($rev); 155 $zips[$zip] = array( 156 filesize($zippath), 157 filemtime($zippath), 158 $source, 159 $info[1]); 160 } 91 if ($paquet['revision']=='HEAD' AND 92 $r = empaqueteur_zip($paquet, $dir_repo, $dir_paq, $dir_tmp, $vcs, $xml)) { 93 $zips[$paquet['nom'] .".zip"] = $r; 161 94 if (intval(_SLEEP_BETWEEN)) usleep(_SLEEP_BETWEEN); 162 95 } … … 166 99 } 167 100 101 function empaqueteur_zip($paquet, $dir_repo, $dir_paq, $dir_tmp, $vcs, $xml) 102 { 103 $dsource = $dir_repo. $paquet['source']; 104 if (!file_exists($dsource)){ 105 echo_trace("Erreur : $dsource inexistant"); 106 return false; 107 } 108 // ajouter le fichier svn.revision 109 $rev = $dsource . "/svn.revision"; 110 $vcs("info", "$dsource > $rev"); 111 $info = renseigner_revision_paquet($rev); 112 $zip = $paquet['nom'] .".zip"; 113 $zippath = $dir_paq.$zip; 114 if (!paqueter($dsource, $zip, $zippath, $paquet['nom_dossier'], $info, $dir_tmp)) 115 return false; 116 // copier le svn.revision de stable/spip.zip qui permet de connaitre la derniere version stable 117 if ($zip=="stable/spip.zip") { 118 // necessaire de remettre le fichier a la date actuelle 119 // car il a la date du dernier commit sur ce paquet 120 # touch($dsource."/svn.revision"); 121 copie_update($rev,$dir_paq.dirname($zip)."/svn.revision"); 122 } 123 // supprimer le fichier info revision cree ci-dessus 124 @unlink($rev); 125 // Recuperer le xml qui decrit le plugin 126 $f = $dsource . '/' . $xml ; 127 if (!file_exists($f)) { 128 echo_trace("(info) Paquet $zip sans $xml"); 129 $desc = ''; 130 } else { 131 $re = ",<"."\?xml[^>]*\?".">,Uims"; 132 $desc = trim(preg_replace($re,'',file_get_contents($f))); 133 } 134 135 return array( 136 filesize($zippath), 137 filemtime($zippath), 138 $paquet['source'], 139 $info[1], 140 $desc); 141 } 142 168 143 function empaqueteur_mail($erreurs, $mail_to, $mail_from) 169 144 { … … 312 287 if (strtotime($date_commit)<$date_paquet AND !_FORCE_UPDATE) { 313 288 echo_trace("$zip OK : du ".date('Y-m-d H:i:s',$date_paquet)." / dernier commit du $date_commit"); 289 return true; 314 290 } 315 291 else { 316 preparer_chemin($dir_tmp.$nom_dossier); 317 if (!rename($source,$dir_tmp.$nom_dossier)) { 318 echo_trace("Erreur: impossible de renommer $source"); 292 $tmp = $dir_tmp.$nom_dossier; 293 preparer_chemin($tmp); 294 if (!rename($source,$tmp)) { 295 echo_trace("Erreur : $source --> $tmp"); 296 return false; 319 297 } else { 320 298 $d = getcwd(); … … 333 311 touch($dir_tmp.$zipfile,strtotime($date_commit)+1); 334 312 } 335 336 rename($dir_tmp.$nom_dossier,$source); 313 rename($tmp,$source); 337 314 } 338 315 supprimer_chemin($dir_tmp,$nom_dossier); 339 316 copie_update($dir_tmp.$zipfile,$zippath); 317 return true; 340 318 } 341 319 } … … 385 363 if (strlen($lignepaquet)) { 386 364 if (substr($lignepaquet,0,1)!="#") { 387 // C'est une ligne de fefinition d'un paquet :365 // C'est une ligne de definition d'un paquet : 388 366 // - on separe les parametres 389 367 // - et on fixe ceux manquants … … 395 373 $nom_dossier = empty($a[2]) ? $nom_paquet : $a[2]; 396 374 // Ajout au tableau des paquets a construire 397 $paquets[] = array('source'=>$source,'nom'=>$nom_paquet,'nom_dossier'=>$nom_dossier,'revision'=>$svn_version); 375 $paquets[] = array('source'=>rtrim($source,'/'), 376 'nom'=>$nom_paquet, 377 'nom_dossier'=>$nom_dossier, 378 'revision'=>$svn_version); 398 379 } 399 380 else if (preg_match('#@([^=\s]+)\s*=(.+)$#', substr($lignepaquet, 1), $matches)){
Note: See TracChangeset
for help on using the changeset viewer.