Subversion Repositories DevTools

Rev

Rev 864 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 864 Rev 866
Line 10... Line 10...
10
import java.io.BufferedReader;
10
import java.io.BufferedReader;
11
import java.io.DataInputStream;
11
import java.io.DataInputStream;
12
import java.io.File;
12
import java.io.File;
13
import java.io.FileInputStream;
13
import java.io.FileInputStream;
14
import java.io.InputStreamReader;
14
import java.io.InputStreamReader;
15
 
-
 
16
import java.io.FileReader;
-
 
17
 
-
 
18
import java.io.IOException;
-
 
19
 
-
 
20
import java.sql.SQLException;
15
import java.sql.SQLException;
21
 
16
 
22
import org.apache.log4j.Logger;
17
import org.apache.log4j.Logger;
23
 
18
 
24
/**Master Thread sub component
19
/**Master Thread sub component
Line 160... Line 155...
160
            {
155
            {
161
              throw new ExitException();
156
              throw new ExitException();
162
            }
157
            }
163
            
158
            
164
            deliverChange(null, "AbtPublish", false);
159
            deliverChange(null, "AbtPublish", false);
-
 
160
            // preserve 
-
 
161
            String reportingFullyPublished = mReportingFullyPublished;
-
 
162
            String reportingNewLabel = mReportingNewLabel;
-
 
163
            deliverChange(null, "AbtTearDown", false);
-
 
164
            
-
 
165
            // DEVI 47395 delete the build file now
-
 
166
            // this will prevent any chance of multiply publishing a package version
-
 
167
            File buildFile = new File(mRtagId + "build.xml");
165
            
168
            
166
            // Publishing is done outside ant by design
-
 
167
            // The preference is to do all release manager work outside ant
-
 
168
            MutableString packageName = new MutableString();
-
 
169
            MutableString packageExtension = new MutableString();
-
 
170
            MutableString packageVersion = new MutableString();
-
 
171
            MutableString packageDepends = new MutableString();
-
 
172
            MutableString isRipple = new MutableString();
-
 
173
            MutableString packageVersionId = new MutableString();
-
 
174
            MutableString fullyPublished = new MutableString();
-
 
175
            MutableString newLabel = new MutableString();
-
 
176
            MutableString doesNotRequireSourceControlInteraction = new MutableString();
-
 
177
            boolean buildOccurred = false;
169
            if ( buildFile.exists() )
178
            
-
 
179
            try
-
 
180
            {
-
 
181
              buildOccurred = retrieveLastPackage(mRtagId,
-
 
182
                                                  packageName, 
-
 
183
                                                  packageExtension, 
-
 
184
                                                  packageVersion, 
-
 
185
                                                  packageDepends, 
-
 
186
                                                  isRipple,
-
 
187
                                                  packageVersionId, 
-
 
188
                                                  fullyPublished,
-
 
189
                                                  newLabel,
-
 
190
                                                  doesNotRequireSourceControlInteraction);
-
 
191
            }
-
 
192
            catch( IOException e )
-
 
193
            {
170
            {
194
              // this is caught here to ensure an exception cannot circumvent the deletion of the build file below
-
 
195
              mLogger.warn("run IOException");
171
              buildFile.delete();
196
            }
172
            }
197
            
173
            
198
            if ( buildOccurred )
174
            if ( mReportingPackageName != null )
199
            {
175
            {
200
              // buildOccurred simply means a dummy build file did not apply ie the build file had attempted a build
-
 
201
              // by now it has been labelled
176
              // a dummy build file did not apply
202
              tearViewDown();
-
 
203
              
-
 
204
              // DEVI 47395 delete the build file now
177
              // Publishing is done outside ant by design
205
              // this will prevent any chance of multiply publishing a package version
178
              // The preference is to do all release manager work outside ant
206
              File buildFile = new File(mRtagId + "build.xml");
-
 
207
              
-
 
208
              if ( buildFile.exists() )
-
 
209
              {
-
 
210
                buildFile.delete();
-
 
211
              }
-
 
212
 
179
 
213
              boolean buildErrorOccurred = true;
180
              boolean buildErrorOccurred = true;
214
              try
181
              try
215
              {
182
              {
216
                
-
 
217
                if ( fullyPublished.value.compareTo("yes") == 0 )
183
                if ( reportingFullyPublished != null && reportingFullyPublished.compareTo("yes") == 0 )
218
                {
184
                {
219
                  buildErrorOccurred = false;
185
                  buildErrorOccurred = false;
220
                  
186
                  
221
                  if ( newLabel.value.length() > 0 )
187
                  if ( reportingNewLabel.length() > 0 )
222
                  {
188
                  {
223
                    Integer rtagId = new Integer(mRtagId);
189
                    Integer rtagId = new Integer(mRtagId);
224
 
190
 
225
                    if ( doesNotRequireSourceControlInteraction.value.length() == 0 )
191
                    if ( mReportingDoesNotRequireSourceControlInteraction.compareTo("false") == 0 )
226
                    {
192
                    {
227
                      // requires source control interaction ie labelled in ClearCase
193
                      // requires source control interaction ie labelled in ClearCase
228
                      // publish to release manager
194
                      // publish to release manager
229
                      mReleaseManager.autoMakeRelease(rtagId.toString(), packageName.value, packageExtension.value, packageVersion.value, newLabel.value, packageDepends.value, isRipple.value);
195
                      mReleaseManager.autoMakeRelease(rtagId.toString(), mReportingPackageName, mReportingPackageExtension, mReportingPackageVersion, reportingNewLabel, mReportingPackageDepends, mReportingIsRipple);
230
                    }
196
                    }
231
                    else
197
                    else
232
                    {
198
                    {
233
                      // trigger release note generation and on_make_official.wsf, which changes ownership and write access in the archive
199
                      // trigger release note generation and on_make_official.wsf, which changes ownership and write access in the archive
234
                      // this should not be through autoMakeRelease (sledgehammer, the package is already official in release manager in this scenario)
200
                      // this should not be through autoMakeRelease (sledgehammer, the package is already official in release manager in this scenario)
235
                      // at the time of writing, calling autoMakeRelease does not help if the package was 'released' more than 24 hours ago
201
                      // at the time of writing, calling autoMakeRelease does not help if the package was 'released' more than 24 hours ago
236
                      // this seems to be a business rule in the generate_release_notes package
202
                      // this seems to be a business rule in the generate_release_notes package
237
                      // the buildtool has no option but to call autoMakeRelease at present
203
                      // the buildtool has no option but to call autoMakeRelease at present
238
                      mReleaseManager.autoMakeRelease(rtagId.toString(), packageName.value, packageExtension.value, packageVersion.value, newLabel.value, packageDepends.value, isRipple.value);
204
                      mReleaseManager.autoMakeRelease(rtagId.toString(), mReportingPackageName, mReportingPackageExtension, mReportingPackageVersion, reportingNewLabel, mReportingPackageDepends, mReportingIsRipple);
239
                    }
205
                    }
240
                    
206
                    
241
                    FileInputStream abtmetrics = new FileInputStream( rtagId.toString() + "abtmetrics.txt" );
207
                    FileInputStream abtmetrics = new FileInputStream( rtagId.toString() + "abtmetrics.txt" );
242
                    DataInputStream din = new DataInputStream( abtmetrics );
208
                    DataInputStream din = new DataInputStream( abtmetrics );
243
                    InputStreamReader isr = new InputStreamReader( din );
209
                    InputStreamReader isr = new InputStreamReader( din );
Line 246... Line 212...
246
                    mLogger.warn( "execute read metrics string " + metrics );
212
                    mLogger.warn( "execute read metrics string " + metrics );
247
                    br.close();
213
                    br.close();
248
                    isr.close();
214
                    isr.close();
249
                    din.close();
215
                    din.close();
250
 
216
 
251
                    mReleaseManager.insertPackageMetrics(rtagId.toString(), packageName.value, packageExtension.value, metrics );
217
                    mReleaseManager.insertPackageMetrics(rtagId.toString(), mReportingPackageName, mReportingPackageExtension, metrics );
252
                  }
218
                  }
253
                  else
219
                  else
254
                  {
220
                  {
255
                    mLogger.info("run package not labelled in ClearCase on " + packageName.value + packageVersion.value);
221
                    mLogger.info("run package not labelled in ClearCase on " + mReportingPackageName + mReportingPackageVersion);
256
                    throw new Exception();
222
                    throw new Exception();
257
                  }
223
                  }
258
                }
224
                }
259
                else
225
                else
260
                {
226
                {
261
                  mLogger.info("run build error occurred on " + packageName.value + packageVersion.value);
227
                  mLogger.info("run build error occurred on " + mReportingPackageName + mReportingPackageVersion);
262
                  throw new Exception();
228
                  throw new Exception();
263
                }
229
                }
264
                
230
                
265
              }
231
              }
266
              catch( Exception e)
232
              catch( Exception e)
267
              {
233
              {
268
                // an error occurred publishing to ClearCase or Release Manager
234
                // an error occurred publishing to ClearCase or Release Manager
269
                // take out the archive entry first
235
                // take out the archive entry first
270
                String fs = System.getProperty( "file.separator" );
236
                String fs = System.getProperty( "file.separator" );
271
                String dpkgArchiveEntry = new String(Package.mGbeDpkg + fs + packageName.value + fs + packageVersion.value);
237
                String dpkgArchiveEntry = new String(Package.mGbeDpkg + fs + mReportingPackageName + fs + mReportingPackageVersion);
272
                File dpkgArchiveEntryFile = new File(dpkgArchiveEntry);
238
                File dpkgArchiveEntryFile = new File(dpkgArchiveEntry);
273
                mLogger.info("run checking existence of " + dpkgArchiveEntry);
239
                mLogger.info("run checking existence of " + dpkgArchiveEntry);
274
                
240
                
275
                if ( dpkgArchiveEntryFile.exists() )
241
                if ( dpkgArchiveEntryFile.exists() )
276
                {
242
                {
Line 280... Line 246...
280
                    deleteDirectory(dpkgArchiveEntryFile);
246
                    deleteDirectory(dpkgArchiveEntryFile);
281
                  }
247
                  }
282
                }
248
                }
283
                else
249
                else
284
                {
250
                {
285
                  String dplyArchiveEntry = new String(Package.mGbeDply + fs + packageName.value + fs + packageVersion.value);
251
                  String dplyArchiveEntry = new String(Package.mGbeDply + fs + mReportingPackageName + fs + mReportingPackageVersion);
286
                  File dplyArchiveEntryFile = new File(dplyArchiveEntry);
252
                  File dplyArchiveEntryFile = new File(dplyArchiveEntry);
287
                  mLogger.info("run checking existence of " + dplyArchiveEntry);
253
                  mLogger.info("run checking existence of " + dplyArchiveEntry);
288
                  
254
                  
289
                  if ( dplyArchiveEntryFile.exists() )
255
                  if ( dplyArchiveEntryFile.exists() )
290
                  {
256
                  {
Line 295... Line 261...
295
                    }
261
                    }
296
                  }
262
                  }
297
                }
263
                }
298
                
264
                
299
                Integer rtagId = new Integer(mRtagId);
265
                Integer rtagId = new Integer(mRtagId);
-
 
266
                // pass root file
300
                mReleaseManager.excludeFromBuild(packageVersionId.value, packageVersion.value, rtagId.toString());
267
                mReleaseManager.excludeFromBuild(mReportingPackageVersionId, mReportingPackageVersion, rtagId.toString(), null, null, mReportingBuildFailureLogFile);
301
 
268
 
302
                if ( !buildErrorOccurred )
269
                if ( !buildErrorOccurred )
303
                {
270
                {
304
                  mLogger.fatal("an error occurred publishing to ClearCase or Release Manager");
271
                  mLogger.fatal("an error occurred publishing to ClearCase or Release Manager");
305
                  throw new Exception();
272
                  throw new Exception();
Line 417... Line 384...
417
  protected char getMode()
384
  protected char getMode()
418
  {
385
  {
419
    mLogger.debug("getMode");
386
    mLogger.debug("getMode");
420
    return 'M';
387
    return 'M';
421
  }
388
  }
422
 
-
 
423
  /**retrieves details concerning the last package built for an rtag_id
-
 
424
   * isRipple = "0" (a WIP or direct change) or "1"
-
 
425
   * generic = "generic" or not
-
 
426
   * buildStandard = "JATS" or "ANT"
-
 
427
   */
-
 
428
  boolean retrieveLastPackage(int rtagId, MutableString packageName, 
-
 
429
                              MutableString packageExtension, 
-
 
430
                              MutableString packageVersion, 
-
 
431
                              MutableString packageDepends, 
-
 
432
                              MutableString isRipple, 
-
 
433
                              MutableString packageVersionId, 
-
 
434
                              MutableString fullyPublished,
-
 
435
                              MutableString newLabel,
-
 
436
                              MutableString doesNotRequireSourceControlInteraction) throws IOException
-
 
437
  {
-
 
438
    mLogger.debug("retrieveLastPackage");
-
 
439
    boolean retVal = false;
-
 
440
    Integer rtag = new Integer(rtagId);
-
 
441
    File rtagIdOfficial = new File(rtag + "official");
-
 
442
    
-
 
443
    if ( rtagIdOfficial.exists() )
-
 
444
    {
-
 
445
      // read <rtagId>offical
-
 
446
      FileReader rtagIdOfficialFileReader = new FileReader(rtagIdOfficial);
-
 
447
      BufferedReader rtagIdOfficialBufferedReader = new BufferedReader(rtagIdOfficialFileReader);
-
 
448
      String line;
-
 
449
      
-
 
450
      while( ( line = rtagIdOfficialBufferedReader.readLine() ) != null)
-
 
451
      {
-
 
452
        String []keyVal = line.split("=", 2);
-
 
453
        
-
 
454
        if ( keyVal.length == 2 )
-
 
455
        {
-
 
456
          if (keyVal[0].compareTo("packageName") == 0)
-
 
457
          {
-
 
458
            packageName.value = keyVal[1];
-
 
459
            mLogger.info("retrieveLastPackage packageName " + packageName.value);
-
 
460
          }
-
 
461
          else
-
 
462
          if (keyVal[0].compareTo("packageExtension") == 0)
-
 
463
          {
-
 
464
            packageExtension.value = keyVal[1];
-
 
465
            mLogger.info("retrieveLastPackage packageExtension " + packageExtension.value);
-
 
466
          }
-
 
467
          else
-
 
468
          if (keyVal[0].compareTo("packageVersion") == 0)
-
 
469
          {
-
 
470
            packageVersion.value = keyVal[1];
-
 
471
            mLogger.info("retrieveLastPackage packageVersion " + packageVersion.value);
-
 
472
          }
-
 
473
          else
-
 
474
          if (keyVal[0].compareTo("packageDepends") == 0)
-
 
475
          {
-
 
476
            packageDepends.value = keyVal[1];
-
 
477
            mLogger.info("retrieveLastPackage packageDepends " + packageDepends.value);
-
 
478
          }
-
 
479
          else
-
 
480
          if (keyVal[0].compareTo("packageRipple") == 0)
-
 
481
          {
-
 
482
            isRipple.value = keyVal[1];
-
 
483
            mLogger.info("retrieveLastPackage packageRipple " + isRipple.value);
-
 
484
          }
-
 
485
          else
-
 
486
          if (keyVal[0].compareTo("packageVersionID") == 0)
-
 
487
          {
-
 
488
            packageVersionId.value = keyVal[1];
-
 
489
            mLogger.info("retrieveLastPackage packageVersionID " + packageVersionId.value);
-
 
490
          }
-
 
491
          else
-
 
492
          if (keyVal[0].compareTo("fullyPublished") == 0)
-
 
493
          {
-
 
494
            fullyPublished.value = keyVal[1];
-
 
495
            mLogger.info("retrieveLastPackage fullyPublished " + fullyPublished.value);
-
 
496
          }
-
 
497
          else
-
 
498
          if (keyVal[0].compareTo("newLabel") == 0)
-
 
499
          {
-
 
500
            newLabel.value = keyVal[1];
-
 
501
            mLogger.info("retrieveLastPackage newLabel " + newLabel.value);
-
 
502
          }
-
 
503
          else
-
 
504
          if (keyVal[0].compareTo("doesNotRequireSourceControlInteraction") == 0)
-
 
505
          {
-
 
506
            doesNotRequireSourceControlInteraction.value = keyVal[1];
-
 
507
            mLogger.info("retrieveLastPackage doesNotRequireSourceControlInteraction " + doesNotRequireSourceControlInteraction.value);
-
 
508
          }
-
 
509
        }
-
 
510
      }
-
 
511
      rtagIdOfficialBufferedReader.close();
-
 
512
      rtagIdOfficialFileReader.close();
-
 
513
      
-
 
514
      boolean del = rtagIdOfficial.delete();
-
 
515
        
-
 
516
      if ( !del )
-
 
517
      {
-
 
518
        // the delete failed
-
 
519
        // some literature suggests a forced garbage collection may free up resources associated with file handles
-
 
520
        // nothing to lose since the file "must" be deleted
-
 
521
        System.gc();
-
 
522
        del = rtagIdOfficial.delete();
-
 
523
        
-
 
524
        if ( !del )
-
 
525
        {
-
 
526
          mLogger.fatal("rtagIdOfficial.delete() returned " + del);
-
 
527
        }
-
 
528
      }
-
 
529
      retVal = true;
-
 
530
    }
-
 
531
    
-
 
532
    
-
 
533
    mLogger.info("retrieveLastPackage returned " + retVal);
-
 
534
    return retVal;
-
 
535
  }
-
 
536
}
389
}
537
390