diff options
author | peter <peter@FreeBSD.org> | 2002-12-02 03:13:37 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2002-12-02 03:13:37 +0000 |
commit | c88e7301411c002ff913342f1619967f7c3b58e7 (patch) | |
tree | 41e3ca13c2d66973453a5c0ea9b349da9618bfdb /contrib/cvs/contrib | |
parent | 64d3246a13e0c323164816b3820e24af7b8f003e (diff) | |
parent | 3dc96f7243ece1d1f7f87b03334f840415e0db63 (diff) | |
download | FreeBSD-src-c88e7301411c002ff913342f1619967f7c3b58e7.zip FreeBSD-src-c88e7301411c002ff913342f1619967f7c3b58e7.tar.gz |
This commit was generated by cvs2svn to compensate for changes in r107484,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'contrib/cvs/contrib')
-rw-r--r-- | contrib/cvs/contrib/ChangeLog | 32 | ||||
-rw-r--r-- | contrib/cvs/contrib/Makefile.am | 13 | ||||
-rw-r--r-- | contrib/cvs/contrib/Makefile.in | 108 | ||||
-rw-r--r-- | contrib/cvs/contrib/README | 115 | ||||
-rw-r--r-- | contrib/cvs/contrib/check_cvs.in | 755 | ||||
-rwxr-xr-x | contrib/cvs/contrib/cvs_acls.in | 11 | ||||
-rwxr-xr-x | contrib/cvs/contrib/debug_check_log.sh | 13 |
7 files changed, 932 insertions, 115 deletions
diff --git a/contrib/cvs/contrib/ChangeLog b/contrib/cvs/contrib/ChangeLog index f97ab64..5811d88 100644 --- a/contrib/cvs/contrib/ChangeLog +++ b/contrib/cvs/contrib/ChangeLog @@ -1,3 +1,35 @@ +2002-11-21 Larry Jones <lawrence.jones@eds.com> + + * .cvsignore: Add check_cvs. + + * check_cvs.in: New script contributed by Donald Sharp. + * Makefile.am (contrib_SCRIPTS): Add check_cvs. + * Makefile.in: Regenerated. + * README: Add check_cvs and other missing scripts, alphabetize. + +2002-11-08 Derek Price <derek@ximbiot.com> + + * debug_check_log.sh: Simplify some code. Attempt to default to + src/check.log before falling back to ./check.log. + +2002-09-24 Derek Price <derek@ximbiot.com> + + * Makefile.in: Regenerated using Automake 1.6.3. + +2002-09-24 Derek Price <derek@ximbiot.com> + + * Makefile.in: Regenerated. + +2002-05-20 Derek Price <oberon@umich.edu> + + * cvs_acls.in: Add note about using checkoutlist with avail + in the commentary's INSTALLATION section. + (Original patch from Ville Skyttä <ville.skytta@xemacs.org>.) + +2002-04-30 Derek Price <oberon@umich.edu> + + * Makefile.in: Regenerated with automake 1.6. + 2002-03-21 Derek Price <oberon@umich.edu> * Makefile.am (install-data-local): Import a patch from RedHat which diff --git a/contrib/cvs/contrib/Makefile.am b/contrib/cvs/contrib/Makefile.am index 6972be8..77e56d9 100644 --- a/contrib/cvs/contrib/Makefile.am +++ b/contrib/cvs/contrib/Makefile.am @@ -13,21 +13,10 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# DISTFILES = \ -# ChangeLog README .cvsignore intro.doc \ -# Makefile.in clmerge.pl cln_hist.pl commit_prep.pl cvs2vendor.sh \ -# cvs_acls.pl cvscheck.sh cvscheck.man cvshelp.man debug_check_log.sh \ -# descend.sh \ -# descend.man dirfns.shar log.pl log_accum.pl mfpipe.pl rcs-to-cvs.sh \ -# rcs2log.sh rcslock.pl sccs2rcs.csh rcs2sccs.sh - -# files installed in $(pkgdatadir) -# -# CONTRIB_FILES = README intro.doc cvscheck.man - contribdir = $(pkgdatadir)/contrib contrib_SCRIPTS = \ + check_cvs \ clmerge \ cln_hist \ commit_prep \ diff --git a/contrib/cvs/contrib/Makefile.in b/contrib/cvs/contrib/Makefile.in index 0a7bc14..75eba60 100644 --- a/contrib/cvs/contrib/Makefile.in +++ b/contrib/cvs/contrib/Makefile.in @@ -1,6 +1,7 @@ -# Makefile.in generated automatically by automake 1.5 from Makefile.am. +# Makefile.in generated by automake 1.6.3 from Makefile.am. +# @configure_input@ -# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -26,19 +27,6 @@ # 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. - -# DISTFILES = \ -# ChangeLog README .cvsignore intro.doc \ -# Makefile.in clmerge.pl cln_hist.pl commit_prep.pl cvs2vendor.sh \ -# cvs_acls.pl cvscheck.sh cvscheck.man cvshelp.man debug_check_log.sh \ -# descend.sh \ -# descend.man dirfns.shar log.pl log_accum.pl mfpipe.pl rcs-to-cvs.sh \ -# rcs2log.sh rcslock.pl sccs2rcs.csh rcs2sccs.sh - -# files installed in $(pkgdatadir) -# -# CONTRIB_FILES = README intro.doc cvscheck.man - SHELL = @SHELL@ srcdir = @srcdir@ @@ -69,9 +57,13 @@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ @@ -81,22 +73,26 @@ POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : + +EXEEXT = @EXEEXT@ +OBJEXT = @OBJEXT@ +PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ AWK = @AWK@ CC = @CC@ CSH = @CSH@ DEPDIR = @DEPDIR@ -EXEEXT = @EXEEXT@ +EDITOR = @EDITOR@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KRB4 = @KRB4@ LN_S = @LN_S@ -OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PERL = @PERL@ PR = @PR@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ ROFF = @ROFF@ +STRIP = @STRIP@ TEXI2DVI = @TEXI2DVI@ VERSION = @VERSION@ YACC = @YACC@ @@ -108,6 +104,7 @@ install_sh = @install_sh@ contribdir = $(pkgdatadir)/contrib contrib_SCRIPTS = \ + check_cvs \ clmerge \ cln_hist \ commit_prep \ @@ -159,17 +156,17 @@ CLEANFILES = $(bin_SCRIPTS) $(contrib_SCRIPTS) SUFFIXES = .sh subdir = contrib mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/options.h -CONFIG_CLEAN_FILES = clmerge cln_hist commit_prep cvs_acls log log_accum \ - mfpipe pvcs2rcs rcslock sccs2rcs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = check_cvs clmerge cln_hist commit_prep cvs_acls log \ + log_accum mfpipe pvcs2rcs rcslock sccs2rcs SCRIPTS = $(contrib_SCRIPTS) DIST_SOURCES = DATA = $(contrib_DATA) -DIST_COMMON = README ChangeLog Makefile.am Makefile.in clmerge.in \ - cln_hist.in commit_prep.in cvs_acls.in log.in log_accum.in \ - mfpipe.in pvcs2rcs.in rcslock.in sccs2rcs.in +DIST_COMMON = README ChangeLog Makefile.am Makefile.in check_cvs.in \ + clmerge.in cln_hist.in commit_prep.in cvs_acls.in log.in \ + log_accum.in mfpipe.in pvcs2rcs.in rcslock.in sccs2rcs.in all: all-am .SUFFIXES: @@ -178,59 +175,59 @@ $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu contrib/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) && \ - CONFIG_HEADERS= CONFIG_LINKS= \ - CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +check_cvs: $(top_builddir)/config.status check_cvs.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clmerge: $(top_builddir)/config.status clmerge.in - cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ cln_hist: $(top_builddir)/config.status cln_hist.in - cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ commit_prep: $(top_builddir)/config.status commit_prep.in - cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ cvs_acls: $(top_builddir)/config.status cvs_acls.in - cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ log: $(top_builddir)/config.status log.in - cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ log_accum: $(top_builddir)/config.status log_accum.in - cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mfpipe: $(top_builddir)/config.status mfpipe.in - cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ pvcs2rcs: $(top_builddir)/config.status pvcs2rcs.in - cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ rcslock: $(top_builddir)/config.status rcslock.in - cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ sccs2rcs: $(top_builddir)/config.status sccs2rcs.in - cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +contribSCRIPT_INSTALL = $(INSTALL_SCRIPT) install-contribSCRIPTS: $(contrib_SCRIPTS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(contribdir) @list='$(contrib_SCRIPTS)'; for p in $$list; do \ - f="`echo $$p|sed '$(transform)'`"; \ - if test -f $$p; then \ - echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(contribdir)/$$f"; \ - $(INSTALL_SCRIPT) $$p $(DESTDIR)$(contribdir)/$$f; \ - elif test -f $(srcdir)/$$p; then \ - echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(contribdir)/$$f"; \ - $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(contribdir)/$$f; \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(contribSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(contribdir)/$$f"; \ + $(contribSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(contribdir)/$$f; \ else :; fi; \ done uninstall-contribSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(contrib_SCRIPTS)'; for p in $$list; do \ - f="`echo $$p|sed '$(transform)'`"; \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " rm -f $(DESTDIR)$(contribdir)/$$f"; \ rm -f $(DESTDIR)$(contribdir)/$$f; \ done uninstall-info-am: +contribDATA_INSTALL = $(INSTALL_DATA) install-contribDATA: $(contrib_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(contribdir) @list='$(contrib_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ - echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(contribdir)/$$f"; \ - $(INSTALL_DATA) $$d$$p $(DESTDIR)$(contribdir)/$$f; \ + echo " $(contribDATA_INSTALL) $$d$$p $(DESTDIR)$(contribdir)/$$f"; \ + $(contribDATA_INSTALL) $$d$$p $(DESTDIR)$(contribdir)/$$f; \ done uninstall-contribDATA: @@ -243,22 +240,26 @@ uninstall-contribDATA: tags: TAGS TAGS: - DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) - @for file in $(DISTFILES); do \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ + @list='$(DISTFILES)'; for file in $$list; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - $(mkinstalldirs) "$(distdir)/$$dir"; \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ fi; \ if test -d $$d/$$file; then \ - cp -pR $$d/$$file $(distdir) \ - || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ @@ -283,6 +284,7 @@ install-am: all-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: @@ -291,7 +293,7 @@ clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: - -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]* + -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" diff --git a/contrib/cvs/contrib/README b/contrib/cvs/contrib/README index 8a93f8f..b6e33f7 100644 --- a/contrib/cvs/contrib/README +++ b/contrib/cvs/contrib/README @@ -28,11 +28,20 @@ would presumably be willing to list your software. An attempt at a table of Contents for this directory: README This file. - log A perl script suitable for including in your - $CVSROOT/CVSROOT/loginfo file for logging commit - changes. Includes the RCS revision of the change - as part of the log. - Contributed by Kevin Samborn <samborn@sunrise.com>. + + check_cvs A perl script to check an entire repository for + corruption. + Contributed by Donald Sharp <sharpd@cisco.com>. + + clmerge A perl script to handle merge conflicts in GNU + style ChangeLog files . + Contributed by Tom Tromey <tromey@busco.lanl.gov>. + + cln_hist A perl script to compress your + $CVSROOT/CVSROOT/history file, as it can grow quite + large after extended use. + Contributed by David G. Grubbs <dgg@ksr.com> + commit_prep A perl script, to be combined with log_accum.pl, to log_accum provide for a way to combine the individual log messages of a multi-directory "commit" into a @@ -41,33 +50,30 @@ An attempt at a table of Contents for this directory: committing the correct revision of the file. Read the comments carefully. Contributed by David Hampton <hampton@cisco.com>. - mfpipe Another perl script for logging. Allows you to - pipe the log message to a file and/or send mail - to some alias. - Contributed by John Clyne <clyne@niwot.scd.ucar.edu>. - rcs-to-cvs Script to import sources that may have been under - RCS control already. - Contributed by Per Cederqvist <ceder@lysator.liu.se>. + + cvs2vendor A shell script to move changes from a repository + that was started without a vendor branch to one + that has a vendor branch. + Contributed by Greg A. Woods <woods@planix.com>. + + cvs_acls A perl script that implements Access Control Lists + by using the "commitinfo" hook provided with the + "cvs commit" command. + Contributed by David G. Grubbs <dgg@ksr.com>. + cvscheck Identifies files added, changed, or removed in a cvscheck.man checked out CVS tree; also notices unknown files. Contributed by Lowell Skoog <fluke!lowell@uunet.uu.net> + cvshelp.man An introductory manual page written by Lowell Skoog <fluke!lowell@uunet.uu.net>. It is most likely out-of-date relative to CVS 1.3, but still may be useful. - dirfns A shar file which contains some code that might - help your system support opendir/readdir/closedir, - if it does not already. - Copied from the C-News distribution. - rcslock A perl script that can be added to your commitinfo - file that tries to determine if your RCS file is - currently locked by someone else, as might be the - case for a binary file. - Contributed by John Rouillard <rouilj@cs.umb.edu>. - cvs_acls A perl script that implements Access Control Lists - by using the "commitinfo" hook provided with the - "cvs commit" command. - Contributed by David G. Grubbs <dgg@ksr.com>. + + debug_check_log A shell script to help analyze sanity check failures. + Contributed by Derek R. Price + <derek.price@openavenue.com> + descend A shell script that can be used to recursively descend.man descend through a directory. In CVS 1.2, this was very useful, since many of the commands were not @@ -75,30 +81,53 @@ An attempt at a table of Contents for this directory: the commands are recursive. However, this may still come in handy. Contributed by Lowell Skoog <fluke!lowell@uunet.uu.net> - cln_hist A perl script to compress your - $CVSROOT/CVSROOT/history file, as it can grow quite - large after extended use. - Contributed by David G. Grubbs <dgg@ksr.com> - sccs2rcs A C-shell script that can convert (some) SCCS files - into RCS files, retaining the info contained in the - SCCS file (like dates, author, and log message). - Contributed by Ken Cox <kenstir@viewlogic.com>. + + dirfns A shar file which contains some code that might + help your system support opendir/readdir/closedir, + if it does not already. + Copied from the C-News distribution. + intro.doc A user's view of what you need to know to get started with CVS. Contributed by <Steven.Pemberton@cwi.nl>. + + log A perl script suitable for including in your + $CVSROOT/CVSROOT/loginfo file for logging commit + changes. Includes the RCS revision of the change + as part of the log. + Contributed by Kevin Samborn <samborn@sunrise.com>. + + log_accum See commit_prep. + + mfpipe Another perl script for logging. Allows you to + pipe the log message to a file and/or send mail + to some alias. + Contributed by John Clyne <clyne@niwot.scd.ucar.edu>. + + pvcs2rcs A perl script to convert a PVCS tree to an RCS tree. + + rcs-to-cvs Script to import sources that may have been under + RCS control already. + Contributed by Per Cederqvist <ceder@lysator.liu.se>. + + rcs2log A shell script to create a ChangeLog-format file + given only a set of RCS files. + Contributed by Paul Eggert <eggert@twinsun.com>. + rcs2sccs A shell script to convert simple RCS files into SCCS files, originally gleaned off the network somewhere (originally by "kenc") and modified by Jerry Jelinek <jerry@rmtc.Central.Sun.COM> and Brian Berliner <berliner@sun.com> to increase robustness and add support for one-level of branches. - rcs2log A shell script to create a ChangeLog-format file - given only a set of RCS files. - Contributed by Paul Eggert <eggert@twinsun.com>. - clmerge A perl script to handle merge conflicts in GNU - style ChangeLog files . - Contributed by Tom Tromey <tromey@busco.lanl.gov>. - cvs2vendor A shell script to move changes from a repository - that was started without a vendor branch to one - that has a vendor branch. - Contributed by Greg A. Woods <woods@planix.com> + + rcslock A perl script that can be added to your commitinfo + file that tries to determine if your RCS file is + currently locked by someone else, as might be the + case for a binary file. + Contributed by John Rouillard <rouilj@cs.umb.edu>. + + sccs2rcs A C-shell script that can convert (some) SCCS files + into RCS files, retaining the info contained in the + SCCS file (like dates, author, and log message). + Contributed by Ken Cox <kenstir@viewlogic.com>. diff --git a/contrib/cvs/contrib/check_cvs.in b/contrib/cvs/contrib/check_cvs.in new file mode 100644 index 0000000..2053864 --- /dev/null +++ b/contrib/cvs/contrib/check_cvs.in @@ -0,0 +1,755 @@ +#! @PERL@ -w +######################################################################## +# Copyright (c) 2000, 2001 by Donald Sharp <sharpd@cisco.com> +# All Rights Reserved +# +# Permission is granted to copy and/or distribute this file, with or +# without modifications, provided this notice is preserved. +# +######################################################################## + +=head1 check_cvs.pl + + Script to check the integrity of the Repository + +=head1 SYNOPSIS + + check_cvs.pl + +=head1 DESCRIPTION + + This script will search through a repository and determine if + any of the files in it are corrupted. + + Please do not run this script inside of the repository itself, + it will cause it too fail. + + Also it currently can only be run over the entire repository, + so only point your CVSROOT at the actual CVSROOT. + +=head1 OPTIONS + + There are no options. + +=head1 EXAMPLES + + setenv CVSROOT /release/111/cvs + + # To see more verbose output + setenv CVSDEBUGEDIT 1 + + check_cvs.pl + +=head1 SEE ALSO + + None + +=cut + +###################################################################### +# MODULES # +###################################################################### +use strict; + +use File::Find; +use File::Basename; +use File::Path; +use Cwd; + +###################################################################### +# GLOBALS # +###################################################################### + +my @list_of_broken_files; +my @extra_files; +my $verbose = 0; + +my $total_revisions; +my $total_interesting_revisions; +my $total_files; + +###################################################################### +# SUBROUTINES # +###################################################################### + +###################################################################### +# +# NAME : +# main +# +# PURPOSE : +# To search the repository for broken files +# +# PARAMETERS : +# NONE +# +# GLOBALS : +# $ENV{ CVSROOT } - The CVS repository to search through +# $ENV{ CVSDEBUGEDIT } - Turn on Debugging. +# @list_of_broken_files - The list of files that need to +# be fixed. +# $verbose - is verbose mode on? +# $total_revisions - The number of revisions considered +# $total_interesting_revisions - The number of revisions used +# $total_files - The total number of files looked at. +# +# RETURNS : +# A list of broken files +# +# COMMENTS : +# Do not run this script inside the repository. Choose +# a nice safe spot( like /tmp ) outside of the repository. +# +###################################################################### +my $directory_to_look_at; + +select (STDOUT); $| = 1; # make unbuffered + +$total_revisions = 0; +$total_interesting_revisions = 0; +$total_files = 0; + +if( !exists( $ENV{ CVSROOT } ) ) +{ + die( "The script should be run with the CVSROOT environment variable set" ); +} + +if( exists( $ENV{ CVSDEBUGEDIT } ) ) +{ + $verbose = 1; + print( "Verbose Mode Turned On\n" ); +} + +$directory_to_look_at = $ENV{ CVSROOT }; +if( -l $directory_to_look_at ) +{ + $directory_to_look_at = readlink( $directory_to_look_at ); +} + +print( "Processing: $directory_to_look_at\n" ) if( $verbose ); +find( \&process_file, $directory_to_look_at ); + +my $num_files = @list_of_broken_files; +print( "List of corrupted files\n" ) if( $num_files > 0 ); +foreach my $broken ( @list_of_broken_files ) +{ + print( "**** File: $broken\n" ); +} + +$num_files = @extra_files; +print( "List of Files That Don't belong in Repository:\n" ) if( $num_files > 0 ); +foreach my $extra ( @extra_files ) +{ + print( "**** File: $extra\n" ); +} +print( "Total Files: $total_files\n" ); +print( "Total Revisions: $total_revisions Interesting Revisions: $total_interesting_revisions\n" ); + +###################################################################### +# +# NAME : +# process_file +# +# PURPOSE : +# This function is called by the find function, it's purpose +# is to decide if it is important to look at a file or not. +# We only care about files that have the ,v at the end. +# +# PARAMETERS : +# NONE +# +# GLOBALS : +# $ENV{ CVSROOT } - The CVS repository to search through +# +# RETURNS : +# NONE +# +# COMMENTS : +# NONE +# +###################################################################### +sub process_file +{ + my $path = $File::Find::name; + + $total_files += 1; + $path =~ s/^$directory_to_look_at\///; + + print( "\tProcessing File: $path\n" ) if( $verbose ); + if( $path =~ /,v$/ ) + { + $path =~ s/,v$//; + look_at_cvs_file( $path ); + } + elsif( ! -d $File::Find::name ) + { + my $save = 0; + my @ignore_files = ( 'CVS\/fileattr$', + '^CVSROOT\/modules', + '^CVSROOT\/.#modules', + '^CVSROOT\/loginfo', + '^CVSROOT\/.#loginfo', + '^CVSROOT\/rcsinfo', + '^CVSROOT\/.#rcsinfo', + '^CVSROOT\/editinfo', + '^CVSROOT\/.#editinfo', + '^CVSROOT\/commitinfo', + '^CVSROOT\/.#commitinfo', + '^CVSROOT\/taginfo', + '^CVSROOT\/.#taginfo', + '^CVSROOT\/notify', + '^CVSROOT\/.#notify', + '^CVSROOT\/checkoutlist', + '^CVSROOT\/.#checkoutlist', + '^CVSROOT\/cvswrappers', + '^CVSROOT\/.#cvswrappers', + '^CVSROOT\/val-tags', + '^CVSROOT\/.#val-tags', + '^CVSROOT\/verifymsg', + '^CVSROOT\/.#verifymsg', + '^CVSROOT\/config', + '^CVSROOT\/.#config', + '^CVSROOT\/history', + '^CVSROOT\/cvsignore', + '^CVSROOT\/.#cvsignore' ); + + foreach my $ignore ( @ignore_files ) + { + if( $path =~ /$ignore/ ) + { + $save = 1; + last; + } + } + + if( !$save ) + { + push( @extra_files, $path ); + } + } +} + +###################################################################### +# +# NAME : +# look_at_cvs_file +# +# PURPOSE : +# To decide if a file is broken or not. The algorithm is: +# a) Get the revision history for the file. +# - If that fails the file is broken, save the fact +# and continue processing other files. +# - If that succeeds we have a list of revisions. +# b) For Each revision try to retrieve that version +# - If that fails the file is broken, save the fact +# and continue processing other files. +# c) Continue on +# +# PARAMETERS : +# $file - The file to look at. +# +# GLOBALS : +# NONE +# +# RETURNS : +# NONE +# +# COMMENTS : +# We have to handle Attic files in a special manner. +# Basically remove the Attic from the string if it +# exists at the end of the $path variable. +# +###################################################################### +sub look_at_cvs_file +{ + my( $file ) = @_; + my( $name, $path, $suffix ) = fileparse( $file ); + + if( $path =~ s/Attic\/$// ) + { + $file = $path . $name; + } + + my $revisions = get_history( $name ); + + if( !defined( $revisions ) ) + { + print( "\t$file is corrupted, this was determined via a cvs log command\n" ) if( $verbose ); + push( @list_of_broken_files, $file ); + return(); + } + + my @int_revisions = find_interesting_revisions( @$revisions ); + + foreach my $revision ( @int_revisions ) + { + print( "\t\tLooking at Revision: $revision\n" ) if( $verbose ); + if( !check_revision( $file, $revision ) ) + { + print( "\t$file is corrupted in revision: $revision\n" ) if( $verbose ); + push( @list_of_broken_files, $file ); + return(); + } + } + +} + +###################################################################### +# +# NAME : +# get_history +# +# PURPOSE : +# To retrieve a array of revision numbers. +# +# PARAMETERS : +# $file - The file to retrieve the revision numbers for +# +# GLOBALS : +# NONE +# +# RETURNS : +# On Success - Reference to the list of revision numbers +# On Failure - undef. +# +# COMMENTS : +# The $_ is saved off because The File::find functionality +# expects the $_ to not have been changed. +# The -N option for the rlog command means to spit out +# tags or branch names. +# +###################################################################### +sub get_history +{ + my( $file ) = @_; + my @revisions; + my $revision; + + my $save_ = $_; + + open( FILE, "rlog -N '$file' 2>&1 |" ) or die( "unable to run rlog, help" ); + + while( <FILE> ) + { + if( ( $revision ) = /^revision (.*)$/ ) + { + push( @revisions, $revision ); + } + } + + $_ = $save_; + + if( !close( FILE ) ) + { + return( undef ); + } + + return( \@revisions ); +} + +###################################################################### +# +# NAME : +# check_revision +# +# PURPOSE : +# Given a file and a revision number ensure that we can +# check out that file +# +# PARAMETERS : +# $file - The file to look at. +# $revision - The revision to look at. +# +# GLOBALS : +# NONE +# +# RETURNS : +# If we can get the File - 1 +# If we can not get the File - 0 +# +# COMMENTS : +# cvs command line options are as followed: +# -l - Do not log this command in the history file. I am +# doing this because we will literaly be looking at +# thousands of files with *lots* of revisions. +# -n - Do not run any checkout program as specified by the -o +# option in the modules file +# -p - Put all output to standard out. +# -r - The revision of the file that we would like to look at. +# Please note that cvs will return 0 for being able to successfully +# read the file and 1 for failure to read the file. +# +###################################################################### +sub check_revision +{ + my( $file, $revision ) = @_; + + my $cwd = getcwd(); + chdir( "/tmp" ); + + my $ret_code = 0xffff & system( "cvs -l co -n -p -r $revision '$file' > /dev/null 2>&1" ); + + chdir( $cwd ); + return( 1 ) if ( $ret_code == 0 ); + return( 0 ); + + return( $ret_code ); +} + +###################################################################### +# +# NAME : +# find_interesting_revisions +# +# PURPOSE : +# CVS stores information in a logical manner. We only really +# need to look at some interestin revisions. These are: +# The first version +# And the last version on every branch. +# This is because cvs stores changes descending from +# main line. ie suppose the last version on mainline is 1.6 +# version 1.6 of the file is stored in toto. version 1.5 +# is stored as a diff between 1.5 and 1.6. 1.4 is stored +# as a diff between 1.5 and 1.4. +# branches are stored a little differently. They are +# stored in ascending order. Suppose there is a branch +# on 1.4 of the file. The first branches revision number +# would be 1.4.1.1. This is stored as a diff between +# version 1.4 and 1.4.1.1. The 1.4.1.2 version is stored +# as a diff between 1.4.1.1 and 1.4.1.2. Therefore +# we are only interested in the earliest revision number +# and the highest revision number on a branch. +# +# PARAMETERS : +# @revisions - The list of revisions to find interesting ones +# +# GLOBALS : +# NONE +# +# RETURNS : +# @new_revisions - The list of revisions that we find interesting +# +# COMMENTS : +# +###################################################################### +sub find_interesting_revisions +{ + my( @revisions ) = @_; + my @new_revisions; + my %branch_revision; + my $branch_number; + my $branch_rev; + my $key; + my $value; + + START_OVER: + foreach my $revision( @revisions ) + { + my $start_over = 0; + ( $branch_number, $branch_rev ) = branch_split( $revision ); + + #if the number of elements in the branch is 1 + #and the new branch is less than the old branch + if( elements_in_branch( $branch_number ) == 1 ) + { + ( $start_over, + %branch_revision ) = find_int_mainline_revision( $branch_number, + $branch_rev, + %branch_revision ); + next START_OVER if( $start_over ); + } + + %branch_revision = find_int_branch_revision( $branch_number, + $branch_rev, + %branch_revision ); + + } + + %branch_revision = remove_duplicate_branches( %branch_revision ); + + while( ( $key, $value ) = each ( %branch_revision ) ) + { + push( @new_revisions, $key . "." . $value ); + } + + my $nrc; + my $rc; + + $rc = @revisions; + $nrc = @new_revisions; + + $total_revisions += $rc; + $total_interesting_revisions += $nrc; + + print( "\t\tTotal Revisions: $rc Interesting Revisions: $nrc\n" ) if( $verbose ); + + return( @new_revisions ); +} + +######################################################################## +# +# NAME : +# remove_duplicate_branches +# +# PURPOSE : +# To remove from the list of branches that we are interested +# in duplication that will cause cvs to check a revision multiple +# times. For Instance revision 1.1.1.1 should be prefered +# to be checked over revision 1.1, as that v1.1.1.1 can +# only be retrieved by going through v1.1. Therefore +# we should remove v1.1 from the list of branches that +# are interesting. +# +# PARAMETERS : +# %branch_revisions - The hash of the interesting revisions +# +# GLOBALS : +# NONE +# +# RETURNS : +# %branch_revisions - The hash of the modified interesting revisions +# +# COMMENTS : +# NONE +# +######################################################################## +sub remove_duplicate_branches +{ + my( %branch_revisions ) = @_; + my $key; + my $value; + my $branch_comp; + my $branch; + + + RESTART: + { + my @keys = keys( %branch_revisions ); + while( ( $key, $value ) = each ( %branch_revisions ) ) + { + $branch_comp = $key . "." . $value; + foreach $branch ( @keys ) + { + if( $branch eq $key ) + { + next; + } + if( elements_in_branch( $branch_comp ) == + elements_in_branch( $branch ) - 1 ) + { + if( $branch =~ /^$branch_comp/ ) + { + delete( $branch_revisions{ $key } ); + goto RESTART; + } + } + } + } + } + + return( %branch_revisions ); +} + +###################################################################### +# +# NAME : +# find_int_branch_revision +# +# PURPOSE : +# To Find a interesting branch revision. +# Algorithm: +# If the $branch_revision exists in the interesting branch +# hash and the new $branch_rev is less than currently saved +# one replace it with the new $branch_rev. +# else if the $branch_revision doesn't exist in the interesting +# branch hash, then just store the $branch_number and $branch_rev +# +# PARAMETERS : +# $branch_number - The branch that we are looking at +# $branch_rev - The particular revision we are looking +# at on the $branch_number. +# %branch_revision - The hash storing the interesting branches +# and the revisions on them. +# +# GLOBALS : +# NONE +# +# RETURNS : +# %branch_revision - The modified hash that stores interesting +# branches. +# +# COMMENTS : +# NONE +# +###################################################################### +sub find_int_branch_revision +{ + my( $branch_number, $branch_rev, %branch_revision ) = @_; + + if( exists( $branch_revision{ $branch_number } ) ) + { + if( $branch_rev > $branch_revision{ $branch_number } ) + { + $branch_revision{ $branch_number } = $branch_rev; + } + } + else + { + $branch_revision{ $branch_number } = $branch_rev; + } + + return( %branch_revision ); +} + +###################################################################### +# +# NAME : +# find_int_mainline_revision +# +# PURPOSE : +# To Find a interesting mainline revision. +# Algorithm: +# if the $branch_number is less then a branch number +# with one element in it, then delete the old branch_number +# and return. +# if the $branch_number is greater than a branch number +# then return, and tell the calling function that we +# should skip this element, as that it's not important. +# if the $branch_number is the same as a branch number +# with one element in it, then check to see if the +# $branch_rev is less than the stored branch rev if +# it is replace with new $branch_rev. Else ignore revision +# +# PARAMETERS : +# $branch_number - The branch that we are looking at +# $branch_rev - The particular revision we are looking +# at on the $branch_number. +# %branch_revision - The hash storing the interesting branches +# and the revisions on them. +# +# GLOBALS : +# NONE +# +# RETURNS : +# ( $skip, %branch_revision ) - +# $skip - 1 if we need to ignore this particular $branch_number +# $branch_rev combo. Else 0. +# %branch_revision - The modified hash that stores interesting +# branches. +# +# COMMENTS : +# NONE +# +###################################################################### +sub find_int_mainline_revision +{ + my( $branch_number, $branch_rev, %branch_revision ) = @_; + + foreach my $key ( keys %branch_revision ) + { + if( elements_in_branch( $key ) == 1 ) + { + if( $branch_number < $key ) + { + delete( $branch_revision{ $key } ); + next; + } + + if( $branch_number > $key ) + { + return( 1, %branch_revision ); + } + if( ( exists( $branch_revision{ $branch_number } ) ) && + ( $branch_rev < $branch_revision{ $branch_number } ) ) + { + $branch_revision{ $branch_number } = $branch_rev; + return( 1, %branch_revision ); + } + } + } + + return( 0, %branch_revision ); +} + +###################################################################### +# +# NAME : +# elements_in_branch +# +# PURPOSE : +# Determine the number of elements in a revision number +# Elements are defined by numbers seperated by ".". +# the revision 1.2.3.4 would have 4 elements +# the revision 1.2.4.5.6.7 would have 6 elements +# +# PARAMETERS : +# $branch - The revision to look at. +# +# GLOBALS : +# NONE +# +# RETURNS : +# $count - The number of elements +# +# COMMENTS : +# NONE +# +###################################################################### +sub elements_in_branch +{ + my( $branch ) = @_; + my @split_rev; + + @split_rev = split /\./, $branch; + + my $count = @split_rev; + return( $count ); +} + +###################################################################### +# +# NAME : +# branch_split +# +# PURPOSE : +# To split up a revision number up into the branch part and +# the number part. For Instance: +# 1.1.1.1 - is split 1.1.1 and 1 +# 2.1 - is split 2 and 1 +# 1.3.4.5.7.8 - is split 1.3.4.5.7 and 8 +# +# PARAMETERS : +# $revision - The revision to look at. +# +# GLOBALS : +# NONE +# +# RETURNS : +# ( $branch, $revision ) - +# $branch - The branch part of the revision number +# $revision - The revision part of the revision number +# +# COMMENTS : +# NONE +# +###################################################################### +sub branch_split +{ + my( $revision ) = @_; + my $branch; + my $version; + my @split_rev; + my $count; + + @split_rev = split /\./, $revision; + + my $numbers = @split_rev; + @split_rev = reverse( @split_rev ); + $branch = pop( @split_rev ); + for( $count = 0; $count < $numbers - 2 ; $count++ ) + { + $branch .= "." . pop( @split_rev ); + } + + return( $branch, pop( @split_rev ) ); +} diff --git a/contrib/cvs/contrib/cvs_acls.in b/contrib/cvs/contrib/cvs_acls.in index b33f6ff..d151d9e 100755 --- a/contrib/cvs/contrib/cvs_acls.in +++ b/contrib/cvs/contrib/cvs_acls.in @@ -19,7 +19,16 @@ # # 2. Install this file as /usr/local/bin/cvs_acls and make it executable. # -# 3. Create a file named $CVSROOT/CVSROOT/avail. +# 3. Create a file named CVSROOT/avail and optionally add it to +# CVSROOT/checkoutlist and check it in. See the CVS manual's +# administrative files section about checkoutlist. Typically: +# +# $ cvs checkout CVSROOT +# $ cd CVSROOT +# [ create the avail file ] +# [ add avail to checkoutlist ] +# $ cvs add avail +# $ cvs commit -m 'Added avail for use with cvs_acls.' avail checkoutlist # # ==== FORMAT OF THE avail FILE: # diff --git a/contrib/cvs/contrib/debug_check_log.sh b/contrib/cvs/contrib/debug_check_log.sh index f14b26d..4f8df1e 100755 --- a/contrib/cvs/contrib/debug_check_log.sh +++ b/contrib/cvs/contrib/debug_check_log.sh @@ -184,14 +184,15 @@ fi # set default arg if test $# -eq 0; then - dcl_argvar=dcl_default - dcl_default=check.log -else - dcl_argvar=@ + if test -f src/check.log && test -r src/check.log; then + set src/check.log + else + set check.log + fi fi -eval for file in \"\$$dcl_argvar\"\; do \ - process_check_log \$file\; \ +for file in "$@"; do + process_check_log $file; done exit 0 |