Improved dump_gui_apps

This commit is contained in:
Denis Silakov 2013-08-20 18:23:06 +04:00
parent 97c569533a
commit f07b1f067a

View file

@ -1,45 +1,150 @@
#!/usr/bin/perl
use YAML::Syck;
use XML::Simple;
$media_info_dir = $ARGV[0];
if( ! -d $media_info_dir ) {
if (@ARGV == 0) {
die "Usage: $0 <media_info_path>\n the path must exist and be a directory";
}
@gui_groups = (
"Graphical desktop",
"Graphics"
my %gui_groups = (
"Graphical desktop" => 1,
"Graphics" => 1
);
$grep_regex = "";
foreach my $grp (@gui_groups) {
$grep_regex.= "\\|" if $grep_regex;
$grep_regex.= "^\@info\@.*\@".$grp;
}
%group_to_categories = (
"Games/Adventure" => "games",
"Games/Arcade" => "games",
"Games/Boards" => "games",
"Games/Cards" => "games",
"Games/Other" => "games",
"Games/Puzzles" => "games",
"Games/Sports" => "games",
"Games/Strategy" => "games",
"Toys" => "games",
$synt_file = $media_info_dir."/synthesis.hdlist.cz";
"Editors" => "office",
"Office" => "office",
"Publishing" => "office",
"Text tools" => "office",
open( SYNT, "zcat $synt_file | grep '$grep_regex' | " );
while(<SYNT>) {
if( /\@info\@([^@]+)\@[^@]+\@[^@]+\@([^@]+)/ ) {
my $fullname = $1;
my $pkgname = "";
if( $fullname =~ /src.rpm$/ ) {
$pkgname = `echo $fullname | rev | cut -f3- -d- | rev`;
}
else {
$pkgname = `echo $fullname | rev | cut -f4- -d- | rev`;
}
chomp $pkgname;
$apps{$pkgname} = $2;
"Sound" => "audio and video",
"Video" => "audio and video",
"Development/C" => "development",
"Development/C++" => "development",
"Development/Databases" => "development",
"Development/Debug" => "development",
"Development/GNOME and GTK+" => "development",
"Development/Java" => "development",
"Development/KDE and Qt" => "development",
"Development/Kernel" => "development",
"Development/Other" => "development",
"Development/Perl" => "development",
"Development/PHP" => "development",
"Development/Python" => "development",
"Development/Ruby" => "development",
"Development/X11" => "development",
"Communications" => "internet",
"Networking/Chat" => "internet",
"Networking/File transfer" => "internet",
"Networking/IRC" => "internet",
"Networking/Instant messaging" => "internet",
"Networking/Mail" => "internet",
"Networking/News" => "internet",
"Networking/Other" => "internet",
"Networking/Remote access" => "internet",
"Networking/WWW" => "internet"
);
#$grep_regex = "";
#foreach my $grp (@gui_groups) {
# $grep_regex.= "\\|" if $grep_regex;
# $grep_regex.= "^\@info\@.*\@".$grp;
#}
my $ignore_pkgs_regex = "\\-debuginfo\\|\\-devel";
foreach my $media_info_dir (@ARGV) {
if( ! -d $media_info_dir ) {
warn "Skipping $media_info_dir, doesn't seem to be a readable directory";
next;
}
chomp;
$synt_file = $media_info_dir."/synthesis.hdlist.cz";
if( ! -e $synt_file ) {
warn "Skipping $media_info_dir, failed to find synthesis.hdlist.cz there";
next;
}
$info_file = $media_info_dir."/info.xml.lzma";
if( ! -e $info_file ) {
warn "$media_info_dir doesn't contain info.xml, package descriptions will be missing";
%pkgs_info = ();
}
else {
system("cp $info_file .");
system("rm -f info.xml");
system("lzma -d info.xml.lzma");
$pkgs_info = XML::Simple->new()->XMLin("info.xml");
foreach $pkg_info (@{$pkgs_info->{info}}) {
my %pkg = %{$pkg_info};
$fullname = $pkg{fn};
if( $pkg{fn} =~ /src$/ ) {
$pkgname = `echo $fullname | rev | cut -f3- -d- | rev`;
}
else {
$pkgname = `echo $fullname | rev | cut -f4- -d- | rev`;
}
chomp $pkgname;
$pkg_desc{$pkgname} = $pkg{content};
}
}
# open( SYNT, "zcat $synt_file | grep '$grep_regex' | " );
open( SYNT, "zcat $synt_file | grep '^\@info\@' | grep -v '$ignore_pkgs_regex' |" );
while(<SYNT>) {
if( /\@info\@([^@]+)\@[^@]+\@[^@]+\@([^@]+)/ ) {
my $fullname = $1;
my $group = $2;
my $pkgname = "";
if( $fullname =~ /src.rpm$/ ) {
$pkgname = `echo $fullname | rev | cut -f3- -d- | rev`;
}
else {
$pkgname = `echo $fullname | rev | cut -f4- -d- | rev`;
}
chomp $pkgname;
my $category = defined($group_to_categories{$group}) ? $group_to_categories{$group} : "other";
$apps{applications}{$pkgname}{category} = $category;
my $desc = defined($pkg_desc{$pkgname}) ? $pkg_desc{$pkgname} : "";
$apps{applications}{$pkgname}{description} = $desc;
if (defined($gui_groups{$group})) {
$apps{applications}{$pkgname}{gui} = "true";
}
else {
$apps{applications}{$pkgname}{gui} = "false";
}
}
chomp;
}
my $gui_file = $media_info_dir."/gui_pkgs.yml";
open F, "> $gui_file";
print F YAML::Syck::Dump( \%apps );
close F;
system ("rm -f ".$gui_file.".xz");
system ("xz $gui_file");
}
my $gui_file = $media_info_dir."/gui_pkgs.yml";
open F, "> $gui_file";
print F YAML::Syck::Dump( \%apps );
close F;