Author: locilka
Date: Fri Nov 9 16:29:19 2007
New Revision: 41935
URL: http://svn.opensuse.org/viewcvs/yast?rev=41935&view=rev
Log:
- Added new gen_logic_deps script for generating dependency graphs.
- Added new gen_logic_deps_nodes script for picking up just nodes
we are interested in.
- 2.16.2
Added:
trunk/devtools/devtools/bin/gen_logic_deps (with props)
trunk/devtools/devtools/bin/gen_logic_deps_nodes (with props)
Modified:
trunk/devtools/VERSION
trunk/devtools/devtools/bin/Makefile.am
trunk/devtools/package/yast2-devtools.changes
Modified: trunk/devtools/VERSION
URL: http://svn.opensuse.org/viewcvs/yast/trunk/devtools/VERSION?rev=41935&r1=41934&r2=41935&view=diff
==============================================================================
--- trunk/devtools/VERSION (original)
+++ trunk/devtools/VERSION Fri Nov 9 16:29:19 2007
@@ -1 +1 @@
-2.16.1
+2.16.2
Modified: trunk/devtools/devtools/bin/Makefile.am
URL: http://svn.opensuse.org/viewcvs/yast/trunk/devtools/devtools/bin/Makefile.am?rev=41935&r1=41934&r2=41935&view=diff
==============================================================================
--- trunk/devtools/devtools/bin/Makefile.am (original)
+++ trunk/devtools/devtools/bin/Makefile.am Fri Nov 9 16:29:19 2007
@@ -29,7 +29,9 @@
y2makeall \
y2makepot \
check_icons \
- check_deps
+ check_deps \
+ gen_logic_deps \
+ gen_logic_deps_nodes
EXTRA_DIST = $(bin_SCRIPTS) $(ybin_SCRIPTS) $(pkgdata_SCRIPTS) version.in
Added: trunk/devtools/devtools/bin/gen_logic_deps
URL: http://svn.opensuse.org/viewcvs/yast/trunk/devtools/devtools/bin/gen_logic_deps?rev=41935&view=auto
==============================================================================
--- trunk/devtools/devtools/bin/gen_logic_deps (added)
+++ trunk/devtools/devtools/bin/gen_logic_deps Fri Nov 9 16:29:19 2007
@@ -0,0 +1,172 @@
+#!/usr/bin/perl -w
+
+#
+# ==Authors==
+# Lukas Ocilka
+#
+# ==About==
+# Script generates all logic dependencies between YaST modules.
+# It uses another script from devtools 'check_deps'.
+# This script needs to be called in the root of YaST SVN because
+# directories are used for generating RPM names.
+#
+# Script generates input file for 'dot' program (/usr/bin/dot, graphviz.rpm)
+#
+# ==Usage==
+# cd /...../source/; # copy of YaST trunk or any branch
+# /usr/share/YaST2/data/devtools/bin/gen_logic_deps [rpm_root [show_base]] > dot-in.txt
+# dot -Tpng -oGraph.png dot-in.txt
+# display Graph.png
+#
+# ==Examples==
+# * /usr/share/YaST2/data/devtools/bin/gen_logic_deps > dot-in.txt
+# - uses "/" as a default --root for RPM queries
+# - doesn't include yast2.rpm
+#
+# * /usr/share/YaST2/data/devtools/bin/gen_logic_deps / yes > dot-in.txt
+# - uses "/" as a default --root for RPM queries
+# - includes yast2.rpm in the output
+#
+# ==Output==
+# digraph "YaST RPM dependencies" {
+# [...]
+# "yast2-repair (0)" -> "yast2 (81)" [ color="black" ]
+# "yast2-repair (0)" -> "yast2-bootloader (9)" [ color="black" ]
+# "yast2-repair (0)" -> "yast2-storage (13)" [ color="black" ]
+# [...]
+# }
+#
+# And what does it mean :)?
+# * 'yast2-repair' requires 'yast2'
+# * 'yast2-repair' requires 'yast2-bootloader'
+# * 'yast2-repair' requires 'yast2-storage'
+# * 'yast2' is required by 81 YaST RPMs
+# * 'yast2-bootloader' is requierd by 9 YaST RPMs
+# * 'yast2-storage' is requierd by 13 YaST RPMs
+# * 'yast2-repair' is not required by any YaST RPM
+#
+
+# change this for debugging purpose, scripts exists after checking 'n' directories
+my $max_dirs_at_once = 9999;
+
+my $wd = `pwd`;
+chop $wd;
+warn "Working dir: '".$wd."'\n";
+
+# RPM-root, first commandline parameter or "/"
+my $root = $ARGV[0] || "/";
+
+# Show yast2.rpm-related deps, second commandline parameter, default false
+# anything == true
+$show_base = 0;
+if (defined $ARGV[1]) {
+ $show_base = 1;
+}
+
+warn "Root: ".$root."\n";
+
+$reqrpms = {};
+
+my $rpms_of_files = {};
+
+# how many times is a package required
+my $all_RPM_req = {};
+
+sub CheckDir ($) {
+ my $dir = shift;
+
+ my $RPM_deps = {};
+
+ my $lines_s = `cd $wd/$dir; /usr/share/YaST2/data/devtools/bin/check_deps . . '$root'`;
+
+ # try to imagine the RPM name
+ if ($dir =~ /autoinstallation/) {
+ $dir = "autoyast2-installation";
+ } elsif ($dir =~ /autoyast2/) {
+ $dir = "autoyast2";
+ } elsif ($dir eq "yast2") {
+ $dir = "yast2";
+ } else {
+ $dir = 'yast2-'.$dir;
+ }
+
+ warn "\tIdentified as: ".$dir."\n";
+
+ my @lines = split (/\n/, $lines_s);
+ foreach my $line (@lines) {
+ next if ($line !~ /^([^ \t]+)[ \t]+File: (.*)$/);
+
+ my $yast_rpm = $1;
+ my $yast_module = $2;
+
+ ### do not report dependency on yast2.rpm
+ ### if not explicitely requested
+ next if ($show_base == 0 && $yast_rpm eq 'yast2');
+ ### do not report itself
+ next if ($yast_rpm eq $dir);
+
+ push @{$reqrpms->{$yast_rpm}}, $dir;
+
+ $RPM_deps->{$yast_rpm} = 1;
+ }
+
+ foreach my $key (keys (%{$RPM_deps})) {
+ warn "\t* RPM ".$dir." requires ".$key."\n";
+ if (! defined $all_RPM_req->{$key}) {
+ $all_RPM_req->{$key} = 0;
+ }
+ ++$all_RPM_req->{$key};
+ }
+}
+
+opendir (DIR, $wd) || do {
+ warn "Cannot open directory ".$wd.": ".$!;
+ exit 2;
+};
+
+foreach my $dir (readdir (DIR)) {
+ # not a directory
+ next if (! -d $dir);
+ next if ($dir =~ /^\./);
+ # blacklist
+ next if ($dir =~ /^(qt|gtk|cim|xml|core|ncurses|pkg-bindings|liby2util|perl-bindings|packagemanager-test|devtools|ruby-bindings|y2pmsh)$/);
+ next if ($max_dirs_at_once <= 0);
+ --$max_dirs_at_once;
+
+ warn "Checking dir: '".$dir."'\n";
+ CheckDir ($dir);
+}
+
+closedir (DIR);
+
+warn " \n";
+warn " \n";
+
+my $print_it_arrows = {};
+my $print_key = "";
+
+sub HowManyTimesRequired ($) {
+ my $rpm = shift || "";
+
+ if (! defined $all_RPM_req->{$rpm}) {
+ return 0;
+ } else {
+ return $all_RPM_req->{$rpm};
+ }
+}
+
+foreach my $key (sort ({@{$reqrpms->{$b}} <=> @{$reqrpms->{$a}}} keys %{$reqrpms})) {
+ foreach my $module (sort {$a cmp $b} (@{$reqrpms->{$key}})) {
+ $print_it_arrows->{"\t\"".$module." (".HowManyTimesRequired($module).")\" -> \"".$key." (".HowManyTimesRequired($key).")\" [ color=\"black\" ]\n"} = 1;
+ }
+}
+
+print "digraph \"YaST RPM dependencies\" {\n\n";
+
+foreach my $key (sort {$a cmp $b} (keys %{$print_it_arrows})) {
+ print $key;
+}
+
+print "\n}\n";
+
+exit 0;
\ No newline at end of file
Added: trunk/devtools/devtools/bin/gen_logic_deps_nodes
URL: http://svn.opensuse.org/viewcvs/yast/trunk/devtools/devtools/bin/gen_logic_deps_nodes?rev=41935&view=auto
==============================================================================
--- trunk/devtools/devtools/bin/gen_logic_deps_nodes (added)
+++ trunk/devtools/devtools/bin/gen_logic_deps_nodes Fri Nov 9 16:29:19 2007
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+# ==Authors==
+# Lukas Ocilka
+#
+# ==About==
+# A very simple script for getting only those dependency-nodes we are
+# interested in. It uses output of another script 'gen_logic_deps'
+# as its input. Greps nodes and generates a PNG graph.
+#
+# ==Usage==
+# ./gen_logic_deps_nodes file_to_read regexptouse file_to_write [without_zero_deps]
+#
+# * file_to_read - output from 'gen_logic_deps' script
+# * regexptouse - part of 'sed' regexp :) e.g., "yast2-network\|yast2-country"
+# * file_to_write - script creates thise files ${file_to_write}.txt, ${file_to_write}.png
+# * without_zero_deps - if defined nodes with (0) are not visible
+#
+# ==Examples==
+# /usr/share/YaST2/data/devtools/bin/gen_logic_deps_nodes dot-in.txt "yast2-country" Testing
+# --> Testing.txt
+# --> Testing.png
+#
+# /usr/share/YaST2/data/devtools/bin/gen_logic_deps_nodes dot-in.txt "yast2-country" Testing without
+# --> Testing.txt
+# --> Testing.png
+#
+
+USE_FILE=$1
+
+NODES_INCLUDED=$2
+
+SAVE_TO_FILE=$3
+
+GREP_ZERODEPS=$4
+
+if [ "${USE_FILE}" == "" ]; then
+ echo "No input file defined";
+ exit 1;
+else
+ echo "Using file: "${USE_FILE}
+fi
+
+if [ "${NODES_INCLUDED}" == "" ]; then
+ echo "No nodes defined";
+ exit 1;
+else
+ echo "Using nodes: "${NODES_INCLUDED}
+fi
+
+if [ "${SAVE_TO_FILE}" == "" ]; then
+ echo "No file to save to defined";
+ exit 1;
+else
+ echo "Writing to: "${SAVE_TO_FILE}.txt
+fi
+
+echo
+echo "grep command: >>>\({\|}\|${NODES_INCLUDED}\)<<<";
+
+if [ "${GREP_ZERODEPS}" == "" ]; then
+ grep "\({\|}\|${NODES_INCLUDED}\)" ${USE_FILE} > ${SAVE_TO_FILE}.txt;
+else
+ echo "Grepping out zero-deps";
+ grep "\({\|}\|${NODES_INCLUDED}\)" ${USE_FILE} | grep -v "(0)" > ${SAVE_TO_FILE}.txt;
+fi
+
+echo
+echo "See ${SAVE_TO_FILE}.png file"
+dot -Tpng -o${SAVE_TO_FILE}.png ${SAVE_TO_FILE}.txt
Modified: trunk/devtools/package/yast2-devtools.changes
URL: http://svn.opensuse.org/viewcvs/yast/trunk/devtools/package/yast2-devtools.changes?rev=41935&r1=41934&r2=41935&view=diff
==============================================================================
--- trunk/devtools/package/yast2-devtools.changes (original)
+++ trunk/devtools/package/yast2-devtools.changes Fri Nov 9 16:29:19 2007
@@ -1,8 +1,12 @@
-------------------------------------------------------------------
Fri Nov 9 11:10:19 CET 2007 - locilka@suse.cz
-- Addded new check_deps script for basic checking of imported
+- Added new check_deps script for basic checking of imported
YCP or Perl (YaST) modules.
+- Added new gen_logic_deps script for generating dependency graphs.
+- Added new gen_logic_deps_nodes script for picking up just nodes
+ we are interested in.
+- 2.16.2
-------------------------------------------------------------------
Wed Oct 10 14:34:01 CEST 2007 - mvidner@suse.cz
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org