Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  graphviz.py   Sprache: Python

 
#!/usr/bin/env python

# Copyright (c) 2011 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Using the JSON dumped by the dump-dependency-json generator,
generate input suitable for graphviz to render a dependency graph of
targets."""

from __future__ import print_function

import collections
import json
import sys


def ParseTarget(target):
  target, _, suffix = target.partition('#')
  filename, _, target = target.partition(':')
  return filename, target, suffix


def LoadEdges(filename, targets):
  """Load the edges map from the dump file, and filter it to only
  show targets in |targets| and their depedendents."""

  file = open('dump.json')
  edges = json.load(file)
  file.close()

  # Copy out only the edges we're interested in from the full edge list.
  target_edges = {}
  to_visit = targets[:]
  while to_visit:
    src = to_visit.pop()
    if src in target_edges:
      continue
    target_edges[src] = edges[src]
    to_visit.extend(edges[src])

  return target_edges


def WriteGraph(edges):
  """Print a graphviz graph to stdout.
  |edges| is a map of target to a list of other targets it depends on."""

  # Bucket targets by file.
  files = collections.defaultdict(list)
  for src, dst in edges.items():
    build_file, target_name, toolset = ParseTarget(src)
    files[build_file].append(src)

  print('digraph D {')
  print(' fontsize=8')  # Used by subgraphs.
  print(' node [fontsize=8]')

  # Output nodes by file.  We must first write out each node within
  # its file grouping before writing out any edges that may refer
  # to those nodes.
  for filename, targets in files.items():
    if len(targets) == 1:
      # If there's only one node for this file, simplify
      # the display by making it a box without an internal node.
      target = targets[0]
      build_file, target_name, toolset = ParseTarget(target)
      print(' "%s" [shape=box, label="%s\\n%s"]' % (target, filename,
                                                     target_name))
    else:
      # Group multiple nodes together in a subgraph.
      print(' subgraph "cluster_%s" {' % filename)
      print(' label = "%s"' % filename)
      for target in targets:
        build_file, target_name, toolset = ParseTarget(target)
        print(' "%s" [label="%s"]' % (target, target_name))
      print(' }')

  # Now that we've placed all the nodes within subgraphs, output all
  # the edges between nodes.
  for src, dsts in edges.items():
    for dst in dsts:
      print(' "%s" -> "%s"' % (src, dst))

  print('}')


def main():
  if len(sys.argv) < 2:
    print(__doc__, file=sys.stderr)
    print(file=sys.stderr)
    print('usage: %s target1 target2...' % (sys.argv[0]), file=sys.stderr)
    return 1

  edges = LoadEdges('dump.json', sys.argv[1:])

  WriteGraph(edges)
  return 0


if __name__ == '__main__':
  sys.exit(main())

Messung V0.5
C=93 H=92 G=92

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge