View previous topic :: View next topic |
Author |
Message |
man in the hill Veteran
Joined: 15 Dec 2005 Posts: 1552 Location: Madinina
|
Posted: Mon Sep 11, 2006 6:16 am Post subject: [SCRIPT RUBY] Manage your packages *-9999.ebuild ! |
|
|
Hello everybody ,
Having some packages marked 9999 (cvs, svn, git) to manage, I have create a small script in ruby to recover the names of these packages thanks to the ebuilds being in a directory (and its under directory ) given (mine is: /usr/local/overlays or I manage three overlays but each one indicates the directory of its choice so that the script is faster...), to remove duplicate packages, and to present them to emerge with the option -av but you can disable it with the option -w ...
I.) Source Code
_-_ The script name's : kmikaze (** for those which like to take risks by installing packages cvs, svn, git )
_-_ This 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 .
#
### Great thanks to Mr Professor X !
# == Synopsis
#
# Search for files ebuild cvs, svn, git in a directory (and under directories) in an iterative way !
# Launch kmikaze and two small questions will be asked once and for all...
#
# == Usage
#
# kmikaze [OPTION]
#
# -n, --new :
# To redefine a new directory by default .
#
# -w, --without-av :
# Launch emerge without -av .
require 'getoptlong'
require 'fileutils'
require 'pstore'
include FileUtils
class Ebuild
def initialize()
@marge = 70
end
def cvssvngit()
# Check in the form of table files containing motif "-9999.ebuild" .
tab_ebuild = %x( ls -R )::grep(/-9999.ebuild$/)::uniq
# Name of the file or the names of the packages will be write!
$temp_9999 = "/tmp/emerge_9999"
# Creation and opening of the output file !
begin
new_file = File::open("#{$temp_9999}",'w')
rescue SystemCallError
$stderr.puts "Failed ! Sorry !!!"
ensure
# Treatment of the table...
tab_ebuild.each { |i|
# Remove the "\n"!
file_with_ext_ebuild = i.chomp
# Recover the extension "ebuild"!
ext_ebuild = File::extname(file_with_ext_ebuild)
# Remove the extension "ebuild"!
file_without_ext_ebuild = File::basename(file_with_ext_ebuild, ext_ebuild)
# Remove the number of version "9999" + the indent "-". !
# and to write the name of the packages in the file!
new_file.puts((file_without_ext_ebuild.split(/\d/).to_s.sub(/[-]$/,'')) + ' ')
}
# Close the file !
new_file.close
end
end
def withorwithoutav(withorwithoutav)
# Update by the manager of packages of gentoo Gnu/Linux !
puts system("emerge #{withorwithoutav} $(< #{$temp_9999})")
# Remove the file "/tmp/emerge_9999" !
puts "********************* File removed ! *********************"
puts( rm("#{$temp_9999}").to_s.center(@marge) )
puts "****************************************************************************"
puts "\nGood Bye !\n\n"
exit
end
def donotexist()
# Ask the user to enter the root directory of the overlays ...
puts"*******************************************************"
puts "Enter the way of the directory managing your overlays :"
puts "*******************************************************\n\n"
$dir_parent = $stdin::gets.chomp
# Save the default directory ...
puts "\n*************************************************"
puts "Want you to keep this directory by default!:[Y/n]"
puts "*************************************************\n\n"
$choice_default = $stdin::gets.chomp
stocker
# Move to the working directory ...
Dir::chdir("#{$dir_parent}")
# The object "e_9999" calls the method "cvssvngit" !
$e_9999::cvssvngit()
# The object "e_9999" calls the method "avecousansav" !
$e_9999::withorwithoutav("-av")
end
def stocker()
# Store the way of the directory ...
$dir_overlay = "#{$dir_parent}"
store = PStore.new("/tmp/kmikaze.default")
store.transaction {
store["memo"] = $dir_overlay
}
# Store .. the choice "Y" or "n" ...
$choice = "#{$choice_default}"
store = PStore.new("/tmp/kmikaze.default")
store.transaction {
store["memoire"] = $choice
}
end
def charge()
# Checking of the existence of the directory by default ...
store = PStore.new("/tmp/kmikaze.default")
$dir_overlay = nil
store.transaction{$dir_overlay = store["memo"]}
# Checking of the choice by default ...
store = PStore.new("/tmp/kmikaze.default")
$choice = nil
store.transaction{$choice = store["memoire"]}
end
public :cvssvngit, :donotexist, :stocker, :charge, :withorwithoutav
end
# KMIKAZE #
# Know the user uid !
whoisit = Process::uid
if whoisit != 0
puts "\nYou must be the root to use this script ! Thank you .\n\n"
exit
end
# What Time is it ?
t= Time.now.asctime
puts "\n#{t}\n\n"
# Creation of the objet "e_9999" !
$e_9999 = Ebuild.new()
# Pass an argument to redefine the directory by default and remove the option -av to emerge ...
opts = GetoptLong::new(['--help','-h', GetoptLong::NO_ARGUMENT],
['--new', '-n', GetoptLong::NO_ARGUMENT],
['--without-av', '-w', GetoptLong::NO_ARGUMENT])
# Treatment of the options ...
opts.each do |opt, arg|
case opt
when "--help", "-h"
puts"\n== Synopsis ==\n"
puts "\nSearch for files ebuild cvs, svn, git in a directory (and under directories) in an iterative way !\n"
puts "\nLaunch kmikaze and two small questions will be asked once and for all ...\n"
puts "\n== Usage ==\n"
puts "\nkmikaze [OPTION]\n"
puts "\n-n, --new :\n"
puts "\nTo redefine a new directory by default.\n"
puts "\n-w, --without-av :\n"
puts "\nLaunch emerge without -av.\n"
puts "\n== End ==\n\n"
exit
when "--new", "-n"
# Call method "donotexist" !
$e_9999::donotexist()
when "--without-av", "-w"
# Test of file to recover the directory ...
$e_9999::charge
# Move to the working directory ...
Dir::chdir("#{$dir_overlay}")
# Call method "cvssvngit" !
$e_9999::cvssvngit()
# Call method "withorwithoutav" !
$e_9999::withorwithoutav("-v")
else
puts "\nTry --help or -h , please ! Thank you !..\n\n"
end
end
# Checking the file "/tmp/kmikaze.default" ....
$e_9999::charge
case $choice.downcase!
when "y", "yes"
# Move to the working directory ...
Dir::chdir("#{$dir_overlay}")
# "e_9999" calls the method "cvssvngit" ...
$e_9999::cvssvngit()
# "e_9999" calls the method "avecousansav" !
$e_9999::withorwithoutav("-av")
when "n", "no", ""
# "e_9999" calls method "donotexist" ...
$e_9999::donotexist()
when nil
# "e_9999" calls methode"donotexist" ...
$e_9999::donotexist()
else
puts "\nFailed ! Sorry ! Try --help or -h, please .\n\n"
end
exit |
II.) Installation and usage
a.) Copy it into your text edit and do it executable :
b.) Put it in a directory of the PATH ,
example : /usr/bin :
Code: | mv kmikaze /usr/bin |
or
go to the same dirctory of the script and launch it with this command line :
c.) With the first launching in root, of course, kmikaze tell you to choice a default directory that it will save ! After, if you want to change it , you call kmikaze with options --new or -n and you will be able to indicate a new repertory to him ! After having chosen a directory by default, you can use the option --without-av or -w for enable automatique emerge (without -av) and finally option --help or -h for help. This script is transparent and creates a file /tmp/kmikaze.default for save your choice !... I hope that this script will be useful for you ...
Enjoy !
Bye .
ps : I have write this script for the french forum at the first time and now it for you ... _________________ Get Up and Go !
Last edited by man in the hill on Wed Sep 13, 2006 1:19 am; edited 3 times in total |
|
Back to top |
|
|
ChrisWhite Retired Dev
Joined: 08 Jul 2004 Posts: 399 Location: Stockton, CA
|
Posted: Tue Sep 12, 2006 5:26 am Post subject: |
|
|
tab_ebuild = %x( ls -R )::grep(/-9999.ebuild$/)::uniq
well, considering the format of portage overlays, you could do this:
tab_ebuild = %x( ls */*/*9999.ebuild)
not sure about the uniq. This however assumes the directory structure of
current_directory/category/package/whatever-9999.ebuild |
|
Back to top |
|
|
Meqif Tux's lil' helper
Joined: 09 Mar 2003 Posts: 103 Location: Portugal
|
Posted: Tue Sep 12, 2006 4:10 pm Post subject: |
|
|
Nice script.
Two suggestions:
1) Get rid of all those 'puts ""'. It's ugly. Use '\n' instead. I understand you may want to have the same look in both the source and the output, but it doesn't look nice, imho.
2) You could use
Code: | case $choice.downcase!
when "y", "yes"
...
when "n", "no", ""
|
instead of:
Code: | case $choice
when "Y", "Yes", "YEs", "YES", "yes", "yEs", "yES", "y"
...
when "n", "no", "nO", "N", "No", "NO", "" |
It's a lot cleaner and does the same job. One may argue against downcase! because it replaces in place. Use downcase if you're concerned, I think in this case it's not relevant.
Keep up the good job! |
|
Back to top |
|
|
man in the hill Veteran
Joined: 15 Dec 2005 Posts: 1552 Location: Madinina
|
Posted: Tue Sep 12, 2006 8:58 pm Post subject: |
|
|
ChrisWhite wrote: | tab_ebuild = %x( ls -R )::grep(/-9999.ebuild$/)::uniq
well, considering the format of portage overlays, you could do this:
tab_ebuild = %x( ls */*/*9999.ebuild)
not sure about the uniq. This however assumes the directory structure of
current_directory/category/package/whatever-9999.ebuild |
Hello,
Well I understand, but the goal is to manage differents portage overlays with their own "current_directory" (like me :
Code: |
crazy_gentoo %
kmikaze
Tue Sep 12 16:14:12 2006
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild R ] media-video/mplayer-9999 USE="(-3dfx) (-3dnow) (-3dnowext) X aac aalib alsa (-altivec) -amr -arts bidi -bindist -bl cdparanoia -cpudetection -custom-cflags -debug -dga -directfb -doc dts dv -dvb dvd dvdread -enca encode esd -fbcon -ggi gif gtk iconv ipv6 -jack joystick jpeg libcaca -lirc live -livecd -lzo mad -matrox (-mmx) (-mmxext) -musepack -nas -openal opengl oss png (-real) -rtc -samba sdl -speex (-sse) (-sse2) (-svga) -tga theora truetype -unicode -v4l -v4l2 vorbis (-win32codecs) -x264 -xanim -xinerama xmms xv xvid -xvmc" 0 kB [2]
[ebuild R ] net-misc/wget-9999 USE="-build -debug ipv6 nls -socks5 ssl -static" 0 kB [2]
[ebuild R ] x11-misc/cgwd-themes-9999 0 kB [1]
[ebuild R ] x11-misc/cgwd-themes-extra-0.3 0 kB [1]
[ebuild R ] x11-misc/compiz-manager-0.5 0 kB [1]
[ebuild R ] x11-misc/compiz-quinnstorm-plugins-0.20.1 0 kB [1]
[ebuild R ] x11-misc/csm-0.9 0 kB [1]
[ebuild R ] x11-misc/gset-compiz-9999 USE="-debug" 0 kB [1]
[ebuild R ] x11-wm/cgwd-9999 USE="-debug" 0 kB [1]
[ebuild R ] x11-wm/compiz-quinnstorm-9999 USE="-debug gnome svg" 0 kB [1]
Total size of downloads: 0 kB
Portage overlays:
[1] /usr/local/overlays/xgl-coffee
[2] /usr/local/overlays/faya-gentoo
[3] /usr/local/overlays/gkrellm-overlay
Would you like to merge these packages? [Yes/No]
| and if it is not the case, that work too ...
To Meqif:
1.) It's not ugly for me ! I will make some tests and I would see ...
2.) Good idea ! and thanks for your explanation ...
I made well write here because I did not have any suggestion in the French forum ...
I can come on the English forum to put some questions about ruby ...
Thanks a lot both !
Bye . _________________ Get Up and Go ! |
|
Back to top |
|
|
Meqif Tux's lil' helper
Joined: 09 Mar 2003 Posts: 103 Location: Portugal
|
Posted: Tue Sep 12, 2006 10:08 pm Post subject: |
|
|
man in the hill wrote: | To Meqif:
1.) It's not ugly for me ! I will make some tests and I would see ...
2.) Good idea ! and thanks for your explanation ...
I made well write here because I did not have any suggestion in the French forum ...
I can come on the English forum to put some questions about ruby ...
Thanks a lot both !
Bye . |
Heh, I'm just used to write code as cleanly and with as few lines as possible, as long as I don't obfuscate the code (which I think it wouldn't in this case). Meh, a few lines more don't matter much, and each to his own.
No problem. I suggest you get the "Pickaxe" (aka "Programming Ruby - The Pragmatic Programmers' Guide") if you don't have it already. I've got the PDF version and it's quite handy. Pretty good when you're looking for a better way to do something.
Sure, there are a lot more people reading your post here than on the French subforum, which is understandable.
Cheers |
|
Back to top |
|
|
man in the hill Veteran
Joined: 15 Dec 2005 Posts: 1552 Location: Madinina
|
Posted: Tue Sep 12, 2006 11:33 pm Post subject: |
|
|
Meqif wrote: | Heh, I'm just used to write code as cleanly and with as few lines as possible, as long as I don't obfuscate the code (which I think it wouldn't in this case). Meh, a few lines more don't matter much, and each to his own. |
I understand, I also want to write a readable code ... I'm new rubiyste and I always search a style ... I will work on this side for make a compact code readable also ...
Meqif wrote: | No problem. I suggest you get the "Pickaxe" (aka "Programming Ruby - The Pragmatic Programmers' Guide") if you don't have it already. I've got the PDF version and it's quite handy. Pretty good when you're looking for a better way to do something. |
I read somes pages on ruby-doc.org ... not enouth of course !
Meqif wrote: | Sure, there are a lot more people reading your post here than on the French subforum, which is understandable.
Cheers |
This code was write in French first of all, because I'm naturaly french (from the caraïbe of course =martinique= !) after I have translate it in english and post here where there are more people ! I know them all on the French forum and there are no rubiyste !!!!!
Bye
[EDIT] I remove all puts "", that's a good idea ! While I am there, can you help me here https://forums.gentoo.org/viewtopic-t-497762.html , thanks ! [/EDIT] _________________ Get Up and Go ! |
|
Back to top |
|
|
|
|
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
|
|