blob: f73196c0d58dcae06a657d01643a665cc6ea4968 [file] [log] [blame]
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"
# By David N. Welton <davidw@dedasys.com>
# $Id$
# This is to generate new versions based on CVS information.
set newversionvar 0
proc newversion { } {
global newversionvar
puts stderr "New version"
set newversionvar 1
}
proc diffentries { {dir .} } {
global newversionvar
set CVSEntries [file join . CVS Entries]
set OldEntries [file join . .OLDEntries]
puts stderr "Diffentries for $dir"
set currentdir [pwd]
cd $dir
if { ! [file exists $CVSEntries] } {
puts stderr "You must be in a directory with a path to ./CVS/Entries."
}
if { ! [file exists $OldEntries] } {
puts stderr "No OLDEntries file. It will be created."
set fl [open $OldEntries w]
close $fl
}
set entries [open $CVSEntries]
set blob ""
while { [gets $entries ln] != -1 } {
lappend blob $ln
}
close $entries
set oldentries [open $OldEntries]
set blob2 ""
while { [gets $oldentries ln] != -1 } {
lappend blob2 $ln
}
close $oldentries
if { $blob != $blob2 } {
newversion
}
foreach ln $blob {
# the regexp below scans for directories in CVS Entries files
if { [regexp {^D/(.*)////$} "$ln" match dir] } {
diffentries $dir
}
}
file copy -force $CVSEntries $OldEntries
cd $currentdir
}
proc main {} {
global newversionvar
diffentries
if { $newversionvar == 0 } {
puts stderr "No changes, exiting."
} else {
if { [file exists VERSION] } {
set versionfile [open VERSION "r"]
gets $versionfile versionstring
close $versionfile
} else {
set versionstring "0.0.0"
}
if { ! [regexp {([0-9]+)\.([0-9]+)\.([0-9]+)} $versionstring match major minor point] } {
puts stderr "Problem with versionstring '$versionstring', exiting"
exit 1
}
set versionfile [ open VERSION "w" ]
if { [catch {
while { 1 } {
puts -nonewline "Current version: $major.$minor.$point. "
puts -nonewline {Increment [M]ajor, m[I]nor, [P]oint release, or [A]bort? >>> }
flush stdout
gets stdin answer
switch [string tolower $answer] {
m {
incr major
set minor 0
set point 0
break
}
i {
incr minor
set point 0
break
}
p {
incr point
break
}
a {
puts "Aborted"
break
}
}
}
puts $versionfile "$major.$minor.$point"
} err] } {
puts stderr "Problem writing VERSION file: $err"
puts $versionfile "$major.$minor.$point"
}
close $versionfile
puts "Done, version is $major.$minor.$point"
}
}
main