ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/JSOC/CM/createtags.pl
Revision: 1.9
Committed: Fri Oct 9 18:49:04 2009 UTC (13 years, 11 months ago) by arta
Content type: text/plain
Branch: MAIN
CVS Tags: Ver_6-0, Ver_6-1, Ver_6-2, Ver_6-3, Ver_6-4, NetDRMS_Ver_8-8, Ver_8-5, Ver_5-14, Ver_5-13, Ver_5-12, Ver_5-11, Ver_5-10, Ver_LATEST, NetDRMS_Ver_LATEST, NetDRMS_Ver_8-12, NetDRMS_Ver_8-10, NetDRMS_Ver_8-11, NetDRMS_Ver_9-1, NetDRMS_Ver_9-0, NetDRMS_Ver_9-3, NetDRMS_Ver_9-2, NetDRMS_Ver_9-5, NetDRMS_Ver_9-4, Ver_7-0, Ver_5-6, NetDRMS_Ver_9-41, Ver_9-41, NetDRMS_Ver_8-4, NetDRMS_Ver_8-5, Ver_5-8, NetDRMS_Ver_8-6, Ver_5-7, Ver_8-8, NetDRMS_Ver_8-7, Ver_5-9, Ver_8-2, Ver_9-3, Ver_8-0, Ver_8-1, Ver_8-6, Ver_8-7, Ver_8-4, Ver_8-11, Ver_7-1, Ver_9-1, Ver_5-5, Ver_8-3, Ver_9-5, Ver_9-4, Ver_8-10, Ver_9-2, Ver_8-12, Ver_9-0, HEAD
Changes since 1.8: +8 -2 lines
Log Message:
add to list of sums su-jim-specific scripts that shouldnt be tagged when doing the NetDRMS release

File Contents

# User Rev Content
1 arta 1.1 #!/usr/bin/perl -w
2    
3     # Create the CVS tags that identify two sets of files: one set contains the full JSOC release head versions,
4     # the other set contains the NetDRMS release head versions. Excludes a list of
5    
6 arta 1.6 # createtags.pl [-tv] vers=<vers> drmsvers=<drmsvers>
7 arta 1.1 # args
8 arta 1.6 # vers - The JSOC release version number (<major>.<minor>)
9     # drmsvers - The NetDRMS release version number (<major>.<minor>)
10 arta 1.8 # -p - print; print files to be tagged for each release
11 arta 1.6 # -t - test; print cvs tag commands, but don't execute them
12     # -v - verbose; print diagnostic information
13 arta 1.1
14     use Cwd;
15     use File::Path;
16     use constant kRelTypeJSOC => 0;
17     use constant kRelTypeDRMS => 1;
18     use constant kRelTypeALL => 2;
19     use constant kBatchSize => 128;
20     use constant kJSOCRoot => "/tmp/$ENV{'USER'}/JSOCTags";
21     use constant kDRMSRoot => "/tmp/$ENV{'USER'}/DRMSTags";
22     use constant kCORERoot => "/tmp/$ENV{'USER'}/CoreTags";
23     use constant kAllFiles => "find . -name '*CVS*' -prune -o -type f -print";
24    
25     my($arg);
26     my($maj);
27     my($min);
28     my($drmsmaj);
29     my($drmsmin);
30     my($reltype);
31     my($printonly);
32     my($showtagcmd);
33 arta 1.3 my($verbose);
34 arta 1.1 my($dir);
35     my($cmd);
36     my($line);
37     my($verstr);
38     my($file);
39     my($resp);
40     my(@filelist);
41     my($fileliststr);
42     my($err);
43    
44     my(@exclspec);
45     my(%exclusions);
46    
47     # list of files to exclude (if a path is given, then all files and subdirectories of files are excluded)
48     @exclspec =
49     (
50     "base/sums/scripts/dpck.pl",
51     "base/sums/scripts/fixportm.pl",
52 arta 1.4 "base/sums/scripts/GRAD_BLUE_LINE.gif",
53     "base/sums/scripts/SDO_Badge.gif",
54     "base/sums/scripts/SDO_HSB_CCSDS_Data_Structures.gif",
55     "base/sums/scripts/build_parc_file.pl",
56     "base/sums/scripts/find_dir_sum_partn_alloc_dc",
57     "base/sums/scripts/rsync_scr111.pl",
58     "base/sums/scripts/ssh_rsync.source",
59     "base/sums/scripts/sum_bad_permissions.pl",
60     "base/sums/scripts/sum_start_d00_jim",
61     "base/sums/scripts/sum_start_d02",
62     "base/sums/scripts/sum_start_d02_auto",
63     "base/sums/scripts/sum_start_dc",
64 arta 1.9 "base/sums/scripts/sum_start_j1",
65     "base/sums/scripts/sum_start_j1_auto",
66 arta 1.4 "base/sums/scripts/sum_start_n02_jim",
67     "base/sums/scripts/sum_start_n02_jim_auto",
68     "base/sums/scripts/sum_stop_d00_jim",
69     "base/sums/scripts/sum_stop_d02",
70     "base/sums/scripts/sum_stop_d02_auto",
71     "base/sums/scripts/sum_stop_dc",
72 arta 1.9 "base/sums/scripts/sum_stop_j1",
73     "base/sums/scripts/sum_stop_j1_auto",
74 arta 1.4 "base/sums/scripts/sum_stop_n02_jim",
75     "base/sums/scripts/sum_stop_n02_jim_auto",
76 arta 1.9 "base/sums/scripts/sum_tape_insert.pl",
77 arta 1.4 "base/sums/scripts/sum_tape_insert_t50.pl",
78     "base/sums/scripts/sum_tape_insert_t950.pl",
79 arta 1.9 "base/sums/scripts/sumck",
80     "base/sums/scripts/sumck_j1",
81     "base/sums/scripts/sumck_n02_jim",
82 arta 1.4 "base/sums/scripts/t120_reachive.pl",
83     "base/sums/scripts/t120stageall.pl",
84     "base/sums/scripts/t120view",
85     "base/sums/scripts/t50view",
86     "base/sums/scripts/t950view",
87     "base/sums/scripts/tape_verify.pl",
88     "base/sums/scripts/tapearc_do",
89     "base/sums/scripts/tapearc_do_dcs1",
90     "base/sums/scripts/tapeid.list",
91     "base/sums/scripts/tapeid_t50.list",
92 arta 1.1 "base/sums/scripts/postgres/create_user.txt",
93     "base/util/scripts/dsview",
94     "base/util/scripts/tkdiff.tcl",
95 arta 1.4 "base/sums/scripts/test",
96 arta 1.1 "base/drms/libs/api/test"
97     );
98    
99     while ($arg = shift(@ARGV))
100     {
101     if ($arg =~ /drmsvers=(.+)\.(.+)/)
102     {
103     $drmsmaj = $1;
104     $drmsmin = $2;
105     }
106     elsif ($arg =~ /vers=(.+)\.(.+)/)
107     {
108     $maj = $1;
109     $min = $2;
110     }
111     elsif ($arg eq "-p")
112     {
113     # print files that would otherwise be tagged
114     $printonly = 1;
115     }
116     elsif ($arg eq "-t")
117     {
118 arta 1.3 # print tag commands, but don't execute the commands
119 arta 1.1 $showtagcmd = 1;
120     }
121 arta 1.3 elsif ($arg eq "-v")
122     {
123     $verbose = 1;
124     }
125 arta 1.1 }
126    
127     $err = 0;
128    
129     # obtain a list of ALL files
130     $cmd = kAllFiles;
131    
132     # first do JSOC tags
133     print STDOUT "***Tagging full JSOC release files***\n";
134    
135     # cd to JSOC root
136     $dir = kJSOCRoot;
137     if (!(-d $dir))
138     {
139     mkpath($dir);
140     }
141    
142     chdir($dir);
143     `cvs co JSOC > /dev/null 2>&1`;
144     chdir("$dir/JSOC");
145    
146     $reltype = kRelTypeJSOC;
147     $verstr = "Ver_${maj}-${min}";
148     @filelist = GenerateFileList($cmd, $reltype, \%exclusions, \$err);
149    
150     if ($err == 0)
151     {
152     if ($printonly)
153     {
154     while (defined($file = shift(@filelist)))
155     {
156     print STDOUT "$file\n";
157     }
158     }
159     else
160     {
161     # call cvs tag in batches
162 arta 1.2 my($count);
163     my($nitems) = scalar(@filelist);
164 arta 1.1
165     while ($nitems > 0 && $err == 0)
166     {
167     $fileliststr = "";
168 arta 1.2 $count = 0;
169 arta 1.7 while ($count < kBatchSize && defined($file = shift(@filelist)))
170 arta 1.1 {
171     $fileliststr = "$fileliststr $file";
172     $count++;
173     }
174    
175     # these tag commands affect the repository immediately (no commit is necessary)
176     $err = SetTag($verstr, $fileliststr, 1, $showtagcmd);
177    
178     if ($err)
179     {
180     print STDERR "Failure creating tag $verstr on file $fileliststr.\n";
181     last;
182     }
183    
184     $err = SetTag("Ver_LATEST", $fileliststr, 0, $showtagcmd);
185    
186     if ($err)
187     {
188     print STDERR "Failure deleting tag Ver_LATEST on file $fileliststr.\n";
189     last;
190     }
191    
192     $err = SetTag("Ver_LATEST", $fileliststr, 1, $showtagcmd);
193    
194     if ($err)
195     {
196     print STDERR "Failure creating tag Ver_LATEST on file $fileliststr.\n";
197     last;
198     }
199    
200 arta 1.2 $nitems = scalar(@filelist);
201 arta 1.1 }
202     }
203    
204     # remove checked-out files
205     chdir($dir);
206     rmtree("$dir/JSOC");
207     }
208    
209     if ($err == 0)
210     {
211     # then do NetDRMS tags
212     print STDOUT "***Tagging NetDRMS release files***\n";
213    
214     # cd to DRMS root
215     $dir = kDRMSRoot;
216     if (!(-d $dir))
217     {
218     mkpath($dir);
219     }
220    
221     chdir($dir);
222     `cvs co NETDRMSONLY > /dev/null 2>&1`;
223     chdir("$dir/JSOC");
224    
225     $reltype = kRelTypeDRMS;
226     $verstr = "NetDRMS_Ver_${drmsmaj}-${drmsmin}";
227     @filelist = GenerateFileList($cmd, $reltype, \%exclusions, \$err);
228    
229     if ($err == 0)
230     {
231     if ($printonly)
232     {
233     while (defined($file = shift(@filelist)))
234     {
235     print STDOUT "$file\n";
236     }
237     }
238     else
239     {
240     # call cvs tag in batches
241 arta 1.2 my($count);
242     my($nitems) = scalar(@filelist);
243 arta 1.1
244     while ($nitems > 0 && $err == 0)
245     {
246     $fileliststr = "";
247 arta 1.2 $count = 0;
248 arta 1.7 while ($count < kBatchSize && defined($file = shift(@filelist)))
249 arta 1.1 {
250     $fileliststr = "$fileliststr $file";
251     $count++;
252     }
253    
254     # these tag commands affect the repository immediately (no commit is necessary)
255     $err = SetTag($verstr, $fileliststr, 1, $showtagcmd);
256    
257     if ($err)
258     {
259     print STDERR "Failure creating tag $verstr on file $fileliststr.\n";
260     last;
261     }
262    
263     $err = SetTag("NetDRMS_Ver_LATEST", $fileliststr, 0, $showtagcmd);
264    
265     if ($err)
266     {
267     print STDERR "Failure deleting tag NetDRMS_Ver_LATEST on file $fileliststr.\n";
268     last;
269     }
270    
271     $err = SetTag("NetDRMS_Ver_LATEST", $fileliststr, 1, $showtagcmd);
272    
273     if ($err)
274     {
275     print STDERR "Failure creating tag NetDRMS_Ver_LATEST on file $fileliststr.\n";
276     last;
277     }
278    
279 arta 1.2 $nitems = scalar(@filelist);
280 arta 1.1 }
281     }
282    
283     # remove checked-out files
284     chdir($dir);
285     rmtree("$dir/JSOC");
286     }
287     }
288    
289     if ($err == 0)
290     {
291     # then do NetDRMS tags on the CORE files
292    
293     # cd to CORE root
294     $dir = kCORERoot;
295    
296     if (!(-d $dir))
297     {
298     mkpath($dir);
299     }
300    
301     chdir($dir);
302     `cvs co CORE > /dev/null 2>&1`;
303     chdir("$dir/JSOC");
304    
305 arta 1.3 # Exclusions will apply to the CORE files of the NetDRMS release only
306     SetExclusions(\@exclspec, \%exclusions);
307    
308     if ($verbose)
309     {
310     while (my($k, $v) = each %exclusions)
311     {
312     print STDOUT "key $k, value $v\n";
313     }
314     }
315    
316 arta 1.1 $reltype = kRelTypeDRMS;
317     $verstr = "NetDRMS_Ver_${drmsmaj}-${drmsmin}";
318     @filelist = GenerateFileList($cmd, $reltype, \%exclusions, \$err);
319    
320     if ($err == 0)
321     {
322     if ($printonly)
323     {
324     while (defined($file = shift(@filelist)))
325     {
326     print STDOUT "$file\n";
327     }
328     }
329     else
330     {
331     # call cvs tag in batches
332 arta 1.2 my($count);
333     my($nitems) = scalar(@filelist);
334 arta 1.1
335     while ($nitems > 0 && $err == 0)
336     {
337     $fileliststr = "";
338 arta 1.2 $count = 0;
339 arta 1.7 while ($count < kBatchSize && defined($file = shift(@filelist)))
340 arta 1.1 {
341     $fileliststr = "$fileliststr $file";
342     $count++;
343     }
344    
345     # these tag commands affect the repository immediately (no commit is necessary)
346     $err = SetTag($verstr, $fileliststr, 1, $showtagcmd);
347    
348     if ($err)
349     {
350     print STDERR "Failure creating tag $verstr on file $fileliststr.\n";
351     last;
352     }
353    
354     $err = SetTag("NetDRMS_Ver_LATEST", $fileliststr, 0, $showtagcmd);
355    
356     if ($err)
357     {
358     print STDERR "Failure deleting tag NetDRMS_Ver_LATEST on file $fileliststr.\n";
359     last;
360     }
361    
362     $err = SetTag("NetDRMS_Ver_LATEST", $fileliststr, 1, $showtagcmd);
363    
364     if ($err)
365     {
366     print STDERR "Failure creating tag NetDRMS_Ver_LATEST on file $fileliststr.\n";
367     last;
368     }
369    
370 arta 1.2 $nitems = scalar(@filelist);
371 arta 1.1 }
372     }
373    
374     # remove checked-out files
375     chdir($dir);
376     rmtree("$dir/JSOC");
377     }
378     }
379    
380     exit;
381    
382     sub SetExclusions
383     {
384     my($exclusions) = $_[0];
385     my($exclout) = $_[1]; # reference to exclusion hash array
386    
387     my($file);
388     my($cmd) = kAllFiles;
389     my($cwd);
390     my($line);
391     my($base);
392    
393     while (defined($file = shift(@$exclusions)))
394     {
395     # if directory, find all files contained within
396     if (-d $file)
397     {
398     $base = $file;
399     $cwd = getcwd();
400     chdir($file);
401    
402     if (open(ALLFILESSUB, "$cmd |"))
403     {
404     while (defined($line = <ALLFILESSUB>))
405     {
406     chomp($line);
407     $file = $line;
408    
409     if ($line =~ /^\.\/(.+)/)
410     {
411     $file = $1;
412     }
413    
414     $$exclout{"$base/$file"} = "T";
415     }
416    
417     close(ALLFILES);
418     }
419     else
420     {
421     print STDERR "Couldn't obtain list of all files.\n";
422     $err = 1;
423     }
424    
425     chdir($cwd);
426     }
427 arta 1.3 else
428     {
429     $$exclout{"$file"} = "T";
430     }
431 arta 1.1 }
432     }
433    
434     sub ExcludeFile
435     {
436     my($file) = $_[0];
437     my($exclusions) = $_[1]; # reference to exclusion hash array
438     my($exclude);
439    
440     $exclude = 0;
441    
442     if (defined($$exclusions{"$file"}))
443     {
444     $exclude = 1;
445     }
446    
447     return $exclude;
448     }
449    
450     sub GenerateFileList
451     {
452     my($cmd) = $_[0];
453     my($reltype) = $_[1];
454     my($exclusions) = $_[2]; # reference
455     my($err) = $_[3]; # reference
456    
457     my(@filelist);
458     my($line);
459    
460     if (open(ALLFILES, "$cmd |"))
461     {
462     while (defined($line = <ALLFILES>))
463     {
464     chomp($line);
465 arta 1.3
466     if ($line =~ /^\.\/(.+)/)
467     {
468     $line = $1;
469     }
470    
471 arta 1.1 if ($reltype == kRelTypeJSOC || !ExcludeFile($line, $exclusions))
472     {
473     $file = $line;
474    
475     if ($line =~ /^\.\/(.+)/)
476     {
477     $file = $1;
478     }
479    
480     push(@filelist, $file);
481     }
482     }
483    
484     close(ALLFILES);
485     }
486     else
487     {
488     print STDERR "Couldn't obtain list of all files.\n";
489     $$err = 1;
490     }
491    
492     return @filelist;
493     }
494    
495     sub SetTag
496     {
497     my($tag) = $_[0];
498     my($files) = $_[1];
499     my($set) = $_[2];
500     my($showtagcmd) = $_[3];
501    
502     my($err);
503     my($cmd);
504     my($resp);
505     my($code);
506    
507     if ($set == 1)
508     {
509     $cmd = "cvs tag -c $tag $files";
510     $code = "T";
511     }
512     else
513     {
514     $cmd = "cvs tag -d $tag $files";
515     $code = "D";
516     }
517    
518     $err = 0;
519    
520     if ($showtagcmd)
521     {
522 arta 1.2 print STDOUT "$cmd\n";
523 arta 1.1 }
524     else
525     {
526     if (open(TAGRESP, "$cmd |"))
527     {
528     while (defined($resp = <TAGRESP>))
529     {
530     chomp($resp);
531    
532     if ($resp !~ /^${code}\s/)
533     {
534     # failure
535     $err = 1;
536     }
537     }
538    
539     close(TAGRESP);
540     }
541     else
542     {
543     print STDERR "Can't tag the file set $files.\n";
544     $err = 1;
545     }
546     }
547    
548     return $err;
549     }