diff options
| author | cashmere <cashmere@autistici.org> | 2026-09-04 09:05:24 +0200 |
|---|---|---|
| committer | cashmere <cashmere@autistici.org> | 2026-09-04 09:05:24 +0200 |
| commit | 4f49b16079b27d7ce633619e4cddfdf2bffbc952 (patch) | |
| tree | c296c1e7f3c3e2f6859c6d3a1b1b208779b89679 /tools/cvs2fossil/symboltree | |
| download | relic-4f49b16079b27d7ce633619e4cddfdf2bffbc952.tar.gz | |
Diffstat (limited to 'tools/cvs2fossil/symboltree')
| -rw-r--r-- | tools/cvs2fossil/symboltree | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/tools/cvs2fossil/symboltree b/tools/cvs2fossil/symboltree new file mode 100644 index 0000000..5545473 --- /dev/null +++ b/tools/cvs2fossil/symboltree @@ -0,0 +1,88 @@ +#!/bin/sh +## -*- tcl -*- \ +exec tclsh "$0" ${1+"$@"} + +# # ## ### ##### ######## ############# ##################### +## Copyright (c) 2007 Andreas Kupries. +# +# This software is licensed as described in the file LICENSE, which +# you should have received as part of this distribution. +# +# This software consists of voluntary contributions made by many +# individuals. For exact contribution history, see the revision +# history and logs, available at http://fossil-scm.hwaci.com/fossil +# # ## ### ##### ######## ############# ##################### + +## Command line application to extract the tree of symbols (tags and +## branches) from a state database and show it graphically. The code +## uses GraphViz's 'dot' to do the layouting and conversion into an +## image. + +# # ## ### ##### ######## ############# ##################### +## Requirements, extended package management for local packages. + +lappend auto_path [file join [file dirname [info script]] lib] + +package require Tcl 8.4 ; # Required runtime. +package require struct::graph ; # Graph handling. +package require struct::list ; # Higher order list ops. +package require vc::fossil::import::cvs::state ; # State storage. +package require vc::tools::dot ; # Graph export to DOT. + +namespace import ::vc::fossil::import::cvs::state +namespace import ::vc::tools::dot + +# Process the command line. Get the database to access. + +state use [lindex $argv 0] +state reading symbol +state reading parent + +# Get the data of all symbols in the state as a list for iteration, +# and as array for random access of neighbouring symbols. + +foreach {sid name} [set symbols [state run { SELECT sid, name FROM symbol }]] { + set sym($sid) [list $name] +} +foreach {sid lod} [state run { SELECT sid, lod FROM tag }] { + lappend sym($sid) $lod $sym($lod) box Tag +} +foreach {sid lod} [state run { SELECT sid, lod FROM branch }] { + lappend sym($sid) $lod $sym($lod) diamond Branch +} + +# Start the graph + +struct::graph dg + +# Convert the symbols into nodes of the graph, and use node attributes +# to highlight various pieces of interest for the dot conversion. +# Label => Symbol name. + +foreach sid [array names sym] { + dg node insert $sid + struct::list assign $sym($sid) name lod lodname shape what + if {$shape eq ""} { set shape circle } + if {$what ne ""} { append what " " } + dg node set $sid label "$what$name" + dg node set $sid shape $shape +} + +# Go through the symbols a second time, now set up the arcs based on +# their parent choices. Use arc attributes to highlight interesting +# things (...). + +foreach sid [array names sym] { + struct::list assign $sym($sid) name lod lodname shape + if {$lod eq ""} continue ; # Root has no parent. + dg arc insert $sid $lod +} + +# Convert the graph to dot, then run the layouter and convert to png, +# at last show the image. + +vc::tools::dot layout png dg SymbolTree st.png +exec display st.png +file delete st.png +exit + |
