ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/BuildSystem/DateStampChecker.pm
Revision: 1.1
Committed: Wed Nov 15 14:49:23 2000 UTC (24 years, 5 months ago) by williamc
Content type: text/plain
Branch: MAIN
CVS Tags: V0_19_7, V0_19_6, V0_19_6p1, V0_19_5, SFATEST, V0_19_4, V0_19_4_pre3, V0_19_4_pre2, V0_19_4_pre1, V0_19_3, V0_19_2, V0_19_1, V0_19_0, V0_18_5, V0_18_4, V_18_3_TEST, VO_18_3, V0_18_2, V0_18_1
Branch point for: SCRAM_V1_BRANCH, V0_19_4_B
Log Message:
Up and running

File Contents

# Content
1 #
2 # DateStampChecker.pm
3 #
4 # Originally Written by Christopher Williams
5 #
6 # Description
7 #
8 # Interface
9 # ---------
10 # new(localtop,releasetop) : A new DateStampChecker object
11 # datefiles(@files) : process files datestamps according to the ds files
12
13 package BuildSystem::DateStampChecker;
14 use Utilities::Verbose;
15 use BuildSystem::DateStampRecord;
16 use File::Copy;
17 use FileHandle;
18 require 5.004;
19 @ISA=qw(Utilities::Verbose);
20
21 sub new {
22 my $class=shift;
23 my $self={};
24 $self->{localtop}=shift;
25 $self->{releasetop}=shift;
26 bless $self, $class;
27 return $self;
28 }
29
30 sub datefiles {
31 my $self=shift;
32 my @dsfiles=@_;
33
34 my $file;
35 foreach $datafile ( @dsfiles ) {
36 $self->verbose("Processing $datafile\n");
37 my $ds=BuildSystem::DateStampRecord->new($datafile);
38 $ds->verbosity($self->verbosity());
39 my $date;
40 my $needsupdate;
41 my $productfile=$ds->product();
42 my (%files,%moddate);
43
44 # now get dates in our dependency list
45 my @datedfiles=$ds->dated();
46 if ( $#datedfiles >= 0 ) {
47
48 $needsupdate=1;
49 $date=$datedfiles[0][1]-1;
50 }
51 else {
52 # -- extra checks for local replacement of files
53 foreach $file ( $ds->contents() ) {
54 # -- only check files
55 if ( -f $file ) {
56 $files{$file}=$ds->filedate($file);
57 # -- check to see if we have a new local copy
58 if ( ($file=~/\Q$self->{releasetop}\E/) &&
59 ($self->{releasetop} ne $self->{localtop}) ) {
60 ($tempfile=$file)=~s/\Q$self->{releasetop}\E/$self->{localtop}/;
61 if ( -f $tempfile ) {
62 $files{$tempfile}=$files{$file};
63 $file=$tempfile;
64 }
65 }
66 $moddate{$file}=(stat($file))[9];
67 if ( $moddate{$file} != $files{$file} ) {
68 $self->verbose($file." changed");
69 $date=$moddate{$file}-1;
70 $needsupdate=1;
71 }
72 }
73 }
74 }
75 # time stamp the product file to be older than the dependencies
76 if ( $needsupdate == 1 ) { # touch file into the past
77 my $newproductfile;
78 if ( $productfile!~/\Q$self->{localtop}\E/ ) {
79 if ( $productfile=~/\Q$self->{releasetop}\E/ ) {
80 ($newproductfile=$productfile)=~
81 s/\Q$self->{releasetop}\E/$self->{localtop}/;
82 $self->verbose("Copying $productfile to $newproductfile");
83 copy($productfile,$newproductfile);
84 }
85 else { # assume no path to worry about
86 $newproductfile=$self->{localtop}."/".$ENV{workdir}.
87 "/".$productfile;
88 # -- make a local copy of the product file if not already here
89 my $oldproductfile=$self->{releasetop}."/".$ENV{workdir}.
90 "/".$productfile;
91 if ( ! -f $newproductfile ) {
92 if ( -f $oldproductfile ) {
93 $self->verbose("Copying $oldproductfile to $newproductfile");
94 copy($oldproductfile,$newproductfile);
95 }
96 }
97 }
98 }
99 else {
100 $newproductfile=$productfile;
101 }
102 if ( -f $newproductfile ) {
103 $self->verbose("Blasting $newproductfile to the past ($date)");
104 # If the (local) productfile exists - make it older
105 utime($date,$date,$newproductfile);
106 }
107 else {
108 $self->verbose("SomeThing Wrong(?) with $newproductfile\n".
109 "RELEASETOP=".$self->{releasetop}."\n".
110 "LOCALTOP=".$self->{localtop}."\n".
111 "workdir=".$ENV{workdir});
112 }
113 }
114 else {
115 $self->verbose("No need to touch $productfile");
116 }
117 }
118 }