Changeset 109683 in spip-zone


Ignore:
Timestamp:
Mar 25, 2018, 8:57:43 PM (16 months ago)
Author:
rastapopoulos@…
Message:

Voilà un premier jet qui gère branches + tags déjà pour la commande Télécharger. On peut faire :

spip dl
=> télécharge la dernière release stable (dernier tag pas alpha, beta etc)

spip dl --branche
spip dl -b
=> télécharge la dernière branche de maintenance

spip dl --release 3.2.1
spip dl -r 3.2.1
=> télécharge cette version précise

spip dl --release 3
spip dl --release 3.*
spip dl --release 3.1
spip dl --release 3.1.*
pareil avec -r
=> télécharge la dernière release stable de toute cette branche de X ou de X.Y

spip dl --branche 3
spip dl --branche 3.*
=> télécharge la dernière branche maintenue de toute cette branche de X

Location:
_outils_/spip-cli/trunk/spip-cli
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _outils_/spip-cli/trunk/spip-cli/CoreListerVersions.php

    r109680 r109683  
    7878               
    7979                if ($xy) {
    80                         $masque = "/$xy.\d+$/";
     80                        $masque = "/^$xy\.\d+$/";
    8181                }
    8282                else {
    83                         $masque = '/\d+\.\d+\.\d+$/';
     83                        $masque = '/^\d+\.\d+\.\d+$/';
    8484                }
    8585               
     
    102102               
    103103                if ($x) {
    104                         $masque = "/$x.\d+$/";
     104                        $masque = "/^$x.\d+$/";
    105105                }
    106106                else {
    107                         $masque = '/\d+\.\d+$/';
     107                        $masque = '/^\d+\.\d+$/';
    108108                }
    109109               
     
    163163               
    164164                foreach ($temp as $dossier) {
    165                         if ($cle = preg_replace('|(spip-)?(.*?)(-stable)?/?|i', '$2', $dossier)) {
     165                        if ($cle = preg_replace('|(spip-)?(.*?)/?|i', '$2', $dossier)) {
    166166                                $liste[$cle] = "{$this->chemin_svn_racine}/$type/$dossier";
    167167                        }
  • _outils_/spip-cli/trunk/spip-cli/CoreTelecharger.php

    r109675 r109683  
    1616                                'b',
    1717                                InputOption::VALUE_OPTIONAL,
    18                                 'Donner explicitement la version à télécharger.',
    19                                 '3.2' // Par défaut, la dernière version stable
     18                                'Donner explicitement la branche de maintenance à télécharger ou le dernier numéro majeur (X.Y ou X).'
     19                        )
     20                        ->addOption(
     21                                'release',
     22                                'r',
     23                                InputOption::VALUE_OPTIONAL,
     24                                'Donner explicitement la release (tag) à télécharger ou la branche où prendre la dernière release (X.Y.Z ou X.Y).'
    2025                        )
    2126                        ->setAliases(array(
     
    3237                $versions = $lister_versions->get_versions();
    3338               
    34                 // Liste des branches acceptées
    35                 $branches_ok = $versions['branches'];
    36                 // Branche séléctionnée
    37                 $branche = $input->getOption('branche');
    38                
    3939                // On vérifie qu'on est pas déjà dans une installation de SPIP !
    4040                if ($GLOBALS['spip_loaded']) {
    4141                        $output->writeln('<info>Vous êtes déjà dans une installation de SPIP '.$GLOBALS['spip_version_branche'].'.</info> <comment>Téléchargement annulé.</comment>');
    4242                }
     43                // On teste si on peut utiliser "passthru"
     44                elseif (!function_exists('passthru')){
     45                        $output->writeln("<error>Votre installation de PHP doit pouvoir exécuter des commandes externes avec la fonction passthru().</error>");
     46                }
    4347                // Sinon c'est bon on peut télécharger SPIP
    4448                else {
    45                         // On vérifie que l'on connait la version
    46                         if (!in_array($branche, array_keys($branches_ok))){
    47                                 $output->writeln(array(
    48                                         "<error>La version \"$branche\" n'est pas prise en charge.</error>",
    49                                         'Branches supportées : <info>'.join('</info>, <info>', array_keys($branches_ok)).'</info>'
    50                                 ));
     49                        // On détermine quelle version on doit télécharger
     50                        $url = null;
     51                        $mode = 'release';
     52                       
     53                        // S'il y a une release demandée, c'est prioritaire
     54                        if ($input->hasParameterOption(array('--release', '-r'))) {
     55                                // S'il y a une release précise demandée
     56                                if ($version = $demande = $input->getOption('release')) {
     57                                        // Si la version pile exacte existe
     58                                        if (isset($versions['tags'][$demande])) {
     59                                                $url = $versions['tags'][$demande];
     60                                        }
     61                                        // Sinon on cherche le plus récent approchant
     62                                        elseif ($version = $lister_versions->get_last_release($demande)) {
     63                                                $url = $versions['tags'][$version];
     64                                        }
     65                                        // Sinon le truc demandé n'existe pas
     66                                        else {
     67                                                $output->writeln(array(
     68                                                        "<error>La version \"{$demande}\" n'est pas prise en charge.</error>",
     69                                                        'Releases supportées : <info>'.join('</info>, <info>', array_keys($versions['tags'])).'</info>'
     70                                                ));
     71                                        }
     72                                }
     73                                // Sinon la dernière parmi toutes les releases
     74                                else {
     75                                        $version = $lister_versions->get_last_release();
     76                                        $url = $versions['tags'][$version];
     77                                }
    5178                        }
    52                         // Si c'est bon, on teste si on peut utiliser "passthru"
    53                         elseif (!function_exists('passthru')){
    54                                 $output->writeln("<error>Votre installation de PHP doit pouvoir exécuter des commandes externes avec la fonction passthru().</error>");
     79                        // Sinon s'il y a une branche demandée
     80                        elseif ($input->hasParameterOption(array('--branche', '-b'))) {
     81                                $mode = 'branche';
     82                               
     83                                // S'il y a une branche précise demandée
     84                                if ($version = $demande = $input->getOption('branche')) {
     85                                        // Si la version pile exacte existe
     86                                        if (isset($versions['branches'][$demande])) {
     87                                                $url = $versions['branches'][$demande];
     88                                        }
     89                                        // Sinon on cherche le plus récent approchant
     90                                        elseif ($version = $lister_versions->get_last_branche($demande)) {
     91                                                $url = $versions['branches'][$version];
     92                                        }
     93                                        else {
     94                                                $output->writeln(array(
     95                                                        "<error>La version \"{$demande}\" n'est pas prise en charge.</error>",
     96                                                        'Branches supportées : <info>'.join('</info>, <info>', array_keys($versions['branches'])).'</info>'
     97                                                ));
     98                                        }
     99                                }
     100                                // Sinon la dernière parmi toutes les branches
     101                                else {
     102                                        $version = $lister_versions->get_last_branche();
     103                                        $url = $versions['branches'][$version];
     104                                }
    55105                        }
    56                         // Si c'est bon on continue
    57                         else{
    58                                 $output->writeln("<info>C'est parti pour le téléchargement de la branche $branche !</info>");
     106                        // Sinon on prend la dernière release stable
     107                        else {
     108                                $version = $lister_versions->get_last_release();
     109                                $url = $versions['tags'][$version];
     110                        }
     111                       
     112                        if ($url) {
     113                                $output->writeln("<info>C'est parti pour le téléchargement de la $mode $version !</info>");
    59114                       
    60115                                // On lance la commande SVN dans le répertoire courant
    61                                 passthru('svn co '.$branches_ok[$branche].' .');
     116                                passthru("svn co $url .");
    62117                        }
    63118                }
Note: See TracChangeset for help on using the changeset viewer.