123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- #! /usr/local/bin/perl
- eval "exec /usr/local/bin/perl -S $0 $*"
- if $running_under_some_shell;
- ################################################################################
- #
- # File: ListTheTree <source tree>
- # RCS: $XConsortium: ListTheTree /main/3 1995/10/30 13:43:24 rswiston $
- # Author: Jim Andreas Hewlett-Packard, OSSD-CV
- # Created: 1/15/92
- # Modified by: Marc Ayotte Hewlett-Packard, OSSD-CV (perlizer)
- # Language: N/A
- # Package: N/A
- # Status: CDE distributed
- #
- # (c) Copyright 1993, Hewlett-Packard Company, all rights reserved.
- #
- # Description: This file does 2 things:
- # 1) List the source tree's structure.
- # This structure is placed into the source tree's
- # directory as :TreeListing.
- # 2) Creates a listing of all of the files locked in the
- # source tree and places it in :TreeListing.locks.
- ################################################################################
- if ($ARGV[0]) {
- $TREE = $ARGV[0];
- #
- # if not / relative get pwd path
- #
- if ($TREE !~ m%^\/%) {
- print STDERR " Must be a / related path e.g -> /foo. Sorry!\n";
- exit 1;
- }
- }
- else {
- die " USAGE ListTheTree <source directory>\n";
- }
- # put /usr/local/bin in the path for Rcslocks
- $ENV{'PATH'} = "/x/cdesrc/admin/bin:/usr/local/bin:$ENV{'PATH'}";
- if (! chdir("$TREE")) {
- die " ERROR -> Couldn't change directory to $TREE.\n";
- }
- ######################
- # get the tree listing
- ######################
- system ("find . -print > :TreeListing.new");
- unlink(":TreeListing");
- if (! rename(":TreeListing.new",":TreeListing")) {
- print " WARNING -> couldn't mv :TreeListing.new to :TreeListing.\n";
- }
- ###################################
- # find the locked files in the tree
- ###################################
- unlink(":TreeListing.locks.new");
- open(NLOCK,">>$TREE/:TreeListing.locks.new");
- print NLOCK "List of locked files in $TREE\n\n";
- @dirs=(`find . -type d -print`);
- foreach $dir (@dirs) {
- undef(@rcsLocks);
- chop($dir);
- if (chdir("$dir")) {
- @rcsLocks = (`Rcslocks -v`);
- # only list directory if there are locks
- if (@rcsLocks) {
- print NLOCK "$dir\n";
- while (@rcsLocks) {
- $lock = shift(@rcsLocks);
- print NLOCK " $lock";
- }
- print NLOCK "\n";
- }
- }
- else {
- print " WARNING -> could not cd to ${TREE}/${dir}\n";
- print " $!\n";
- }
- chdir("$TREE");
- }
- unlink("$TREE/:TreeListing.locks");
- rename("$TREE/:TreeListing.locks.new","$TREE/:TreeListing.locks");
- #
- # get changes from last listing
- # check file $TREE/changestamp
- #
- $cstamp = "${TREE}/changestamp";
- if ( -f "${TREE}/changestamp" ) {
- $laststamp = `cat $cstamp`;
- chop $laststamp;
- }
- else {
- $date = `date +%y%m%d`;
- chop $date;
- $laststamp = "${date}0001";
- $dip = `echo "$laststamp" >$cstamp`;
- $date = `date +%m%d0001`;
- chop $date;
- system "touch $date $cstamp";
- }
- $curstamp = `date +%y%m%d%H%M`;
- chop $curstamp;
- unlink("$TREE/:TreeListing.changes.new");
- open(NCHANGE,">>$TREE/:TreeListing.changes.new");
- print NCHANGE "List of changed files in $TREE\n\n";
- @allfiles=(`find . -follow -name "*,v" -newer $cstamp -print`);
- foreach $file (@allfiles) {
- chop $file;
- if (open($RCSFILE,"$file")) {
- NEXTLINE:
- while ($line = <$RCSFILE>) {
- chop $line;
- if ($line !~ m%^date%) {
- next NEXTLINE;
- }
- else {
- $lastdate = $line;
- $author = $line;
- $lastdate =~ s%^.* (\d+\.\d+\.\d+\.\d+\.\d+).*$%\1%;
- $lastdate =~ s%\.%%g;
- if ($lastdate > $laststamp) {
- $author =~ s%^.*author (.*); .*;$%\1%;
- print NCHANGE "$file <-> $author\n";
- }
- }
- }
- close($RCSFILE);
- }
- }
- $dip = `echo "$curstamp" >$cstamp`;
- unlink("$TREE/:TreeListing.changes");
- rename("$TREE/:TreeListing.changes.new","$TREE/:TreeListing.changes");
|