Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[SCRIPT RUBY] Gérez vos paquets *-9999.ebuild !
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Fri Sep 08, 2006 5:12 pm    Post subject: [SCRIPT RUBY] Gérez vos paquets *-9999.ebuild ! Reply with quote

Salut :D,

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 8) )


_-_ Le Code

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 :
Code:
chmod +x kmikaze
...


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

par ex : /usr/bin :
Code:
mv kmikaze  /usr/bin

ou placez vous dans le répertoire ou se trouve le script et lancé le avec cette commande :
Code:
./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 !


@ +
_________________
Get Up and Go !
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum