1 #!/usr/local/bin/tclsh7.4
3 #############################################################################
4 ### Do we already have this delta ?
5 #############################################################################
7 proc find_delta {nbr} {
9 if {[file exists [format "%s/$CTMname.%04d" $CTMdest $nbr]]} { return 1 }
10 if {[file exists [format "%s/$CTMname.%04d.gz" $CTMdest $nbr]]} { return 1 }
14 #############################################################################
15 ### The top level code...
16 #############################################################################
18 set CTMSW /home/ctm/SW
25 set CTMbogus {\.core$}
29 set CTMmaxctm 10000000
32 set CTMdate [exec date -u +%Y%m%d%H%M%SZ]
47 exec sh -c "date -u '+%Y%m%d%H%M%S $argv'" >> ${CTMSW}/log
50 set CTMtmp $CTMSW/../tmp/${CTMname}_${CTMsuff}
53 set CTMcopy $CTMSW/../$CTMname
56 set CTMdest $CTMSW/../CTM-pub/$CTMname
59 # Make sure we only run one at a time...
61 set CTMlock Lck.${CTMname}.${CTMdate}.[pid]
63 exec echo starting > ${CTMlock}
64 if {[catch "exec ln $CTMlock LCK.$CTMname" a]} {
65 puts "Not going, lock exists..."
70 set CTMlock LCK.$CTMname
72 set CTMscratch ${CTMtmp}.tmp
79 set CTMnbr [lindex [exec cat $CTMcopy/.ctm_status] 1]
82 if {$CTMnbr > 0 && ![find_delta $CTMnbr]} {
83 puts "$CTMname delta $CTMnbr doesn't exist..."
90 if {[find_delta $CTMnbr]} {
91 puts "$CTMname delta $CTMnbr does already exist..."
96 set fo [open $CTMref/.ctm_status w]
97 puts $fo "$CTMname $CTMnbr"
102 set CTMnbr [lindex [exec cat $CTMref/.ctm_status] 1]
105 puts "Doing CTMname $CTMname CTMnbr $CTMnbr$CTMsuff CTMdate $CTMdate"
107 exec sh -c "rm -f ${CTMtmp}.* ${CTMtmp}:*" >&@ stdout
109 set nm [format "%s.%04d%s" $CTMname $CTMnbr $CTMsuff]
113 exec mkdir ${CTMtmp}.dir
116 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]
119 if {[lindex $errorCode 2] == 4} {
120 puts "No changes, stopping."
124 puts "problems, stopping now."
125 puts "errorCode $errorCode"
134 puts "testing, stopping now."
139 puts "Applying delta"
141 exec echo now applying > $CTMlock
142 exec sh -e -c "cd $CTMcopy ; $CTMSW/ctm -v -v -v ${CTMtmp}:${nm}.gz" >& ${CTMtmp}.apply
143 exec echo did apply > $CTMlock
147 exec mv ${CTMtmp}:${nm}.gz $CTMdest/.CTMtmp_${nm}.gz >&@ stdout
148 exec mv $CTMdest/.CTMtmp_${nm}.gz $CTMdest/${nm}.gz >&@ stdout
149 exec echo moved > $CTMlock
151 exec sh -c "rm -rf ${CTMtmp}.*" >&@ stdout
153 if {$CTMmail != ""} {
156 exec $CTMSW/ctm_smail -m $CTMmaxmsg -c $CTMmaxctm $CTMdest/${nm}.gz $CTMmail >&@ stdout
157 if {$CTMqueue != "" && $CTMqueuemail != ""} {
158 puts "Queueing delta"
160 exec $CTMSW/ctm_smail -m $CTMmaxmsg -c $CTMmaxctm -q $CTMqueue $CTMdest/${nm}.gz $CTMqueuemail >&@ stdout
161 puts "Sending initial two deltas"
163 exec $CTMSW/ctm_dequeue -n 2 $CTMqueue >&@ stdout
166 exec echo mailed > $CTMlock
168 # If we did an absolute delta: stop.
169 if {$CTMsuff != ""} break
171 # Make a absolute delta (!) every 100 deltas
172 if {$CTMnbr == 0 || ($CTMnbr % 100)} break
174 # Make an absolute delta too...