@@ -24,15 +24,15 @@ Future<void> postProcessDartdoc({
2424  required  String  docDir,
2525}) async  {
2626  _log.info ('Running dartdoc post-processing' );
27-   final  tmpOutDir =  p.join (outputFolder, '_doc' );
28-   await  Directory ( tmpOutDir) .create (recursive:  true );
27+   final  tmpOutDir =  Directory ( p.join (outputFolder, '_doc' ) );
28+   await  tmpOutDir.create (recursive:  true );
2929  final  processingFuture =  Isolate .run (() async  {
3030    final  files =  Directory (docDir)
3131        .list (recursive:  true , followLinks:  false )
3232        .whereType <File >();
3333    await  for  (final  file in  files) {
3434      final  suffix =  file.path.substring (docDir.length +  1 );
35-       final  targetFile =  File (p.join (tmpOutDir, suffix));
35+       final  targetFile =  File (p.join (tmpOutDir.path , suffix));
3636      await  targetFile.parent.create (recursive:  true );
3737      final  isDartDocSidebar = 
3838          file.path.endsWith ('.html' ) &&  file.path.endsWith ('-sidebar.html' );
@@ -85,14 +85,34 @@ Future<void> postProcessDartdoc({
8585    _log.info ('Finished .tar.gz archive' );
8686  });
8787
88-   await  Future .wait ([
89-     processingFuture,
90-     archiveFuture,
91-   ]);
88+   try  {
89+     await  Future .wait ([
90+       processingFuture,
91+       archiveFuture,
92+     ]);
9293
93-   // Move from temporary output directory to final one, ensuring that 
94-   // documentation files won't be present unless all files have been processed. 
95-   // This helps if there is a timeout along the way. 
96-   await  Directory (tmpOutDir).rename (p.join (outputFolder, 'doc' ));
97-   await  tmpTar.rename (p.join (outputFolder, 'doc' , 'package.tar.gz' ));
94+     // Move from temporary output directory to final one, ensuring that 
95+     // documentation files won't be present unless all files have been processed. 
96+     // This helps if there is a timeout along the way. 
97+     await  tmpOutDir.rename (p.join (outputFolder, 'doc' ));
98+     await  tmpTar.rename (p.join (outputFolder, 'doc' , 'package.tar.gz' ));
99+   } catch  (e, st) {
100+     // We don't know what's wrong with the post-processing, and we treat 
101+     // the output as incorrect. Deleting, so it won't be included in the blob. 
102+     await  tmpOutDir.deleteIgnoringErrors (recursive:  true );
103+     await  tmpTar.deleteIgnoringErrors ();
104+ 
105+     _log.shout ('Failed to run dartdoc post-processing.' , e, st);
106+     rethrow ;
107+   }
108+ }
109+ 
110+ extension  on  FileSystemEntity  {
111+   Future <void > deleteIgnoringErrors ({bool  recursive =  false }) async  {
112+     try  {
113+       await  delete (recursive:  recursive);
114+     } catch  (_) {
115+       // ignored 
116+     }
117+   }
98118}
0 commit comments