mirror of
https://abf.rosa.ru/djam/rpmtools.git
synced 2025-02-23 19:02:49 +00:00
Improved dump_gui_apps
This commit is contained in:
parent
97c569533a
commit
f07b1f067a
1 changed files with 137 additions and 32 deletions
169
dump_gui_apps
169
dump_gui_apps
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue