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 arta 1.1 {
|
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 arta 1.1 $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 arta 1.1
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 arta 1.1 `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 arta 1.1
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 arta 1.1 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 arta 1.1
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 arta 1.1
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 arta 1.1
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 arta 1.1 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 arta 1.1 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 arta 1.1 {
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 arta 1.1 $err = 1;
545 }
546 }
547
548 return $err;
549 }
|