X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=scripts%2Fdbupgrade2_tool.pl;h=0e1194dc87bff3f17374b625233fc2e00b48b03a;hb=70e1559de935668f85affe8c2e73eaa45d3d1715;hp=fa45848c7575a9dc0d483e78b5af8f8de2e667de;hpb=acd67df07b40e953b4b3955f035801bb7eae74b9;p=kivitendo-erp.git diff --git a/scripts/dbupgrade2_tool.pl b/scripts/dbupgrade2_tool.pl index fa45848c7..0e1194dc8 100755 --- a/scripts/dbupgrade2_tool.pl +++ b/scripts/dbupgrade2_tool.pl @@ -35,8 +35,38 @@ my ($opt_user, $opt_apply); our (%myconfig, $form, $user); sub show_help { - print("dbupgrade2_tool.pl [--list] [--tree] [--rtree] [--graphviz]\n" . - " [--nodepds] [--user=name --apply=tag] [--help]\n"); + my $help_text = <<'END_HELP' +dbupgrade2_tool.pl [options] + + A validation and information tool for the database upgrade scripts + in 'sql/Pg-upgrade2'. + + At startup dbupgrade2_tool.pl will always check the consistency + of all database upgrade scripts (e.g. circular references, invalid + formats, missing meta information). You can but don't have to specifiy + additional actions. + + Actions: + --list Lists all database upgrade tags + --tree Lists all database upgrades in tree form + --rtree Lists all database upgrades in reverse tree form + --graphviz[=file] Create a Postscript document showing a tree of + all database upgrades and their dependencies. + If no file name is given then the output is + written to 'db_dependencies.ps'. + --apply=tag Applies the database upgrades 'tag' and all + upgrades it depends on. If '--apply' is used + then the option '--user' must be used as well. + --help Show this help and exit. + + Options: + --user=name The name of the user configuration to use for + database connectivity. +END_HELP + ; + + print $help_text; + exit 0; } sub error { @@ -118,22 +148,29 @@ sub dump_tree_reverse { } sub dump_graphviz { + my $file_name = shift || "db_dependencies.ps"; + print("GRAPHVIZ POSTCRIPT\n\n"); - print("Output will be written to db_dependencies.ps\n"); + print("Output will be written to '${file_name}'\n"); + + calc_rev_depends(); + $dot = "|dot -Tps "; - open(OUT, "${dot}> db_dependencies.ps"); + open OUT, "${dot}> \"${file_name}\"" || die; + print(OUT "digraph db_dependencies {\n" . - "node [shape=box];\n"); + "node [shape=box style=filled fillcolor=white];\n"); my %ranks; foreach my $c (values(%{$controls})) { - $ranks{$c->{"depth"}} = [] unless ($ranks{$c->{"depth"}}); - push(@{$ranks{$c->{"depth"}}}, $c->{"tag"}); + $ranks{$c->{"depth"}} ||= []; + + my ($pre, $post) = ('node [fillcolor=lightgray] ', 'node [fillcolor=white] ') if !@{ $c->{"rev_depends"} }; + + push @{ $ranks{$c->{"depth"}} }, qq|${pre}"$c->{tag}"; ${post}|; } foreach (sort(keys(%ranks))) { - print(OUT "{ rank = same; " . - join("", map({ '"' . $_ . '"; ' } @{$ranks{$_}})) . - " }\n"); + print OUT "{ rank = same; ", join("", @{ $ranks{$_} }), " }\n"; } foreach my $c (values(%{$controls})) { print(OUT "$c->{tag};\n"); @@ -248,7 +285,7 @@ GetOptions("list" => \$opt_list, "tree" => \$opt_tree, "rtree" => \$opt_rtree, "nodeps" => \$opt_nodeps, - "graphviz" => \$opt_graphviz, + "graphviz:s" => \$opt_graphviz, "user=s" => \$opt_user, "apply=s" => \$opt_apply, "help" => \$opt_help, @@ -256,7 +293,6 @@ GetOptions("list" => \$opt_list, if ($opt_help) { show_help(); - exit(0); } $controls = parse_dbupdate_controls($form, "Pg"); @@ -273,8 +309,8 @@ if ($opt_rtree) { dump_tree_reverse(); } -if ($opt_graphviz) { - dump_graphviz(); +if (defined $opt_graphviz) { + dump_graphviz($opt_graphviz); } if ($opt_nodeps) {