Version IDs are produced by the SDX "version" command. They are designed to make it easy to identify the version of a particular starkit. An example:
$ sdx version critcl.kit
2003/02/08 14:34:36 29946-43727 critcl.kit
$The first two values reported are the modification date and time of the most recent file found inside the starkit.
The third value is based on the 32-bit CRC of all names, dates, and sizes found inside the starkit.
The Tcl code on which the version ID calculation is based, is:
proc traverse {args} {
set sig 0
set mod 0
while {[llength $args] > 0} {
set d [lindex $args 0]
set args [lrange $args 1 end]
foreach path [lsort [glob -nocomplain [file join $d *]]] {
set t [file tail $path]
switch -- $t CVS - RCS - core - a.out continue
lappend sig $t
if {[file isdir $path]} {
lappend args $path
} else {
set m [file mtime $path]
if {$m > $mod} { set mod $m }
lappend sig $m [file size $path]
}
}
}
list [vfs::crc [join $sig " "]] $mod
}For purposes of readability, the resulting 32-bit value is formatted as 5 digits, dash, 5 digits:
proc version_id {dir {name ""}} {
lassign [traverse $dir] sig mod
set time [clock format $mod -format {%Y/%m/%d %H:%M:%S} -gmt 1]
puts [format {%s %d-%d %s} $time [expr {(($sig>>16) & 0xFFFF) + 10000}] \
[expr {($sig & 0xFFFF) + 10000}] $name]
}Some comments: