# [SCRIPT RUBY] Gérez vos paquets  *-9999.ebuild !

## man in the hill

Salut   :Very Happy: , 

Ayant qques paquets marquée 9999 (cvs, svn , git)  à gérer, j'ai crée un petit script en ruby pour récupérer les noms de ces paquets grâce aux ebuilds se trouvant dans un répertoire (et ses sous répertoires)  donnés ( le mien est : /usr/local/overlays ou je gère trois overlays mais chacun indique  le répertoire de son choix afin que le script soit plus rapide ...), enlever les doublons , et les présenter à portage avec l'option -av que vous pouvez désactiver avec l'option -s !...  

I.) Code Source

_-_ Ce script s'appelle : kmikaze  (** pour ceux qui aiment prendre des risques en installant des paquets cvs, svn, git   :Cool:  ) 

_-_ Le Code

```

#!/usr/bin/ruby   -w

###  Distributed under the terms of the GNU General Public License v2

#

###  kmikaze comes with ABSOLUTELY  NO WARRANTY ..!

#

###  Author :   Man in the Hill .

#

###  Mes respects à  Mr Professor X  !

   

# == Synopsis ==

#

# Recherche de fichiers ebuild cvs,svn,git dans un répertoire (et sous répertoires) de façon itérative !

# Lancez kmikaze et deux petites questions vont être posées une fois pour toutes ... 

#

# == Usage ==

#

# kmikaze [OPTION]

#

# -n, --nouveau :

# Redéfinir un nouveau répertoire par défaut .

#

# -s, --sans-av :

# Lancer l'emerge sans -av .

   

require  'getoptlong'   

require  'fileutils'

require  'pstore'

include   FileUtils

   

class Ebuild

   def initialize()

      

      @marge = 76

   

   end

   

   

   def cvssvngit()

   

   

   # Récuperez sous forme de tableau les fichiers contenant le motif "-9999.ebuild" .

   tab_ebuild = %x( ls -R )::grep(/-9999.ebuild$/)::uniq

   

   # Nom du fichier ou les noms des paquets serront écris !

   $temp_9999 = "/tmp/emerge_9999"

   

   # Création et ouverture du fichier en écriture !

   begin

   nouveau_fichier = File::open("#{$temp_9999}",'w')

   

   rescue SystemCallError

   $stderr.puts "Une erreur c'est produite ! Désolé !!!"

   ensure

        

   # Traitement du tableau ...

   tab_ebuild.each { |i|

      

      # Enlevez le "\n" ! 

      fichier_avec_ext_ebuild = i.chomp 

      

      # récupérer l'extension ".ebuild" ! 

      ext_ebuild = File::extname(fichier_avec_ext_ebuild)

      

      # Enlevez l'extension ".ebuild" ! 

      fichier_sans_ext_ebuild = File::basename(fichier_avec_ext_ebuild, ext_ebuild)

      

      # Enlevez le numéro de version "9999" + le tiret "-" . ! 

      # et écrire les nom des paquets dans le fichier !

      nouveau_fichier.puts((fichier_sans_ext_ebuild.split(/\d/).to_s.sub(/[-]$/,'')) + ' ')

      }

      

      # Fermez le fichier !

      nouveau_fichier.close

      end

   end

   

   

   def  avecousansav(avecousansav)

      

      # Update par le gestionnaire de paquets de gentoo Gnu/Linux !

      puts system("emerge  #{avecousansav} $(< #{$temp_9999})") 

   

      # Effacer le fichier  "/tmp/emerge_9999" !

      

      puts "********************* Fichier                   effacé ! *********************"

      puts(                                            rm("#{$temp_9999}").to_s.center(@marge)                           )                                

      puts "******************************************************************************"

      puts "\n@ Bientôt\n\n"

       exit

   end

   

   

   

   def   donotexist()

      

      

      # Demandez à l'utilisateur de rentrer le répertoire racine des overlays ... 

      puts "*****************************************************"

      puts "Rentrez le chemin du répertoire gérant vos overlays :\n"

      puts "*****************************************************\n\n"

      $rep_parent = $stdin::gets.chomp

   

      

      # Sauvegardez le répertoire par défault ...

      puts "\n***************************************************"

      puts "Voulez-vous garder ce répertoire par défault !:[Y/n]\n"

      puts "****************************************************\n\n"

      

      $choix_default = $stdin::gets.chomp

   

      

      stocker

      

      # Se placer dans le répertoire de travail ..

      Dir::chdir("#{$rep_parent}")

   

      # L'objet "e_9999" appelle la méthode "cvssvngit" !

      $e_9999::cvssvngit()

      

      # 'objet 'e_9999" appelle ensuite la methode "avecousansav" !

      $e_9999::avecousansav("-av")

   

   end

   def   stocker()

      

      # Stocker le chemin du répertoire ...

      $rep_overlay = "#{$rep_parent}"

      store = PStore.new("/tmp/kmikaze.default")

      store.transaction {

         store["memo"] = $rep_overlay 

         }

      

      # Stocker .. le choix "Y" or "n" ...

      $choix = "#{$choix_default}"

      store = PStore.new("/tmp/kmikaze.default")

      store.transaction {

         store["memoire"] = $choix

         }

      

   end

   

   def  charge()

      

      # Vérification de l'existence du répertoire par défaut ...

      store = PStore.new("/tmp/kmikaze.default") 

      $rep_overlay = nil 

      store.transaction{$rep_overlay = store["memo"]}

      

      # Vérification  du choix par défaut ...

      store = PStore.new("/tmp/kmikaze.default") 

      $choix = nil 

      store.transaction{$choix = store["memoire"]}

         

   end

   public :cvssvngit, :donotexist, :stocker, :charge, :avecousansav

end      

      

      

       

                                                          

                            

                            

                            

                            

                            

                            

                            

                            # KMIKAZE #

      

       

      

      

      

      

      # Connaître l'uid de l'utilisateur !

      quiestla = Process::uid

      

   if    quiestla != 0

   

      puts "\nVous devez être le root pour utiliser ce script ! Merci .\n\n"

   exit

   end

   

      

      # What Time is it ?

      

      t= Time.now.asctime

      puts "\n#{t}\n\n"

      

      

      # Création de l'objet "e_9999" !

      $e_9999 = Ebuild.new()

   

      # Passer un argument pour redéfinir le répertoire par défaut ...

      opts = GetoptLong::new(['--help', '-h', GetoptLong::NO_ARGUMENT],

                     ['--nouveau', '-n', GetoptLong::NO_ARGUMENT],

                     ['--sans-av', '-s', GetoptLong::NO_ARGUMENT])

      

      # Traitement des options ...

      opts.each do |opt, arg|

      

   case  opt

      

      

      when  "--help", "-h"

      puts "\n== Synopsis ==\n"

      puts "\nRecherche de fichiers ebuild cvs,svn,git dans un répertoire (et sous répertoires) de façon itérative !\n"

      puts "\nLancez kmikaze et deux petites questions vont être posées une fois pour toutes ...\n"

      puts "\n== Usage ==\n"

      puts "\nkmikaze [OPTION]\n "

      puts "\n-n, --nouveau :\n"

      puts "\nRedéfinir un nouveau répertoire par défaut.\n"

      puts "\n-s, --sans-av :\n"

      puts "\nLancer l'emerge sans -av.\n"

      puts "\n== Fin ==\n\n"

   

      exit

      

      when  "--nouveau", "-n"  

      

      # Appelle de la methode "donotexist" !

      $e_9999::donotexist()

         

   

      when "--sans-av", "-s"

      

      # test de fichier pour récupérer le répertoire ...

      $e_9999::charge

      

      # Se placer dans le répertoire de travail ...

      Dir::chdir("#{$rep_overlay}")

      

      # Appelle de la methode "cvssvngit" !

      $e_9999::cvssvngit()

      

      # Appelle de la methode "avecousansav" !

      $e_9999::avecousansav("-v")

      

      else 

      puts "\nAffichez l'aide avec les options --help ou -h, svp ! Merci !..\n\n"

      end

   

   end

      

      

      

      # Vérifier les fichiers "/tmp/kmikaze.default" et  "/tmp/kmikaze.pstore" ....

      $e_9999::charge 

      

      case  $choix.downcase! 

      

   when   "y", "yes"

      

      # Se placer dans le répertoire de travail ...

      Dir::chdir("#{$rep_overlay}")

      

      # "e_9999" appelle le methode "cvssvngit" ...

      $e_9999::cvssvngit()

      

      # "e_9999" appelle "avecousansav" !

      $e_9999::avecousansav("-av")

   

   when  "n", "non", "no",  ""

      

      # "e_9999" appelle le methode "donotexist" ...

      $e_9999::donotexist()

   

   when  nil

      

      # "e_9999" appelle le methode "donotexist" ...

      $e_9999::donotexist()

      

   else

      puts "\nUne erreur c'est produite ! Désolé ! Affichez l'aide avec les options --help ou -h, svp .\n\n"

   end

exit
```

III.) ChangeLog

_-_ Mardi 12 Septembre 2006 : Petite modification formelle en enlevant des puts "" inutile !

_-_ Lundi 11 Septembre 2006 : Ajout de l'option d'aide -h ...

_-_ Dimanche 10 Septembre 2006 :  Ajout de la sauvegarde du répertoire par défaut et des options -n pour redéfinir le répertoire par défaut, -s pour activer l'emerge automatique ...

IV.) Installation et utilisation

a.) Copier/Coller dans vôtre éditeur ensuite rendez le exécutable :

```
chmod +x kmikaze
```

 ...

b.) Mettez le ds un répertoire du PATH , 

par ex : /usr/bin :

```
mv kmikaze  /usr/bin
```

ou placez vous dans le répertoire ou se trouve le script et lancé le avec cette commande :

```
./kmikaze
```

c.) Au premier lancement en root, bien sûr, kmikaze vous demandera de choisir un répertoire par défaut qu'il va sauvegarder ! Si vous voulez le changer par la suite, vous appellez kmikaze avec l'option --nouveau ou -n et vous pourrez ainsi lui indiquer un nouveau répertoire ! Après avoir choisi un répertoire par défaut,  Vous pouvez utiliser l'option --sans-av ou -s pour activer l'emerge automatique et enfin l'option --help ou -h pour afficher l'aide .  Ce script est transparent et crée un fichier /tmp/kmikaze.default pour sauvegarder vos choix !...

d.) Si vous voulez apprendre RUBY qui est un superbe langage orienté objet ! Vous pouvez posez toutes vos questions à Professor X qui se fera un plaisir de vous répondre http://www.forum.moteurprog.com/forum.php?PAGE=1&ID_Forum=21 ! J'ai aussi rassemblé un maximum de liens sur RUBY sur le site en signature, section programmation (ressources programmations) 

Enjoy !

                                                                                   @ +

----------

