#! /bin/csh -f # checkin # Copyright 1984-2017 Cisco Systems, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. if ($#argv != 1) then echo "Usage: checkin " exit 1 endif # set M to machine type and W to workarea name set W = $1 if (!(-d $W)) then echo "Workarea ./$W not found." exit 1 endif set M = $W/boot/*/. if ($status || $#M != 1) then echo "Cannot determine machine type." exit 1 endif set M = $M:h set M = $M:t onintr error # This shell script checks sources and binaries in from a workarea to # the release directory. Invoke with the name of a machine type and # an optional workarea name. The workarea name defaults to the machine # type. set BACKUPDIR = $cwd:h/backup if (!(-d $BACKUPDIR)) then echo "creating backup directory $BACKUPDIR" mkdir $BACKUPDIR || goto error endif echo -n "have you updated $W/LOG? [y]: " set RESPONSE = $< if ("$RESPONSE" != "y" && "$RESPONSE" != "") goto error if (-e $W/scheme.1.in) then cmp scheme.1.in $W/scheme.1.in >& /dev/null if ($status != 0) then echo -n "Did you update the date in $W/scheme.1.in? [y]: " set RESPONSE = $< if ("$RESPONSE" != "y" && "$RESPONSE" != "") goto error endif endif set tmpsdirs = (. c mats s examples unicode makefiles csug release_notes wininstall bintar rpm pkg) set sdirs = () foreach x ($tmpsdirs) if (!(-e $x)) then echo "ERROR: ./$x does not exist" goto error endif if (!(-d $x)) then echo "ERROR: ./$x is not a directory" goto error endif test -d $W/$x && set sdirs = ($sdirs $x) end set tmpbdirs = (bin/$M boot/$M) set bdirs = () foreach x ($tmpbdirs) if ((-e $x) && !(-d $x)) then echo "ERROR: ./$x is not a directory" goto error endif test -d $W/$x && set bdirs = ($bdirs $x) end echo '*** running "make clean" in source directories ***' foreach x ($sdirs) switch ($x) case .: case unicode: case unicode/UNIDATA: case makefiles: case csug: case release_notes: breaksw case c: case s: case mats: case benchmarks: case examples: case wininstall: case bintar: case rpm: case pkg: (cd $W/$x; make clean >& /dev/null) breaksw default: echo "checkin error: unexpected sdir $x" goto error endsw end set ignorefiles = () set tmpsfiles = () foreach x ($sdirs) set y = `(cd $W; find $x/* -type f -print -o -type d -prune)` set tmpsfiles = ($tmpsfiles $y) end set sfiles = () foreach x ($tmpsfiles) if ("$x" == "./Makefile" || "$x" == "./Mf-install" || "$x" == "./Mf-boot" || "$x" == "c/config.h" || "$x" == "c/Mf-config") then set ignorefiles = ($ignorefiles $x) else cmp $W/$x $x >& /dev/null if ($status == 0) then set ignorefiles = ($ignorefiles $x) else set sfiles = ($sfiles $x) endif endif end if ($#sfiles == 0) echo "*** no source files found in ./$W ***" set tmpbfiles = () foreach x ($bdirs) set y = `(cd $W; find $x/* -type f -print -o -type d -prune)` set tmpbfiles = ($tmpbfiles $y) end set bfiles = () foreach x ($tmpbfiles) cmp $W/$x $x >& /dev/null if ($status == 0) then set ignorefiles = ($ignorefiles $x) else set bfiles = ($bfiles $x) endif end if ($#bfiles == 0) echo "*** no binary files found in ./$W ***" if ($#sfiles == 0 && $#bfiles == 0) goto delete set tmpsfiles = ($sfiles) set sfiles = () foreach x ($tmpsfiles) if ($x:h == ".") then set xpretty = $x:t else set xpretty = $x endif if (-e $x) then set comment = "" else set comment = " new" endif echo -n "check in$comment source file $W/$xpretty? [y]: " set RESPONSE = $< if ("$RESPONSE" == "" || "$RESPONSE" == "y") set sfiles = ($sfiles $x) end set tmpbfiles = ($bfiles) set bfiles = () foreach x ($tmpbfiles) if (-e $x) then set comment = "" else set comment = " new" endif echo -n "check in$comment binary file $W/$x? [y]: " set RESPONSE = $< if ("$RESPONSE" == "" || "$RESPONSE" == "y") set bfiles = ($bfiles $x) end set RESPONSE = "" while ("$RESPONSE" != "y") echo -n "proceed with check in? (y/n): " set RESPONSE = $< if ("$RESPONSE" == "n") exit 0 end set oldsfiles = () foreach x ($sfiles) if (-e $x) set oldsfiles = ($oldsfiles $x) end if ($#oldsfiles != 0) then echo "backing up old versions of source files" if (!(-f $BACKUPDIR/seqno)) then set seqno = 0 else set seqno = `cat $BACKUPDIR/seqno` endif set backuproot = $BACKUPDIR/$seqno @ seqno = $seqno + 1 echo $seqno > $BACKUPDIR/seqno echo "backup directory is $backuproot" mkdir $backuproot || goto error set n = 4 echo -n " " foreach x ($oldsfiles) set i = `echo "$x" | wc -c` @ n = $n + $i + 1 if ($n > 78) then echo "" echo -n " " @ n = $i + 4 endif echo -n "$x " set y = $backuproot/$x:h if (!(-d $y)) then mkdir -p $y || goto error endif rm -f $y/$x:t || goto error mv $x $y || goto error gzip $y/$x:t || goto error end echo "" endif set oldbfiles = () foreach x ($bfiles) if (-e $x) set oldbfiles = ($oldbfiles $x) end if ($#oldbfiles != 0) then echo "deleting old versions of binary files" set n = 4 echo -n " " foreach x ($oldbfiles) set i = `echo "$x" | wc -c` @ n = $n + $i + 1 if ($n > 78) then echo "" echo -n " " @ n = $i + 4 endif echo -n "$x " rm -f $x || goto error end echo "" endif if ($#sfiles != 0) then echo "moving new source files to release directory" set n = 4 echo -n " " foreach x ($sfiles) set i = `echo "$x" | wc -c` @ n = $n + $i + 1 if ($n > 78) then echo "" echo -n " " @ n = $i + 4 endif echo -n "$x " mv $W/$x $x || goto error end echo "" endif if ($#bfiles != 0) then echo "moving new binary files to release directory" set n = 4 echo -n " " foreach x ($bfiles) set i = `echo "$x" | wc -c` @ n = $n + $i + 1 if ($n > 78) then echo "" echo -n " " @ n = $i + 4 endif echo -n "$x " if (!(-e $x:h)) mkdir -p $x:h || goto error mv $W/$x $x || goto error end echo "" endif delete: set tmpfiles = `(cd $W; find . -name zlib -prune -o -name lz4 -prune -o -type f -print)` set files = () foreach x ($tmpfiles) set files = ($x $files) set tmpignorefiles = ($ignorefiles) while ($#tmpignorefiles) if ($x == ./$tmpignorefiles[1] || $x == $tmpignorefiles[1]) then shift files break endif shift tmpignorefiles end end if ($#files == 0) then set delete = "y" else set delete = "n" echo "*** new or modified files remain in ./$W" set n = 4 echo -n " " foreach x ($files) set i = `echo "$x" | wc -c` @ n = $n + $i + 1 if ($n > 78) then echo "" echo -n " " @ n = $i + 4 endif echo -n "$x " end echo "" endif echo -n "delete ./$W? [$delete]: " set RESPONSE = $< if ("$RESPONSE" == "") set RESPONSE = $delete if ("$RESPONSE" == "y") then rm -rf $W || goto error endif exit 0 error: echo "" echo "quitting (error occurred)." exit 1