File: cvsversion.tcl

package info (click to toggle)
libapache2-mod-rivet 3.2.6-1
  • links: PTS
  • area: main
  • in suites: sid, trixie
  • size: 6,384 kB
  • sloc: tcl: 8,982; xml: 8,619; ansic: 7,074; sh: 5,039; makefile: 195; sql: 91; lisp: 78
file content (124 lines) | stat: -rwxr-xr-x 2,618 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/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