(file) Return to createtags.pl CVS log (file) (dir) Up to [Development] / JSOC / CM

  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           }

Karen Tian
Powered by
ViewCVS 0.9.4