Index: ossp-pkg/shtool/ChangeLog RCS File: /v/ossp/cvs/ossp-pkg/shtool/ChangeLog,v rcsdiff -q -kk '-r1.211' '-r1.212' -u '/v/ossp/cvs/ossp-pkg/shtool/ChangeLog,v' 2>/dev/null --- ChangeLog 2005/06/15 08:11:16 1.211 +++ ChangeLog 2005/06/15 08:14:35 1.212 @@ -20,6 +20,9 @@ *) Add IBM OS/400 PASE support to "shtool platform". [Henri Gomez ] + *) Adjust copyright for year 2005. + [Ralf S. Engelschall] + Changes between 2.0.0 and 2.0.1 (02-Jul-2004 to 11-Aug-2004): *) Added M4 language output to "shtool version". Index: ossp-pkg/shtool/Makefile.in RCS File: /v/ossp/cvs/ossp-pkg/shtool/Makefile.in,v rcsdiff -q -kk '-r1.50' '-r1.51' -u '/v/ossp/cvs/ossp-pkg/shtool/Makefile.in,v' 2>/dev/null --- Makefile.in 2004/02/12 16:06:26 1.50 +++ Makefile.in 2005/06/15 08:14:35 1.51 @@ -1,6 +1,6 @@ ## ## Makefile for GNU shtool -## Copyright (c) 1999-2004 Ralf S. Engelschall +## Copyright (c) 1999-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/README RCS File: /v/ossp/cvs/ossp-pkg/shtool/README,v rcsdiff -q -kk '-r1.106' '-r1.107' -u '/v/ossp/cvs/ossp-pkg/shtool/README,v' 2>/dev/null --- README 2004/08/11 19:14:44 1.106 +++ README 2005/06/15 08:14:35 1.107 @@ -5,7 +5,7 @@ |___/_| |_|\__\___/ \___/|_| GNU shtool -- The GNU Portable Shell Tool - Copyright (c) 1994-2004 Ralf S. Engelschall + Copyright (c) 1994-2005 Ralf S. Engelschall http://www.gnu.org/software/shtool/ ftp://ftp.gnu.org/gnu/shtool/ Index: ossp-pkg/shtool/configure.ac RCS File: /v/ossp/cvs/ossp-pkg/shtool/configure.ac,v rcsdiff -q -kk '-r1.5' '-r1.6' -u '/v/ossp/cvs/ossp-pkg/shtool/configure.ac,v' 2>/dev/null --- configure.ac 2004/01/01 16:54:20 1.5 +++ configure.ac 2005/06/15 08:14:35 1.6 @@ -1,6 +1,6 @@ dnl ## dnl ## configure.ac -- Autoconf source for GNU shtool -dnl ## Copyright (c) 1999-2004 Ralf S. Engelschall +dnl ## Copyright (c) 1999-2005 Ralf S. Engelschall dnl ## dnl ## This file is part of shtool and free software; you can redistribute dnl ## it and/or modify it under the terms of the GNU General Public @@ -24,7 +24,7 @@ SHTOOL_VERSION_STR="`sh sh.version -l txt -d long VERSION`" sh sh.echo -e "Configuring %BGNU shtool%b (Portable Shell Tool), version %B${SHTOOL_VERSION_STR}%b" -echo "Copyright (c) 1994-2004 Ralf S. Engelschall " +echo "Copyright (c) 1994-2005 Ralf S. Engelschall " AC_SUBST(SHTOOL_VERSION_STR) AC_PREFIX_DEFAULT(/usr/local) Index: ossp-pkg/shtool/devtool.func RCS File: /v/ossp/cvs/ossp-pkg/shtool/devtool.func,v rcsdiff -q -kk '-r1.5' '-r1.6' -u '/v/ossp/cvs/ossp-pkg/shtool/devtool.func,v' 2>/dev/null --- devtool.func 2004/02/18 09:57:19 1.5 +++ devtool.func 2005/06/15 08:14:35 1.6 @@ -1,6 +1,6 @@ ## ## devtool.func -- Development Tool Functions -## Copyright (c) 2001-2004 Ralf S. Engelschall +## Copyright (c) 2001-2005 Ralf S. Engelschall ## devtool_require () { Index: ossp-pkg/shtool/sh.arx RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.arx,v rcsdiff -q -kk '-r1.22' '-r1.23' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.arx,v' 2>/dev/null --- sh.arx 2005/06/15 08:11:16 1.22 +++ sh.arx 2005/06/15 08:14:35 1.23 @@ -1,6 +1,6 @@ ## ## arx -- Extended archive command -## Copyright (c) 1999-2004 Ralf S. Engelschall +## Copyright (c) 1999-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.echo RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.echo,v rcsdiff -q -kk '-r1.38' '-r1.39' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.echo,v' 2>/dev/null --- sh.echo 2004/02/12 16:06:26 1.38 +++ sh.echo 2005/06/15 08:14:35 1.39 @@ -1,6 +1,6 @@ ## ## echo -- Print string with optional construct expansion -## Copyright (c) 1998-2004 Ralf S. Engelschall +## Copyright (c) 1998-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.fixperm RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.fixperm,v rcsdiff -q -kk '-r1.18' '-r1.19' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.fixperm,v' 2>/dev/null --- sh.fixperm 2004/02/12 16:06:26 1.18 +++ sh.fixperm 2005/06/15 08:14:35 1.19 @@ -1,6 +1,6 @@ ## ## fixperm -- Fix file permissions inside a source tree -## Copyright (c) 1996-2004 Ralf S. Engelschall +## Copyright (c) 1996-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.install RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.install,v rcsdiff -q -kk '-r1.31' '-r1.32' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.install,v' 2>/dev/null --- sh.install 2004/02/12 16:06:26 1.31 +++ sh.install 2005/06/15 08:14:35 1.32 @@ -1,6 +1,6 @@ ## ## install -- Install a program, script or datafile -## Copyright (c) 1997-2004 Ralf S. Engelschall +## Copyright (c) 1997-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.mdate RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.mdate,v rcsdiff -q -kk '-r1.14' '-r1.15' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.mdate,v' 2>/dev/null --- sh.mdate 2004/02/12 16:06:26 1.14 +++ sh.mdate 2005/06/15 08:14:35 1.15 @@ -1,7 +1,7 @@ ## ## mdate -- Pretty-print modification time of a file or dir ## Copyright (c) 1995-1997 Free Software Foundation, Inc. -## Copyright (c) 1998-2004 Ralf S. Engelschall +## Copyright (c) 1998-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.mkdir RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.mkdir,v rcsdiff -q -kk '-r1.24' '-r1.25' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.mkdir,v' 2>/dev/null --- sh.mkdir 2004/02/12 16:06:27 1.24 +++ sh.mkdir 2005/06/15 08:14:35 1.25 @@ -1,6 +1,6 @@ ## ## mkdir -- Make one or more directories -## Copyright (c) 1996-2004 Ralf S. Engelschall +## Copyright (c) 1996-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.mkln RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.mkln,v rcsdiff -q -kk '-r1.18' '-r1.19' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.mkln,v' 2>/dev/null --- sh.mkln 2004/02/12 16:06:27 1.18 +++ sh.mkln 2005/06/15 08:14:35 1.19 @@ -1,6 +1,6 @@ ## ## mkln -- Make link with calculation of relative paths -## Copyright (c) 1998-2004 Ralf S. Engelschall +## Copyright (c) 1998-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.mkshadow RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.mkshadow,v rcsdiff -q -kk '-r1.24' '-r1.25' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.mkshadow,v' 2>/dev/null --- sh.mkshadow 2004/02/12 16:06:27 1.24 +++ sh.mkshadow 2005/06/15 08:14:35 1.25 @@ -1,6 +1,6 @@ ## ## mkshadow -- Make a shadow tree through symbolic links -## Copyright (c) 1998-2004 Ralf S. Engelschall +## Copyright (c) 1998-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.move RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.move,v rcsdiff -q -kk '-r1.20' '-r1.21' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.move,v' 2>/dev/null --- sh.move 2004/02/12 16:06:27 1.20 +++ sh.move 2005/06/15 08:14:35 1.21 @@ -1,6 +1,6 @@ ## ## move -- Move files with simultaneous substitution -## Copyright (c) 1999-2004 Ralf S. Engelschall +## Copyright (c) 1999-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.path RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.path,v rcsdiff -q -kk '-r1.27' '-r1.28' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.path,v' 2>/dev/null --- sh.path 2004/02/12 16:06:27 1.27 +++ sh.path 2005/06/15 08:14:35 1.28 @@ -1,6 +1,6 @@ ## ## path -- Deal with program paths -## Copyright (c) 1998-2004 Ralf S. Engelschall +## Copyright (c) 1998-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.platform RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.platform,v rcsdiff -q -kk '-r1.11' '-r1.12' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.platform,v' 2>/dev/null --- sh.platform 2005/06/11 10:58:10 1.11 +++ sh.platform 2005/06/15 08:14:35 1.12 @@ -1,6 +1,6 @@ ## ## platform -- Platform Identification Utility -## Copyright (c) 2003-2004 Ralf S. Engelschall +## Copyright (c) 2003-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.prop RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.prop,v rcsdiff -q -kk '-r1.18' '-r1.19' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.prop,v' 2>/dev/null --- sh.prop 2004/02/12 16:06:27 1.18 +++ sh.prop 2005/06/15 08:14:35 1.19 @@ -1,6 +1,6 @@ ## ## prop -- Display progress with a running propeller -## Copyright (c) 1998-2004 Ralf S. Engelschall +## Copyright (c) 1998-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.rotate RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.rotate,v co -q -kk -p'1.11' '/v/ossp/cvs/ossp-pkg/shtool/sh.rotate,v' | diff -u /dev/null - -L'ossp-pkg/shtool/sh.rotate' 2>/dev/null --- ossp-pkg/shtool/sh.rotate +++ - 2024-05-10 02:25:34.442024124 +0200 @@ -0,0 +1,590 @@ +## +## rotate -- Logfile rotation +## Copyright (c) 2001-2005 Ralf S. Engelschall +## +## This file is part of shtool and free software; you can redistribute +## it and/or modify it under the terms of the GNU General Public +## License as published by the Free Software Foundation; either version +## 2 of the License, or (at your option) any later version. +## +## This file is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +## USA, or contact Ralf S. Engelschall . +## + +str_tool="rotate" +str_usage="[-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files ] [-s|--size ] [-c|--copy] [-r|--remove] [-a|--archive-dir ] [-z|--compress [:]] [-b|--background] [-d|--delay] [-p|--pad ] [-m|--mode ] [-o|--owner ] [-g|--group ] [-M|--migrate ] [-P|--prolog ] [-E|--epilog ] [...]" +arg_spec="1+" +opt_spec="v.t.f.n:s:c.r.a:z:b.d.p:o:g:m:M:P:E:" +opt_alias="v:verbose,t:trace,f:force,n:num-files,s:size,c:copy,r:remove,a:archive-dir,z:compress,b:background,d:delay,p:pad,o:owner,g:group,m:mode,M:migrate,P:prolog,E:epilog" +opt_v=no +opt_t=no +opt_f=no +opt_n=10 +opt_s="" +opt_c=no +opt_r=no +opt_a="" +opt_z="" +opt_b=no +opt_d=no +opt_p=1 +opt_o="" +opt_g="" +opt_m="" +opt_M="" +opt_P="" +opt_E="" + +. ./sh.common + +# make sure we have at least one file to rotate +if [ ".$opt_n" = .0 ]; then + echo "$msgprefix:Error: invalid argument \`$opt_n' to option -n." 1>&2 + shtool_exit 1 +fi + +# canonicalize -s option argument +if [ ".$opt_s" != . ]; then + if [ ".`expr $opt_s : '[0-9]*$'`" != .0 ]; then + : + elif [ ".`expr $opt_s : '[0-9]*[Kk]$'`" != .0 ]; then + opt_s=`expr $opt_s : '\([0-9]*\)[Kk]$'` + opt_s=`expr $opt_s \* 1024` + elif [ ".`expr $opt_s : '[0-9]*[Mm]$'`" != .0 ]; then + opt_s=`expr $opt_s : '\([0-9]*\)[Mm]$'` + opt_s=`expr $opt_s \* 1048576` # 1024*1024 + elif [ ".`expr $opt_s : '[0-9]*[Gg]$'`" != .0 ]; then + opt_s=`expr $opt_s : '\([0-9]*\)[Gg]$'` + opt_s=`expr $opt_s \* 1073741824` # 1024*1024*1024 + else + echo "$msgprefix:Error: invalid argument \`$opt_s' to option -s." 1>&2 + shtool_exit 1 + fi +fi + +# option -d/-z consistency +if [ ".$opt_d" = .yes ] && [ ".$opt_z" = . ]; then + echo "$msgprefix:Error: option -d requires option -z." 1>&2 + shtool_exit 1 +fi + +# make sure target directory exists +if [ ".$opt_a" != . ]; then + if [ ! -d $opt_a ]; then + if [ ".$opt_f" = .no ]; then + echo "$msgprefix:Error: archive directory \`$opt_a' does not exist." 1>&2 + shtool_exit 1 + fi + mkdir $opt_a || shtool_exit $? + chmod 755 $opt_a + fi + if [ ! -w $opt_a ]; then + echo "$msgprefix:Error: archive directory \`$opt_a' not writable." 1>&2 + shtool_exit 1 + fi +fi + +# determine compression approach +if [ ".$opt_z" != . ]; then + comp_lvl="$opt_z" + comp_prg="" + case $comp_lvl in + *:* ) eval `echo $comp_lvl |\ + sed -e 's%^\(.*\):\(.*\)$%comp_prg="\1"; comp_lvl="\2"%'` ;; + esac + + # compression level consistency + case $comp_lvl in + [0-9] ) + ;; + * ) echo "$msgprefix:Error: invalid compression level \`$comp_lvl'" 1>&2 + shtool_exit 1 + ;; + esac + + # determine a suitable compression tool + if [ ".$comp_prg" = . ]; then + # check whether the test command supports the -x option + if [ -x /bin/sh ] 2>/dev/null; then + minusx="-x" + else + minusx="-r" + fi + # search for tools in $PATH + paths="`echo $PATH |\ + sed -e 's%/*:%:%g' -e 's%/*$%%' \ + -e 's/^:/.:/' -e 's/::/:.:/g' -e 's/:$/:./' \ + -e 's/:/ /g'`" + for prg in bzip2 gzip compress; do + for path in $paths; do + if [ $minusx "$path/$prg" ] && [ ! -d "$path/$prg" ]; then + comp_prg="$prg" + break + fi + done + if [ ".$comp_prg" != . ]; then + break + fi + done + if [ ".$comp_prg" = . ]; then + echo "$msgprefix:Error: no suitable compression tool found in \$PATH" 1>&2 + shtool_exit 1 + fi + fi + + # determine standard compression extension + # and make sure it is a known tool + case $comp_prg in + */bzip2 | bzip2 ) comp_ext="bz2" comp_lvl="-$comp_lvl" ;; + */gzip | gzip ) comp_ext="gz" comp_lvl="-$comp_lvl" ;; + */compress | compress ) comp_ext="Z"; comp_lvl="" ;; + * ) echo "$msgprefix:Error: tool \`$comp_prg' is not a known compression tool" 1>&2 + shtool_exit 1 + ;; + esac + comp_suf=".$comp_ext" +fi + +# iterate over all given logfile arguments +for file in $*; do + # make sure the logfile exists + if [ ! -f $file ]; then + if [ ".$opt_f" = .yes ]; then + continue + fi + echo "$msgprefix:Error: logfile \`$file' not found" 1>&2 + shtool_exit 1 + fi + + # determine log directory (where original logfile is placed) + ldir="." + case $file in + */* ) eval `echo $file | sed -e 's%^\(.*\)/\([^/]*\)$%ldir="\1"; file="\2";%'` ;; + esac + + # determine archive directory (where rotated logfiles are placed) + adir="$ldir" + if [ ".$opt_a" != . ]; then + case "$opt_a" in + /* | ./* ) adir="$opt_a" ;; + * ) adir="$ldir/$opt_a" ;; + esac + fi + + # optionally take logfile size into account + if [ ".$opt_s" != . ]; then + # determine size of logfile + set -- `env -i /bin/ls -l "$ldir/$file" | sed -e "s;$ldir/$file;;" |\ + sed -e 's; -> .*$;;' -e 's;[ ][ ]*; ;g'` + n=`expr $# - 3` + eval "size=\`echo \${$n}\`" + + # skip logfile if size is still too small + if [ $size -lt $opt_s ]; then + if [ ".$opt_v" = .yes ]; then + echo "$ldir/$file: still too small in size -- skipping" + fi + continue + fi + fi + + # verbosity + if [ ".$opt_v" = .yes ]; then + echo "rotating $ldir/$file" + fi + + # execute prolog + if [ ".$opt_P" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "$opt_P" + fi + eval $opt_P + [ $? -ne 0 ] && shtool_exit $? + fi + + # kick away out-rotated logfile + n=`expr $opt_n - 1` + n=`echo dummy | awk "{ printf(\"%0${opt_p}d\", n); }" n=$n` + if [ -f "${adir}/${file}.${n}${comp_suf}" ]; then + # optionally migrate away the out-rotated logfile + if [ ".$opt_M" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "$opt_M ${adir}/${file}.${n}${comp_suf}" + fi + eval "$opt_M ${adir}/${file}.${n}${comp_suf}" + [ $? -ne 0 ] && shtool_exit $? + fi + # finally get rid of the out-rotated logfile + if [ ".$opt_t" = .yes ]; then + echo "rm -f ${adir}/${file}.${n}${comp_suf}" + fi + rm -f ${adir}/${file}.${n}${comp_suf} || shtool_exit $? + fi + + # rotate already archived logfiles + while [ $n -gt 0 ]; do + m=$n + n=`expr $n - 1` + n=`echo dummy | awk "{ printf(\"%0${opt_p}d\", n); }" n=$n` + if [ $n -eq 0 ] && [ ".$opt_d" = .yes ]; then + # special case: first rotation file under delayed compression situation + if [ ! -f "${adir}/${file}.${n}" ]; then + continue + fi + + # compress file (delayed) + if [ ".$opt_b" = .yes ]; then + if [ ".$opt_t" = .yes ]; then + echo "mv ${adir}/${file}.${n} ${adir}/${file}.${m}" + fi + mv ${adir}/${file}.${n} ${adir}/${file}.${m} || shtool_exit $? + if [ ".$opt_t" = .yes ]; then + echo "(${comp_prg} ${comp_lvl} <${adir}/${file}.${m} >${adir}/${file}.${m}${comp_suf}; rm -f ${adir}/${file}.${m}) &" + fi + ( ${comp_prg} ${comp_lvl} \ + <${adir}/${file}.${m} \ + >${adir}/${file}.${m}${comp_suf} || shtool_exit $? + rm -f ${adir}/${file}.${m} || shtool_exit $? + ) /dev/null 2>&1 & + else + if [ ".$opt_t" = .yes ]; then + echo "${comp_prg} ${comp_lvl} <${adir}/${file}.${n} >${adir}/${file}.${m}${comp_suf}" + fi + ${comp_prg} ${comp_lvl} \ + <${adir}/${file}.${n} \ + >${adir}/${file}.${m}${comp_suf} || shtool_exit $? + if [ ".$opt_t" = .yes ]; then + echo "rm -f ${adir}/${file}.${n}" + fi + rm -f ${adir}/${file}.${n} || shtool_exit $? + fi + + # fix file attributes + if [ ".$opt_o" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "chown $opt_o ${adir}/${file}.${m}${comp_suf}" + fi + chown $opt_o ${adir}/${file}.${m}${comp_suf} || shtool_exit $? + fi + if [ ".$opt_g" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "chgrp $opt_g ${adir}/${file}.${m}${comp_suf}" + fi + chgrp $opt_g ${adir}/${file}.${m}${comp_suf} || shtool_exit $? + fi + if [ ".$opt_m" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "chmod $opt_m ${adir}/${file}.${m}${comp_suf}" + fi + chmod $opt_m ${adir}/${file}.${m}${comp_suf} || shtool_exit $? + fi + else + # standard case: second and following rotation file + if [ ! -f "${adir}/${file}.${n}${comp_suf}" ]; then + continue + fi + if [ ".$opt_t" = .yes ]; then + echo "mv ${adir}/${file}.${n}${comp_suf} ${adir}/${file}.${m}${comp_suf}" + fi + mv ${adir}/${file}.${n}${comp_suf} ${adir}/${file}.${m}${comp_suf} || shtool_exit $? + fi + done + + # move away current logfile + if [ ".$opt_c" = .yes ]; then + # approach: copy[+truncate] + if [ ".$opt_t" = .yes ]; then + echo "cp -p ${ldir}/${file} ${adir}/${file}.${n}" + fi + cp -p ${ldir}/${file} ${adir}/${file}.${n} || shtool_exit $? + if [ ".$opt_r" = .no ]; then + if [ ".$opt_t" = .yes ]; then + echo "cp /dev/null ${ldir}/${file}" + fi + cp /dev/null ${ldir}/${file} || shtool_exit $? + fi + else + # approach: move[+touch] + if [ ".$opt_t" = .yes ]; then + echo "mv ${ldir}/${file} ${adir}/${file}.${n}" + fi + mv ${ldir}/${file} ${adir}/${file}.${n} || shtool_exit $? + if [ ".$opt_r" = .no ]; then + if [ ".$opt_t" = .yes ]; then + echo "touch ${ldir}/${file}" + fi + touch ${ldir}/${file} || shtool_exit $? + # fix file attributes + if [ ".$opt_o" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "chown $opt_o ${ldir}/${file}" + fi + chown $opt_o ${ldir}/${file} || shtool_exit $? + fi + if [ ".$opt_g" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "chgrp $opt_g ${ldir}/${file}" + fi + chgrp $opt_g ${ldir}/${file} || shtool_exit $? + fi + if [ ".$opt_m" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "chmod $opt_m ${ldir}/${file}" + fi + chmod $opt_m ${ldir}/${file} || shtool_exit $? + fi + fi + fi + + # regular compression step + if [ ".$opt_z" != . ] && [ ".$opt_d" = .no ]; then + # compress file + if [ ".$opt_b" = .yes ]; then + if [ ".$opt_t" = .yes ]; then + echo "(${comp_prg} ${comp_lvl} <${adir}/${file}.${n} >${adir}/${file}.${n}${comp_suf}; rm -f ${adir}/${file}.${n}) &" + fi + ( ${comp_prg} ${comp_lvl} \ + <${adir}/${file}.${n} \ + >${adir}/${file}.${n}${comp_suf} || shtool_exit $? + rm -f ${adir}/${file}.${n} || shtool_exit $? + ) /dev/null 2>&1 & + else + if [ ".$opt_t" = .yes ]; then + echo "${comp_prg} ${comp_lvl} <${adir}/${file}.${n} >${adir}/${file}.${n}${comp_suf}" + fi + ${comp_prg} ${comp_lvl} \ + <${adir}/${file}.${n} \ + >${adir}/${file}.${n}${comp_suf} || shtool_exit $? + if [ ".$opt_t" = .yes ]; then + echo "rm -f ${opt_a}${file}.${n}" + fi + rm -f ${adir}/${file}.${n} || shtool_exit $? + fi + + # fix file attributes + if [ ".$opt_o" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "chown $opt_o ${adir}/${file}.${n}${comp_suf}" + fi + chown $opt_o ${adir}/${file}.${n}${comp_suf} || shtool_exit $? + fi + if [ ".$opt_g" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "chgrp $opt_g ${adir}/${file}.${n}${comp_suf}" + fi + chgrp $opt_g ${adir}/${file}.${n}${comp_suf} || shtool_exit $? + fi + if [ ".$opt_m" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "chmod $opt_m ${adir}/${file}.${n}${comp_suf}" + fi + chmod $opt_m ${adir}/${file}.${n}${comp_suf} || shtool_exit $? + fi + fi + + # execute epilog + if [ ".$opt_E" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "$opt_E" + fi + eval $opt_E + [ $? -ne 0 ] && shtool_exit $? + fi +done + +shtool_exit 0 + +## +## manual page +## + +=pod + +=head1 NAME + +B - B log file rotation + +=head1 SYNOPSIS + +B +[B<-v>|B<--verbose>] +[B<-t>|B<--trace>] +[B<-f>|B<--force>] +[B<-n>|B<--num-files> I] +[B<-s>|B<--size> I] +[B<-c>|B<--copy>] +[B<-r>|B<--remove>] +[B<-a>|B<--archive-dir> I] +[B<-z>|B<--compress> [I:]I] +[B<-b>|B<--background>] +[B<-d>|B<--delay>] +[B<-p>|B<--pad> I] +[B<-m>|B<--mode> I] +[B<-o>|B<--owner> I] +[B<-g>|B<--group> I] +[B<-M>|B<--migrate> I] +[B<-P>|B<--prolog> I] +[B<-E>|B<--epilog> I] +I [I ...] + +=head1 DESCRIPTION + +This command rotates a logfile I by subsequently creating up to +I (optionally compressed) archive files of it. Archive files are +named "I.I[I" where I is the +version number, 0 being the newest and "I-1" the oldest. + +A rotation step consists of the following steps + +1. remove last archive file +2. shift archive file numbers +3. create archive file 0 from I +4. truncate/recreate I + +=head1 OPTIONS + +The following command line options are available. + +=over 4 + +=item B<-v>, B<--verbose> + +Display some processing information. + +=item B<-t>, B<--trace> + +Enable the output of the essential shell commands which are executed. + +=item B<-f>, B<--force> + +Force silent creation of archive directory if it does not exists. Also +skip missing intermediate logfiles in the rotation step. Default is to +exit with error in both cases. FIXME + +=item B<-n>, B<--num-files> I + +Create I archive files. Default is 10. + +=item B<-s>, B<--size> I + +Only rotate if logfile exceeds I. The argument I can be +specified also with the trailing units C (kilo), C (mega) or C +(giga). The "prolog" and "epilog" are only executed if rotation actually +takes place. + +=item B<-c>, B<--copy> + +Copy I to archive then truncate original. The default is to move +I to archive. + +Unless an application reopens its logfile it will continue to write +to the same file. In the default move case the application will write +to the archive which it had previously opened as I. In the copy +case the application will write to the original I. The drawback +of the copy approach is that logfile entries are lost when they are +written to I between the execution of the copy and the truncation +operation. The drawback of the move approach is that the application +needs to detect the move or must be triggered to reopen its log (i.e. +through epilog). + +=item B<-r>, B<--remove> + +Removes I after rotation instead of providing a new empty file. + +=item B<-a>, B<--archive-dir> I + +Specify the archive directory. Default is to create archives in the same +directory as I is located. + +=item B<-z>, B<--compress> [I:]I + +Enables compression of archive files with compression level I By +default, the tools bzip2(1), gzip(1) and compress(1) are searched for in +C<$PATH>, but one also can override this by prefixing the compression +level with one of the three particular tool names. + +=item B<-b>, B<--background> + +Enable background compression. + +=item B<-d>, B<--delay> + +Delays the compression of archive file number 0. This is useful if +``B<-c>'' is not used, because an application might continue to write to +archive file 0 through an already open file handle. + +=item B<-p>, B<--pad> I + +Enables padding with leading zeros in the I part of the filename +"I.II". The default padding I is 1. +This is interesting if more than 10 archive files are used, because it +leads to still sorted directory listings. + +=item B<-m>, B<--mode> I + +The file mode applied to the created files, see chmod(1). Setting mode to +C<-> skips this step and leaves the operating system default which is +usually based on umask(1). Some file modes require superuser privileges +to be set. Default is 0755. + +=item B<-o>, B<--owner> I + +The file owner name or id applied to the created files, see chown(1). This +option requires superuser privileges to execute. Default is to skip this +step and leave the operating system default which is usually based on +the executing uid or the parent setuid directory. + +=item B<-g>, B<--group> I + +The file group name or id applied to the created files, see chgrp(1). This +option requires superuser privileges to execute to the fullest extend, +otherwise the choice of I is limited on most operating systems. +Default is to skip this step and leave the operating system default +which is usually based on the executing gid or the parent setgid +directory. + +=item B<-M>, B<--migrate> I + +Execute a "migration" command just before the archive file number +I-1 is removed from the filesystem. The specified I receives +the archive filename as command line argument. + +=item B<-P>, B<--prolog> I + +Execute a "prolog" command before the rotation step. Useful in +conjunction with B<-s>. + +=item B<-E>, B<--epilog> I + +Execute a "epilog" command after the rotation step. Useful in +conjunction with B<-s>. + +=back + +=head1 EXAMPLE + + # shell script + shtool rotate -n10 -s1M -zbzip2:9 -d -r /var/log/ap.access.log + shtool rotate -n5 -s128K -zbzip2:9 -d -r /var/log/ap.error.log + apachectl graceful + +=head1 HISTORY + +The B B command was originally written by Ralf S. +Engelschall Erse@engelschall.comE in 2001 for B. +Its development was prompted by the need to have a flexible +logfile rotation facility in the B project. + +=head1 SEE ALSO + +shtool(1), BSD newsyslog(8). + +=cut + Index: ossp-pkg/shtool/sh.scpp RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.scpp,v rcsdiff -q -kk '-r1.26' '-r1.27' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.scpp,v' 2>/dev/null --- sh.scpp 2004/02/12 16:06:27 1.26 +++ sh.scpp 2005/06/15 08:14:35 1.27 @@ -1,6 +1,6 @@ ## ## scpp -- Sharing C Pre-Processor -## Copyright (c) 1999-2004 Ralf S. Engelschall +## Copyright (c) 1999-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.slo RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.slo,v rcsdiff -q -kk '-r1.24' '-r1.25' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.slo,v' 2>/dev/null --- sh.slo 2004/02/12 16:06:27 1.24 +++ sh.slo 2005/06/15 08:14:35 1.25 @@ -1,6 +1,6 @@ ## ## slo -- Separate linker options by library class -## Copyright (c) 1998-2004 Ralf S. Engelschall +## Copyright (c) 1998-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.subst RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.subst,v rcsdiff -q -kk '-r1.14' '-r1.15' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.subst,v' 2>/dev/null --- sh.subst 2004/07/02 13:06:36 1.14 +++ sh.subst 2005/06/15 08:14:36 1.15 @@ -1,6 +1,6 @@ ## ## subst -- Apply sed(1) substitution operations -## Copyright (c) 2001-2004 Ralf S. Engelschall +## Copyright (c) 2001-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.table RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.table,v rcsdiff -q -kk '-r1.20' '-r1.21' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.table,v' 2>/dev/null --- sh.table 2004/02/12 16:06:27 1.20 +++ sh.table 2005/06/15 08:14:36 1.21 @@ -1,6 +1,6 @@ ## ## table -- Pretty-print a field-separated list as a table -## Copyright (c) 1998-2004 Ralf S. Engelschall +## Copyright (c) 1998-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.tarball RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.tarball,v rcsdiff -q -kk '-r1.22' '-r1.23' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.tarball,v' 2>/dev/null --- sh.tarball 2004/02/17 08:54:14 1.22 +++ sh.tarball 2005/06/15 08:14:36 1.23 @@ -1,6 +1,6 @@ ## ## tarball -- Roll distribution tarballs -## Copyright (c) 1999-2004 Ralf S. Engelschall +## Copyright (c) 1999-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/sh.version RCS File: /v/ossp/cvs/ossp-pkg/shtool/sh.version,v rcsdiff -q -kk '-r1.37' '-r1.38' -u '/v/ossp/cvs/ossp-pkg/shtool/sh.version,v' 2>/dev/null --- sh.version 2004/07/19 07:41:34 1.37 +++ sh.version 2005/06/15 08:14:36 1.38 @@ -1,6 +1,6 @@ ## ## version -- Maintain a version information file -## Copyright (c) 1994-2004 Ralf S. Engelschall +## Copyright (c) 1994-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/shtool.m4 RCS File: /v/ossp/cvs/ossp-pkg/shtool/shtool.m4,v rcsdiff -q -kk '-r1.7' '-r1.8' -u '/v/ossp/cvs/ossp-pkg/shtool/shtool.m4,v' 2>/dev/null --- shtool.m4 2004/07/19 07:41:34 1.7 +++ shtool.m4 2005/06/15 08:14:36 1.8 @@ -1,6 +1,6 @@ ## ## shtool.m4 -- GNU shtool Autoconf macros -## Copyright (c) 1999-2004 Ralf S. Engelschall +## Copyright (c) 1999-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/shtool.pod RCS File: /v/ossp/cvs/ossp-pkg/shtool/shtool.pod,v rcsdiff -q -kk '-r1.67' '-r1.68' -u '/v/ossp/cvs/ossp-pkg/shtool/shtool.pod,v' 2>/dev/null --- shtool.pod 2004/07/02 13:13:15 1.67 +++ shtool.pod 2005/06/15 08:14:36 1.68 @@ -1,6 +1,6 @@ ## ## shtool.pod -- Manual Page for shtool in POD format -## Copyright (c) 1999-2004 Ralf S. Engelschall +## Copyright (c) 1999-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/shtool.spec RCS File: /v/ossp/cvs/ossp-pkg/shtool/shtool.spec,v rcsdiff -q -kk '-r1.24' '-r1.25' -u '/v/ossp/cvs/ossp-pkg/shtool/shtool.spec,v' 2>/dev/null --- shtool.spec 2004/08/11 19:14:44 1.24 +++ shtool.spec 2005/06/15 08:14:36 1.25 @@ -1,6 +1,6 @@ ## ## shtool.spec -- RPM specification for shtool package -## Copyright (c) 2000-2004 Ralf S. Engelschall +## Copyright (c) 2000-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/shtoolize.in RCS File: /v/ossp/cvs/ossp-pkg/shtool/shtoolize.in,v rcsdiff -q -kk '-r1.34' '-r1.35' -u '/v/ossp/cvs/ossp-pkg/shtool/shtoolize.in,v' 2>/dev/null --- shtoolize.in 2004/02/12 16:06:27 1.34 +++ shtoolize.in 2005/06/15 08:14:36 1.35 @@ -1,7 +1,7 @@ #!@PERL@ ## ## shtoolize -- Build shtool script out of ingredient scripts -## Copyright (c) 1999-2004 Ralf S. Engelschall +## Copyright (c) 1999-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public @@ -350,7 +350,7 @@ #!/bin/sh ## ## GNU shtool -- The GNU Portable Shell Tool -## Copyright (c) 1994-2004 Ralf S. Engelschall +## Copyright (c) 1994-2005 Ralf S. Engelschall ## ## See http://www.gnu.org/software/shtool/ for more information. ## See ftp://ftp.gnu.org/gnu/shtool/ for latest version. @@ -396,7 +396,7 @@ fi if [ ".\$1" = ".-h" ] || [ ".\$1" = ".--help" ]; then echo "This is GNU shtool, version ${version}" - echo "Copyright (c) 1994-2004 Ralf S. Engelschall " + echo "Copyright (c) 1994-2005 Ralf S. Engelschall " echo "Report bugs to " echo '' echo "Usage: shtool [] [ [] []]" Index: ossp-pkg/shtool/shtoolize.pod RCS File: /v/ossp/cvs/ossp-pkg/shtool/shtoolize.pod,v rcsdiff -q -kk '-r1.12' '-r1.13' -u '/v/ossp/cvs/ossp-pkg/shtool/shtoolize.pod,v' 2>/dev/null --- shtoolize.pod 2004/01/01 16:54:20 1.12 +++ shtoolize.pod 2005/06/15 08:14:36 1.13 @@ -1,6 +1,6 @@ ## ## shtoolize.pod -- Manual Page for shtoolize in POD format -## Copyright (c) 1999-2004 Ralf S. Engelschall +## Copyright (c) 1999-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public Index: ossp-pkg/shtool/test.db RCS File: /v/ossp/cvs/ossp-pkg/shtool/test.db,v rcsdiff -q -kk '-r1.22' '-r1.23' -u '/v/ossp/cvs/ossp-pkg/shtool/test.db,v' 2>/dev/null --- test.db 2004/01/01 16:54:20 1.22 +++ test.db 2005/06/15 08:14:36 1.23 @@ -1,6 +1,6 @@ ## ## test.db -- GNU shtool test suite (minimalistic) -## Copyright (c) 1999-2004 Ralf S. Engelschall +## Copyright (c) 1999-2005 Ralf S. Engelschall ## @begin{echo} Index: ossp-pkg/shtool/test.sh RCS File: /v/ossp/cvs/ossp-pkg/shtool/test.sh,v rcsdiff -q -kk '-r1.11' '-r1.12' -u '/v/ossp/cvs/ossp-pkg/shtool/test.sh,v' 2>/dev/null --- test.sh 2004/01/01 16:54:20 1.11 +++ test.sh 2005/06/15 08:14:36 1.12 @@ -1,7 +1,7 @@ #!/bin/sh ## ## test.sh -- GNU shtool test suite driver -## Copyright (c) 1999-2004 Ralf S. Engelschall +## Copyright (c) 1999-2005 Ralf S. Engelschall ## ## This file is part of shtool and free software; you can redistribute ## it and/or modify it under the terms of the GNU General Public