[ovs-dev] [manager-options 2/5] docs: Implement our own dot->pic translator.

Ben Pfaff blp at nicira.com
Thu Nov 4 22:55:07 UTC 2010


Thanks for taking a look.

I did try it, but you can easily try it for yourself.  Just save patches
1/2 and 2/2 to files and then run "git am" on each one from a clean Git
checkout of "master".

On Thu, Nov 04, 2010 at 03:47:49PM -0700, Ethan Jackson wrote:
> Too bad that we have to do this.  At any rate it looks fine to me.  I
> trust that you tried it out.
> 
> Ethan
> 
> On Wed, Nov 3, 2010 at 10:39 AM, Ben Pfaff <blp at nicira.com> wrote:
> > Recent versions of Graphviz no longer support output to PIC format, so this
> > commit adds our own internal translator from dot's "plain" output format
> > to PIC format.  The "plain" format works best with slightly different
> > "dot" input (advised by the Graphviz manual description of the "plain"
> > format) so this commit also adjusts ovsdb-dot's output.
> > ---
> >  ovsdb/dot2pic        |   63 ++++++++++++++++++++++++++++++++++++++++++++++++++
> >  ovsdb/ovsdb-dot.in   |    1 +
> >  vswitchd/automake.mk |    9 +++----
> >  3 files changed, 68 insertions(+), 5 deletions(-)
> >  create mode 100755 ovsdb/dot2pic
> >
> > diff --git a/ovsdb/dot2pic b/ovsdb/dot2pic
> > new file mode 100755
> > index 0000000..3e2f308
> > --- /dev/null
> > +++ b/ovsdb/dot2pic
> > @@ -0,0 +1,63 @@
> > +#! /usr/bin/perl
> > +
> > +# Copyright (c) 2009, 2010 Nicira Networks
> > +#
> > +# Licensed under the Apache License, Version 2.0 (the "License");
> > +# you may not use this file except in compliance with the License.
> > +# You may obtain a copy of the License at:
> > +#
> > +#     http://www.apache.org/licenses/LICENSE-2.0
> > +#
> > +# Unless required by applicable law or agreed to in writing, software
> > +# distributed under the License is distributed on an "AS IS" BASIS,
> > +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> > +# See the License for the specific language governing permissions and
> > +# limitations under the License.
> > +
> > +use strict;
> > +use warnings;
> > +
> > +my ($scale) = 1;
> > +print ".PS\n";
> > +print "linethick = 1;\n";
> > +while (<>) {
> > +    if (/graph (\S+) (\S+) (\S+)/) {
> > +        $scale = $1;
> > +    } elsif (my ($name, $x, $y, $width, $height, $label, $style, $shape, $color, $fillcolor) = /node (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+)/) {
> > +        $x *= $scale;
> > +        $y *= $scale;
> > +        $width *= $scale;
> > +        $height *= $scale;
> > +        print "box at $x,$y wid $width height $height \"$name\"\n";
> > +    } elsif (/edge/) {
> > +        my (undef, $tail, $head, $n, $rest) = split(' ', $_, 5);
> > +        my @xy;
> > +        for (1...$n) {
> > +            my ($x, $y);
> > +            ($x, $y, $rest) = split(' ', $rest, 3);
> > +            push(@xy, [$x * $scale, $y * $scale]);
> > +        }
> > +        my ($label, $xl, $yl);
> > +        if (scalar(my @junk = split(' ', $rest)) > 2) {
> > +            if ($rest =~ s/^"([^"]*)"\s+//) {
> > +                $label = $1;
> > +            } else {
> > +                ($label, $rest) = split(' ', $rest, 2);
> > +            }
> > +            ($xl, $yl, $rest) = split(' ', $rest, 3);
> > +            $xl *= $scale;
> > +            $yl *= $scale;
> > +        }
> > +        my ($style, $color) = split(' ', $rest);
> > +
> > +        print "spline -> from $xy[0][0],$xy[0][1]";
> > +        for (my ($i) = 0; $i <= $#xy; $i++) {
> > +            print " to $xy[$i][0],$xy[$i][1]";
> > +        }
> > +        print "\n";
> > +
> > +        print "\"$label\" at $xl,$yl\n" if defined($label);
> > +    }
> > +
> > +}
> > +print ".PE\n";
> > diff --git a/ovsdb/ovsdb-dot.in b/ovsdb/ovsdb-dot.in
> > index 4569f2e..cea8987 100755
> > --- a/ovsdb/ovsdb-dot.in
> > +++ b/ovsdb/ovsdb-dot.in
> > @@ -29,6 +29,7 @@ def schemaToDot(schemaFile):
> >         print '\tsize="6.5,4";'
> >         print '\tmargin="0";'
> >         print "\tnode [shape=box];"
> > +        print "\tedge [dir=none, arrowhead=none, arrowtail=none];"
> >         print "\t%s;" % tableName
> >         for columnName, column in table.columns.iteritems():
> >             if column.type.value:
> > diff --git a/vswitchd/automake.mk b/vswitchd/automake.mk
> > index 93c6f92..6ef7763 100644
> > --- a/vswitchd/automake.mk
> > +++ b/vswitchd/automake.mk
> > @@ -50,12 +50,11 @@ vswitchd/vswitch-idl.ovsidl: $(VSWITCH_IDL_FILES)
> >
> >  # vswitch E-R diagram
> >  if BUILD_ER_DIAGRAMS
> > -$(srcdir)/vswitchd/vswitch.pic: ovsdb/ovsdb-dot.in vswitchd/vswitch.ovsschema
> > +$(srcdir)/vswitchd/vswitch.pic: ovsdb/ovsdb-dot.in ovsdb/dot2pic \
> > +                                vswitchd/vswitch.ovsschema
> >        $(OVSDB_DOT) $(srcdir)/vswitchd/vswitch.ovsschema \
> > -               | dot -T pic \
> > -               | sed -e "/^'/d" \
> > -                     -e '/^box attrs0/d' \
> > -                     -e 's/linethick = 0;/linethick = 1;/' \
> > +               | dot -T plain \
> > +               | $(srcdir)/ovsdb/dot2pic \
> >                > $@.tmp
> >        mv $@.tmp $@
> >  else
> > --
> > 1.7.1
> >
> >
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev_openvswitch.org
> >




More information about the dev mailing list