#!/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 # # ## ### ##### ######## ############# ##################### ## Helper application, debugging of cvs2fossil. This application ## extracts all information about a changeset and writes it nicely ## formatted to stdout. The changeset is specified by its internal ## numerical id. # # ## ### ##### ######## ############# ##################### ## 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::project::rev ; # Changesets package require vc::fossil::import::cvs::state ; # State storage. package require vc::tools::misc ; # Min/max. namespace import ::vc::fossil::import::cvs::state namespace import ::vc::fossil::import::cvs::project::rev namespace import ::vc::tools::misc::* namespace import ::vc::tools::log log verbosity 0 # Process the command line, i.e. get the database to access, and file # of interest. The latter can be specified by name, id, or indirectly # through the id of one of the revisions it contains. state use [lindex $argv 0] state reading changeset state reading cstype state reading csrevision state reading project state reading revision state reading file state reading symbol state reading meta state reading author state reading cmessage set cid [lindex $argv 1] struct::list assign [state run { SELECT C.cid, C.pid, C.src, P.name, CT.name FROM changeset C, project P, cstype CT WHERE C.cid = $cid AND P.pid = C.pid AND CT.tid = C.type }] cid pid src pname tname puts "" puts "Changeset <$tname $cid> in project \"$pname\" ($pid)" if {$tname eq "sym"} { puts "Symbol \"[state run { SELECT name FROM symbol WHERE sid = $src }]\"" } else { struct::list assign [state run { SELECT P.name, S.name, A.name, L.text FROM meta M, project P, symbol S, author A, cmessage L WHERE M.mid = $src AND P.pid = M.pid AND S.sid = M.bid AND A.aid = M.aid AND L.cid = M.cid }] project lod author cmessage puts "Meta: Project = \"$project\"" puts "Meta: LOD = \"$lod\"" puts "Meta: Author = \"$author\"" puts "Meta: Log |[join [split $cmessage \n] "\"\nMeta: Log |"]" } array set rev {} foreach {rid date pos fname frev default} [state run { SELECT R.rid, R.date, C.pos, F.name, R.rev, R.isdefault FROM csrevision C, revision R, file F WHERE C.cid = $cid AND R.rid = C.rid AND F.fid = R.fid ORDER BY C.pos, R.date }] { set rev($rid) [list $pos $date $fname $frev $default] puts "File: [expr {$default?"D":" "}] [clock format $date] [format %3d $pos]/[format %6d $rid] ${frev}::$fname" } ::vc::fossil::import::cvs::project::rev::PullPredecessorRevisions pdep [array names rev] ::vc::fossil::import::cvs::project::rev::PullSuccessorRevisions sdep [array names rev] puts "" exit exit