man in the hill Veteran
Joined: 15 Dec 2005 Posts: 1552 Location: Madinina
|
Posted: Fri Sep 08, 2006 5:12 pm Post subject: [SCRIPT RUBY] Gérez vos paquets *-9999.ebuild ! |
|
|
Salut ,
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 )
_-_ 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 :
...
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 :
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 ! |
|