1 #!/usr/local/bin/tclsh7.4
5 #############################################################################
6 ### Do we already have this delta ?
7 #############################################################################
9 proc find_delta {nbr} {
10 global CTMname CTMdest
11 if {[file exists [format "%s/$CTMname.%04d" $CTMdest $nbr]]} { return 1 }
12 if {[file exists [format "%s/$CTMname.%04d.gz" $CTMdest $nbr]]} { return 1 }
16 #############################################################################
17 ### The top level code...
18 #############################################################################
20 set CTMSW /home/ctm/SW
27 set CTMbogus {\.core$}
31 set CTMmaxctm 10000000
34 set CTMdate [exec date -u +%Y%m%d%H%M%SZ]
49 exec sh -c "date -u '+%Y%m%d%H%M%S $argv'" >> ${CTMSW}/log
52 set CTMtmp $CTMSW/../tmp/${CTMname}_${CTMsuff}
55 set CTMcopy $CTMSW/../$CTMname
58 set CTMdest $CTMSW/../CTM-pub/$CTMname
61 # Make sure we only run one at a time...
63 set CTMlock Lck.${CTMname}.${CTMdate}.[pid]
65 exec echo starting > ${CTMlock}
66 if {[catch "exec ln $CTMlock LCK.$CTMname" a]} {
67 puts "Not going, lock exists..."
72 set CTMlock LCK.$CTMname
74 set CTMscratch ${CTMtmp}.tmp
81 set CTMnbr [lindex [exec cat $CTMcopy/.ctm_status] 1]
84 if {$CTMnbr > 0 && ![find_delta $CTMnbr]} {
85 puts "$CTMname delta $CTMnbr doesn't exist..."
92 if {[find_delta $CTMnbr]} {
93 puts "$CTMname delta $CTMnbr does already exist..."
98 set fo [open $CTMref/.ctm_status w]
99 puts $fo "$CTMname $CTMnbr"
104 set CTMnbr [lindex [exec cat $CTMref/.ctm_status] 1]
107 puts "Doing CTMname $CTMname CTMnbr $CTMnbr$CTMsuff CTMdate $CTMdate"
109 exec sh -c "rm -f ${CTMtmp}.* ${CTMtmp}:*" >&@ stdout
111 set nm [format "%s.%04d%s" $CTMname $CTMnbr $CTMsuff]
115 exec mkdir ${CTMtmp}.dir
118 set r1 [catch "exec ${CTMSW}/mkctm -I ${CTMignore} -B ${CTMbogus} -l ${CTMtmp}.log -D $max_damage $CTMname $CTMnbr $CTMdate . $x1 $CTMref | md5 -p | gzip -9 > ${CTMtmp}:${nm}.gz 2>@ stderr" r2]
121 if {[lindex $errorCode 2] == 4} {
122 puts "No changes, stopping."
126 puts "problems, stopping now."
127 puts "errorCode $errorCode"
136 puts "testing, stopping now."
141 puts "Applying delta"
143 exec echo now applying > $CTMlock
144 exec sh -e -c "cd $CTMcopy ; $CTMSW/ctm -v -v -v ${CTMtmp}:${nm}.gz" >& ${CTMtmp}.apply
145 exec echo did apply > $CTMlock
149 exec mv ${CTMtmp}:${nm}.gz $CTMdest/.CTMtmp_${nm}.gz >&@ stdout
150 exec mv $CTMdest/.CTMtmp_${nm}.gz $CTMdest/${nm}.gz >&@ stdout
151 exec echo moved > $CTMlock
153 exec sh -c "rm -rf ${CTMtmp}.*" >&@ stdout
155 if {$CTMmail != ""} {
158 exec $CTMSW/ctm_smail -m $CTMmaxmsg -c $CTMmaxctm $CTMdest/${nm}.gz $CTMmail >&@ stdout
159 if {$CTMqueue != "" && $CTMqueuemail != ""} {
160 puts "Queueing delta"
162 exec $CTMSW/ctm_smail -m $CTMmaxmsg -c $CTMmaxctm -q $CTMqueue $CTMdest/${nm}.gz $CTMqueuemail >&@ stdout
163 puts "Sending initial two deltas"
165 exec $CTMSW/ctm_dequeue -n 2 $CTMqueue >&@ stdout
168 exec echo mailed > $CTMlock
170 # If we did an absolute delta: stop.
171 if {$CTMsuff != ""} break
173 # Make an absolute delta (!) every 100 deltas
174 if {$CTMnbr == 0 || ($CTMnbr % 100)} break
176 # Make an absolute delta too...