mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-29 16:44:03 +00:00
The new and improved mkCTM. Learning from this experience it has been
improved on a couple of accounts. Amongst these are "damage control" more than 100 files removed and it will bail out...
This commit is contained in:
parent
9b1fd0e50e
commit
97074d779f
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=6563
@ -1,11 +1,6 @@
|
|||||||
#!/usr/local/bin/tclsh
|
#!/usr/local/bin/tclsh
|
||||||
|
|
||||||
set CTMname cvs-cur
|
set CTMname cvs-cur
|
||||||
set CTMref /u1/CVS-FreeBSD
|
set CTMref /home/ncvs
|
||||||
set CTMdest /u4/ftp/pub/CTM
|
set CTMdest $CTMSW/../CTM-priv/$CTMname
|
||||||
set CTMprefix .
|
set CTMdont {\.core$|^/CVSROOT/history.*$|^/src/secure|^/src/eBones|^/src/kerberosIV}
|
||||||
set CTMdont {.*\.core$|^/CVSROOT/history.*$|^/src/secure|^/src/eBones|^/sup/}
|
|
||||||
|
|
||||||
set CTMcopy /u1/CTM/$CTMname
|
|
||||||
set CTMtmp /u1/CTM/tmp/_tmp_$CTMname
|
|
||||||
set CTMdate [exec date -u +%Y%m%d%H%M%SZ]
|
|
||||||
|
6
usr.sbin/ctm/mkCTM/ctm_conf.ports-cur
Normal file
6
usr.sbin/ctm/mkCTM/ctm_conf.ports-cur
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/local/bin/tclsh
|
||||||
|
|
||||||
|
set CTMname ports-cur
|
||||||
|
set CTMref /usr/ports
|
||||||
|
set CTMdont {\.core$|/CVS$|/CVS/|^/distfiles}
|
||||||
|
|
@ -1,12 +1,6 @@
|
|||||||
#!/usr/local/bin/tclsh
|
#!/usr/local/bin/tclsh
|
||||||
|
|
||||||
set CTMname src-cur
|
set CTMname src-cur
|
||||||
set CTMref /u4/ftp/pub/FreeBSD/SRC-current/src
|
set CTMref /usr/src
|
||||||
set CTMdest /u4/ftp/pub/CTM
|
set CTMdont {\.core$|/CVS$|/CVS/|^/secure|^/eBones}
|
||||||
set CTMprefix .
|
#set CTMmail ctm-src-cur@freebsd.org
|
||||||
set CTMdont {.*\.core$|/CVS$|/CVS/Entries$|/CVS/Repository$|^secure|^eBones}
|
|
||||||
set CTMmail ctm-src-cur@freebsd.org
|
|
||||||
|
|
||||||
set CTMcopy /u1/CTM/$CTMname
|
|
||||||
set CTMtmp /u1/CTM/tmp/_tmp_$CTMname
|
|
||||||
set CTMdate [exec date -u +%Y%m%d%H%M%SZ]
|
|
||||||
|
@ -1,216 +1,319 @@
|
|||||||
#!/usr/local/bin/tclsh
|
#!/usr/local/bin/tcl
|
||||||
|
|
||||||
set CTMignoreCVS 0
|
#############################################################################
|
||||||
set CTMapply 1
|
### Add something
|
||||||
set CTMdont {^///}
|
#############################################################################
|
||||||
set CTMmail {}
|
|
||||||
set CTMsuff {}
|
|
||||||
|
|
||||||
source $argv
|
|
||||||
|
|
||||||
cd /u1/CTM/SW
|
|
||||||
|
|
||||||
set tmp $CTMtmp
|
|
||||||
set dd $CTMdest
|
|
||||||
set d1 $CTMcopy
|
|
||||||
set d2 $CTMref
|
|
||||||
set foo $CTMdate
|
|
||||||
set foo $CTMprefix
|
|
||||||
set foo $CTMname
|
|
||||||
|
|
||||||
if { "$d1" != "" } {
|
|
||||||
####
|
|
||||||
# Find CTM#
|
|
||||||
for {set i 0} {1} {incr i} {
|
|
||||||
if {[file exists [format "%s/$CTMname.%04d" $dd $i]]} continue
|
|
||||||
if {[file exists [format "%s/$CTMname.%04d.gz" $dd $i]]} continue
|
|
||||||
break
|
|
||||||
}
|
|
||||||
set CTMnbr $i
|
|
||||||
|
|
||||||
set fo [open $d2/.ctm_status w]
|
|
||||||
puts $fo "$CTMname $CTMnbr"
|
|
||||||
close $fo
|
|
||||||
|
|
||||||
puts "Doing CTMname $CTMname CTMnbr $CTMnbr CTMdate $CTMdate"
|
|
||||||
|
|
||||||
exec sh -x -c "rm -f ${tmp}.*" >&@ stdout
|
|
||||||
|
|
||||||
set f1 [open "| ./ctm_scan $d1"]
|
|
||||||
# set this to minus one, to compensate for .ctm_status
|
|
||||||
set changes -1
|
|
||||||
} else {
|
|
||||||
set CTMnbr [lindex [exec cat $d2/.ctm_status] 1]
|
|
||||||
puts "Doing CTMname $CTMname CTMnbr $CTMnbr CTMdate $CTMdate"
|
|
||||||
exec sh -x -c "rm -f ${tmp}.*" >&@ stdout
|
|
||||||
set f1 [open /dev/null]
|
|
||||||
set changes 0
|
|
||||||
}
|
|
||||||
set f2 [open "| ./ctm_scan $d2"]
|
|
||||||
|
|
||||||
set fo_del [open $tmp.del w]
|
|
||||||
set fo_rmdir [open $tmp.rmdir w]
|
|
||||||
set fo_mkdir [open $tmp.mkdir w]
|
|
||||||
set fo_files [open $tmp.files w]
|
|
||||||
|
|
||||||
#####
|
|
||||||
# Type Name Mode User Group Barf Size Hash
|
# Type Name Mode User Group Barf Size Hash
|
||||||
|
|
||||||
proc CTMadd {t n m u g b s h} {
|
proc CTMadd {t n m u g b s h} {
|
||||||
global fo_files fo_mkdir changes d2
|
global fo_files fo_mkdir changes CTMref
|
||||||
|
|
||||||
puts stderr "A $b $t $n"
|
puts stderr "A $b $t $n"
|
||||||
|
incr changes
|
||||||
|
|
||||||
if {$t == "d"} {
|
if {$t == "d"} {
|
||||||
puts $fo_mkdir "CTMDM $n $u $g $m"
|
puts $fo_mkdir "CTMDM $n $u $g $m"
|
||||||
incr changes
|
} elseif {$t == "f"} {
|
||||||
return
|
puts $fo_files "CTMFM $n $u $g $m $h $s"
|
||||||
|
flush $fo_files
|
||||||
|
exec cat $CTMref/$n >@ $fo_files
|
||||||
|
puts $fo_files ""
|
||||||
|
} else {
|
||||||
|
puts "confused in CTMadd"
|
||||||
|
exit 0
|
||||||
}
|
}
|
||||||
puts $fo_files "CTMFM $n $u $g $m $h $s"
|
|
||||||
flush $fo_files
|
|
||||||
exec cat $d2/$n >@ $fo_files
|
|
||||||
puts $fo_files ""
|
|
||||||
incr changes
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
### Delete something
|
||||||
|
#############################################################################
|
||||||
|
# Type Name Mode User Group Barf Size Hash
|
||||||
|
|
||||||
proc CTMdel {t n m u g b s h} {
|
proc CTMdel {t n m u g b s h} {
|
||||||
global fo_del fo_rmdir changes
|
global fo_del fo_rmdir changes damage max_damage
|
||||||
|
|
||||||
puts stderr "D $b $t $n"
|
puts stderr "D $b $t $n"
|
||||||
|
incr damage
|
||||||
|
incr changes
|
||||||
|
|
||||||
|
if {$damage > $max_damage} {
|
||||||
|
puts "Too much damage"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
if {$t == "d"} {
|
if {$t == "d"} {
|
||||||
puts $fo_rmdir "CTMDR $n"
|
puts $fo_rmdir "CTMDR $n"
|
||||||
incr changes
|
} elseif {$t == "f"} {
|
||||||
return
|
puts $fo_del "CTMFR $n $h"
|
||||||
|
} else {
|
||||||
|
puts "confused in CTMdel"
|
||||||
|
exit 0
|
||||||
}
|
}
|
||||||
puts $fo_del "CTMFR $n $h"
|
|
||||||
incr changes
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
### Change something
|
||||||
|
#############################################################################
|
||||||
|
# Type Name Mode User Group Barf Size Hash
|
||||||
|
|
||||||
proc CTMchg {t1 n1 m1 u1 g1 b1 s1 h1 t2 n2 m2 u2 g2 b2 s2 h2} {
|
proc CTMchg {t1 n1 m1 u1 g1 b1 s1 h1 t2 n2 m2 u2 g2 b2 s2 h2} {
|
||||||
global fo_files d2 d1 changes
|
global fo_files CTMref CTMcopy changes damage CTMscratch
|
||||||
if {$t1 == "d" && $t2 == "d"} {
|
|
||||||
return
|
# Ignore attribute changes for directories
|
||||||
}
|
if {$t1 == "d" && $t2 == "d"} return
|
||||||
if {$t1 == "d" || $t2 == "d"} {
|
|
||||||
|
# turn file into dir or vice versa...
|
||||||
|
if {$t1 != $t2} {
|
||||||
CTMdel $t1 $n1 $m1 $u1 $g1 $b1 $s1 $h1
|
CTMdel $t1 $n1 $m1 $u1 $g1 $b1 $s1 $h1
|
||||||
CTMadd $t2 $n2 $m2 $u2 $g2 $b2 $s2 $h2
|
CTMadd $t2 $n2 $m2 $u2 $g2 $b2 $s2 $h2
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if {"x$h1" == "x$h2" && $s1 == $s2} {
|
|
||||||
return
|
# only files allowed past this poing...
|
||||||
puts stderr "M $b1$b2 $t1$t2 $n1"
|
if {$t1 != "f" && $t2 != "f"} {
|
||||||
puts $fo_files "CTMFA $n2 $u2 $g2 $m2 $h2"
|
puts "confused in CTMchg"
|
||||||
incr changes
|
exit 0
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Ignore attribute changes for files
|
||||||
|
if {"x$h1" == "x$h2" && $s1 == $s2} return
|
||||||
|
|
||||||
|
if {$s2 == 0} { incr damage }
|
||||||
|
incr changes
|
||||||
|
|
||||||
|
# If diff will deal with it...
|
||||||
if {$b1 == "0" && $b2 == "0"} {
|
if {$b1 == "0" && $b2 == "0"} {
|
||||||
set i [catch "exec diff -n $d1/$n1 $d2/$n2 > tmp" j]
|
set i [catch "exec diff -n $CTMcopy/$n1 $CTMref/$n2 > $CTMscratch" j]
|
||||||
set s [file size tmp]
|
set s [file size $CTMscratch]
|
||||||
if {$s < $s2} {
|
if {$s < $s2} {
|
||||||
puts stderr "E $b1$b2 $t1$t2 $n1"
|
puts stderr "E $b1$b2 $t1$t2 $n1"
|
||||||
puts $fo_files "CTMFN $n1 $u2 $g2 $m2 $h1 $h2 $s"
|
puts $fo_files "CTMFN $n1 $u2 $g2 $m2 $h1 $h2 $s"
|
||||||
flush $fo_files
|
flush $fo_files
|
||||||
exec cat tmp >@ $fo_files
|
exec cat $CTMscratch >@ $fo_files
|
||||||
puts $fo_files ""
|
puts $fo_files ""
|
||||||
incr changes
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
puts stderr "R $b1$b2 $t1$t2 $n1"
|
puts stderr "R $b1$b2 $t1$t2 $n1"
|
||||||
puts $fo_files "CTMFS $n2 $u2 $g2 $m2 $h1 $h2 $s2"
|
puts $fo_files "CTMFS $n2 $u2 $g2 $m2 $h1 $h2 $s2"
|
||||||
flush $fo_files
|
flush $fo_files
|
||||||
exec cat $d2/$n2 >@ $fo_files
|
exec cat $CTMref/$n2 >@ $fo_files
|
||||||
puts $fo_files ""
|
puts $fo_files ""
|
||||||
incr changes
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
#####
|
|
||||||
set l1 ""
|
#############################################################################
|
||||||
set l2 ""
|
### Do we already have this delta ?
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
proc find_delta {nbr} {
|
||||||
|
global CTMname CTMdest
|
||||||
|
if {[file exists [format "%s/$CTMname.%04d" $CTMdest $nbr]]} { return 1 }
|
||||||
|
if {[file exists [format "%s/$CTMname.%04d.gz" $CTMdest $nbr]]} { return 1 }
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
### The top level code...
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
set CTMSW /home/ctm/SW
|
||||||
|
|
||||||
|
cd $CTMSW
|
||||||
|
|
||||||
|
# Defaults...
|
||||||
|
set CTMapply 1
|
||||||
|
set CTMdont {^///}
|
||||||
|
set CTMmail {}
|
||||||
|
set CTMsuff {}
|
||||||
|
set CTMdate [exec date -u +%Y%m%d%H%M%SZ]
|
||||||
|
set CTMtmp {}
|
||||||
|
set CTMcopy {}
|
||||||
|
set CTMdest {}
|
||||||
|
set CTMprefix .
|
||||||
|
set CTMtest 0
|
||||||
|
set max_damage 100
|
||||||
|
|
||||||
|
set damage 0
|
||||||
|
set changes 0
|
||||||
|
|
||||||
|
source $argv
|
||||||
|
|
||||||
|
if {$CTMtmp == ""} {
|
||||||
|
set CTMtmp $CTMSW/../tmp/${CTMname}_${CTMsuff}
|
||||||
|
}
|
||||||
|
if {$CTMcopy == ""} {
|
||||||
|
set CTMcopy $CTMSW/../$CTMname
|
||||||
|
}
|
||||||
|
if {$CTMdest == ""} {
|
||||||
|
set CTMdest $CTMSW/../CTM-pub/$CTMname
|
||||||
|
}
|
||||||
|
|
||||||
|
set CTMscratch ${CTMtmp}.tmp
|
||||||
|
|
||||||
while 1 {
|
while 1 {
|
||||||
|
if { "$CTMcopy" != "" } {
|
||||||
|
set CTMnbr [lindex [exec cat $CTMcopy/.ctm_status] 1]
|
||||||
|
|
||||||
if {$l1 == ""} {gets $f1 l1}
|
if {![find_delta $CTMnbr]} {
|
||||||
|
puts "$CTMname delta $CTMnbr doesn't exist..."
|
||||||
if {$l2 == ""} {gets $f2 l2}
|
# exit 0
|
||||||
|
|
||||||
if {$l1 == "" && $l2 == ""} break
|
|
||||||
|
|
||||||
set n1 [lindex $l1 1]
|
|
||||||
set n2 [lindex $l2 1]
|
|
||||||
|
|
||||||
#if {[regexp $CTMdont /$n1]} { set l1 "" ; continue }
|
|
||||||
if {[regexp $CTMdont /$n2]} { set l2 "" ; continue }
|
|
||||||
|
|
||||||
# they're all the same...
|
|
||||||
if {$l1 == $l2} { set l1 "" ; set l2 "" ; continue }
|
|
||||||
|
|
||||||
if {$CTMignoreCVS } {
|
|
||||||
if {[regexp {/CVS/} $l1]} {set l1 ""; continue }
|
|
||||||
if {[regexp {/CVS/} $l2]} {set l2 ""; continue }
|
|
||||||
}
|
|
||||||
|
|
||||||
if {$l1 == "" } { eval CTMadd $l2 ; set l2 "" ; continue }
|
|
||||||
|
|
||||||
if {$l2 == "" } { eval CTMdel $l1 ; set l1 "" ; continue }
|
|
||||||
|
|
||||||
# if the name is the same we're safe...
|
|
||||||
if {$n1 == $n2} { eval CTMchg $l1 $l2 ; set l1 "" ; set l2 "" ; continue }
|
|
||||||
|
|
||||||
# To avoid this anomaly:
|
|
||||||
# A - d src/gnu/lib/libreadline/readline/Attic
|
|
||||||
# A 0 f src/gnu/lib/libreadline/readline/Attic/readline.h,v
|
|
||||||
# A 0 f src/gnu/lib/libreadline/readline.c,v
|
|
||||||
# D 0 f src/gnu/lib/libreadline/readline/readline.h,v
|
|
||||||
# D 0 f src/gnu/lib/libreadline/readline.c,v
|
|
||||||
# we have to make things somewhat complicated...
|
|
||||||
|
|
||||||
# if they have the same number of components...
|
|
||||||
set ll1 [llength [split $n1 /]]
|
|
||||||
set ll2 [llength [split $n2 /]]
|
|
||||||
if {$ll1 == $ll2} {
|
|
||||||
if {$n1 < $n2 } {
|
|
||||||
eval CTMdel $l1 ; set l1 "" ; continue
|
|
||||||
} else {
|
|
||||||
eval CTMadd $l2 ; set l2 "" ; continue
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if {$ll1 < $ll2} {
|
incr CTMnbr
|
||||||
eval CTMadd $l2 ; set l2 "" ; continue
|
|
||||||
|
if {[find_delta $CTMnbr]} {
|
||||||
|
puts "$CTMname delta $CTMnbr does already exist..."
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
set fo [open $CTMref/.ctm_status w]
|
||||||
|
puts $fo "$CTMname $CTMnbr"
|
||||||
|
close $fo
|
||||||
|
incr changes -1
|
||||||
|
|
||||||
|
set f1 [open "| ./ctm_scan $CTMcopy"]
|
||||||
} else {
|
} else {
|
||||||
eval CTMdel $l1 ; set l1 "" ; continue
|
set CTMnbr [lindex [exec cat $CTMref/.ctm_status] 1]
|
||||||
|
set f1 [open /dev/null]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
puts "Doing CTMname $CTMname CTMnbr $CTMnbr CTMdate $CTMdate"
|
||||||
|
flush stdout
|
||||||
|
exec sh -c "rm -f ${CTMtmp}.* ${CTMtmp}:*" >&@ stdout
|
||||||
|
|
||||||
|
set f2 [open "| ./ctm_scan $CTMref"]
|
||||||
|
|
||||||
|
set fo_del [open $CTMtmp.del w]
|
||||||
|
set fo_rmdir [open $CTMtmp.rmdir w]
|
||||||
|
set fo_mkdir [open $CTMtmp.mkdir w]
|
||||||
|
set fo_files [open $CTMtmp.files w]
|
||||||
|
|
||||||
|
set l1 ""
|
||||||
|
set l2 ""
|
||||||
|
|
||||||
|
while 1 {
|
||||||
|
|
||||||
|
if {$l1 == ""} {gets $f1 l1}
|
||||||
|
|
||||||
|
if {$l2 == ""} {gets $f2 l2}
|
||||||
|
|
||||||
|
if {$l1 == "" && $l2 == ""} break
|
||||||
|
|
||||||
|
set n1 [lindex $l1 1]
|
||||||
|
set n2 [lindex $l2 1]
|
||||||
|
|
||||||
|
if {[regexp $CTMdont /$n1]} { set l1 "" ; continue }
|
||||||
|
if {[regexp $CTMdont /$n2]} { set l2 "" ; continue }
|
||||||
|
|
||||||
|
# they're all the same...
|
||||||
|
if {$l1 == $l2} { set l1 "" ; set l2 "" ; continue }
|
||||||
|
|
||||||
|
if {$l1 == "" } { eval CTMadd $l2 ; set l2 "" ; continue }
|
||||||
|
|
||||||
|
if {$l2 == "" } { eval CTMdel $l1 ; set l1 "" ; continue }
|
||||||
|
|
||||||
|
# if the name is the same we're safe...
|
||||||
|
if {$n1 == $n2} {
|
||||||
|
eval CTMchg $l1 $l2
|
||||||
|
set l1 ""
|
||||||
|
set l2 ""
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
# To avoid this anomaly:
|
||||||
|
# A - d src/gnu/lib/libreadline/readline/Attic
|
||||||
|
# A 0 f src/gnu/lib/libreadline/readline/Attic/readline.h,v
|
||||||
|
# A 0 f src/gnu/lib/libreadline/readline.c,v
|
||||||
|
# D 0 f src/gnu/lib/libreadline/readline/readline.h,v
|
||||||
|
# D 0 f src/gnu/lib/libreadline/readline.c,v
|
||||||
|
# we have to make things somewhat complicated...
|
||||||
|
|
||||||
|
# if they have the same number of components...
|
||||||
|
set ll1 [llength [split $n1 /]]
|
||||||
|
set ll2 [llength [split $n2 /]]
|
||||||
|
if {$ll1 == $ll2} {
|
||||||
|
if {$n1 < $n2 } {
|
||||||
|
eval CTMdel $l1 ; set l1 "" ; continue
|
||||||
|
} else {
|
||||||
|
eval CTMadd $l2 ; set l2 "" ; continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if {$ll1 < $ll2} {
|
||||||
|
eval CTMadd $l2 ; set l2 "" ; continue
|
||||||
|
} else {
|
||||||
|
eval CTMdel $l1 ; set l1 "" ; continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
close $fo_del
|
||||||
|
close $fo_rmdir
|
||||||
|
close $fo_mkdir
|
||||||
|
close $fo_files
|
||||||
|
|
||||||
|
if {$damage > $max_damage} {
|
||||||
|
puts "Too much damage: $damage deletes"
|
||||||
|
exec sh -c "rm -f ${CTMtmp}.*"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if {!$changes} {
|
||||||
|
puts "no changes"
|
||||||
|
exec sh -c "rm -f ${CTMtmp}.*"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
exec echo CTM_BEGIN 2.0 $CTMname $CTMnbr $CTMdate $CTMprefix > $CTMtmp.begin
|
||||||
|
|
||||||
|
puts "Assembling delta"
|
||||||
|
flush stdout
|
||||||
|
set nm [format "%s.%04d%s" $CTMname $CTMnbr $CTMsuff]
|
||||||
|
|
||||||
|
set fdmd5 [open "|/sbin/md5 >> $CTMtmp.end" w]
|
||||||
|
set fdout [open "| gzip -9 > ${CTMtmp}:${nm}.gz" w]
|
||||||
|
|
||||||
|
foreach i {begin del rmdir mkdir files} {
|
||||||
|
exec cat $CTMtmp.$i >@$fdmd5
|
||||||
|
exec cat $CTMtmp.$i >@$fdout
|
||||||
|
}
|
||||||
|
puts $fdmd5 "CTM_END " nonewline
|
||||||
|
close $fdmd5 ; unset fdmd5
|
||||||
|
puts $fdout "CTM_END " nonewline
|
||||||
|
flush $fdout
|
||||||
|
exec cat $CTMtmp.end >@$fdout
|
||||||
|
close $fdout ; unset fdout
|
||||||
|
|
||||||
|
exec sh -x -c "rm -f ${CTMtmp}.*" >&@ stdout
|
||||||
|
|
||||||
|
if {$CTMtest} {
|
||||||
|
puts "testing, stopping now."
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
if {$CTMapply} {
|
||||||
|
puts "Applying delta"
|
||||||
|
flush stdout
|
||||||
|
exec sh -e -x -c "cd $CTMcopy ; $CTMSW/ctm -v -v -v ${CTMtmp}:${nm}.gz" >&@ stdout
|
||||||
|
}
|
||||||
|
puts "Moving delta"
|
||||||
|
flush stdout
|
||||||
|
exec mv ${CTMtmp}:${nm}.gz $CTMdest/.CTMtmp_${nm}.gz >&@ stdout
|
||||||
|
exec mv $CTMdest/.CTMtmp_${nm}.gz $CTMdest/${nm}.gz >&@ stdout
|
||||||
|
|
||||||
|
if {$CTMmail != ""} {
|
||||||
|
puts "Mailing delta"
|
||||||
|
flush stdout
|
||||||
|
exec $CTMSW/ctm_smail -m 50000 -c 300000 $CTMdest/${nm}.gz $CTMmail >&@ stdout
|
||||||
|
}
|
||||||
|
|
||||||
|
# If we did an absolute delta: stop.
|
||||||
|
if {$CTMsuff != ""} break
|
||||||
|
|
||||||
|
# Make a absolute delta (!) every 100 deltas
|
||||||
|
if {$CTMnbr % 100} break
|
||||||
|
|
||||||
|
# Make an absolute delta too...
|
||||||
|
set CTMref $CTMcopy
|
||||||
|
set CTMsuff A
|
||||||
|
set CTMcopy ""
|
||||||
|
set CTMmail ""
|
||||||
|
set CTMapply 0
|
||||||
}
|
}
|
||||||
|
puts "done."
|
||||||
close $fo_del
|
|
||||||
close $fo_rmdir
|
|
||||||
close $fo_mkdir
|
|
||||||
close $fo_files
|
|
||||||
|
|
||||||
exec echo CTM_BEGIN 2.0 $CTMname $CTMnbr $CTMdate $CTMprefix > $tmp.begin
|
|
||||||
exec echo -n "CTM_END " >> $tmp.end
|
|
||||||
set m [exec cat $tmp.begin $tmp.del $tmp.rmdir $tmp.mkdir $tmp.files $tmp.end | /sbin/md5]
|
|
||||||
exec echo "$m" >> $tmp.end
|
|
||||||
|
|
||||||
if {!$changes} {
|
|
||||||
puts "no changes"
|
|
||||||
exec sh -c "rm -f ${tmp}.*"
|
|
||||||
exit 0
|
|
||||||
}
|
|
||||||
flush stdout
|
|
||||||
set nm [format "%s.%04d%s" $CTMname $CTMnbr $CTMsuff]
|
|
||||||
|
|
||||||
exec cat $tmp.begin $tmp.del $tmp.rmdir $tmp.mkdir $tmp.files $tmp.end \
|
|
||||||
| gzip -9 > ${tmp}:${nm}.gz
|
|
||||||
|
|
||||||
exec sh -x -c "rm -f ${tmp}.*" >&@ stdout
|
|
||||||
|
|
||||||
if {$CTMapply} {
|
|
||||||
exec sh -e -x -c "cd $CTMcopy ; /u1/CTM/SW/ctm -v -v -v ${tmp}:${nm}.gz" >&@ stdout
|
|
||||||
}
|
|
||||||
exec mv ${tmp}:${nm}.gz $dd/.tmp_${nm}.gz >&@ stdout
|
|
||||||
exec mv $dd/.tmp_${nm}.gz $dd/${nm}.gz >&@ stdout
|
|
||||||
|
|
||||||
if {$CTMmail != ""} {
|
|
||||||
exec /u1/phk/ctm_smail/ctm_smail -m 50000 -c 300000 $dd/${nm}.gz $CTMmail >&@ stdout
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user