@@ -120,6 +120,28 @@ int main(int argc, char* argv[])
120120 TMap* parentFiles = nullptr ;
121121 int totalMergedDFs = 0 ;
122122 int mergedDFs = 0 ;
123+
124+ // Write all accumulated trees to outputDir, update stats, and clean up state.
125+ auto flushTrees = [&](bool resetState) {
126+ if (!outputDir) {
127+ return ;
128+ }
129+ for (auto const & tree : trees) {
130+ outputDir->cd ();
131+ tree.second ->Write ();
132+ sizeCompressed[tree.first ] += tree.second ->GetZipBytes ();
133+ sizeUncompressed[tree.first ] += tree.second ->GetTotBytes ();
134+ delete tree.second ;
135+ }
136+ if (resetState) {
137+ outputDir = nullptr ;
138+ trees.clear ();
139+ offsets.clear ();
140+ mergedDFs = 0 ;
141+ currentDirSize = 0 ;
142+ }
143+ };
144+
123145 while (in.good () && exitCode == 0 ) {
124146 in >> line;
125147
@@ -195,17 +217,7 @@ int main(int argc, char* argv[])
195217 if (verbosity > 0 ) {
196218 printf (" Folder name changed: closing folder %s.\n " , outputDir->GetName ());
197219 }
198- for (auto const & tree : trees) {
199- outputDir->cd ();
200- tree.second ->Write ();
201- sizeCompressed[tree.first ] += tree.second ->GetZipBytes ();
202- sizeUncompressed[tree.first ] += tree.second ->GetTotBytes ();
203- delete tree.second ;
204- }
205- outputDir = nullptr ;
206- trees.clear ();
207- offsets.clear ();
208- mergedDFs = 0 ;
220+ flushTrees (true );
209221 }
210222
211223 if (verbosity > 0 ) {
@@ -422,21 +434,7 @@ int main(int argc, char* argv[])
422434 if (verbosity > 0 ) {
423435 printf (" Maximum size reached: %ld. Closing folder %s.\n " , currentDirSize, dfName);
424436 }
425- for (auto const & tree : trees) {
426- // printf("Writing %s\n", tree.first.c_str());
427- outputDir->cd ();
428- tree.second ->Write ();
429-
430- // stats
431- sizeCompressed[tree.first ] += tree.second ->GetZipBytes ();
432- sizeUncompressed[tree.first ] += tree.second ->GetTotBytes ();
433-
434- delete tree.second ;
435- }
436- outputDir = nullptr ;
437- trees.clear ();
438- offsets.clear ();
439- mergedDFs = 0 ;
437+ flushTrees (true );
440438 }
441439 }
442440 inputFile->Close ();
@@ -447,16 +445,7 @@ int main(int argc, char* argv[])
447445 parentFiles->Write (" parentFiles" , TObject::kSingleKey );
448446 }
449447
450- for (auto const & tree : trees) {
451- outputDir->cd ();
452- tree.second ->Write ();
453-
454- // stats
455- sizeCompressed[tree.first ] += tree.second ->GetZipBytes ();
456- sizeUncompressed[tree.first ] += tree.second ->GetTotBytes ();
457-
458- delete tree.second ;
459- }
448+ flushTrees (false );
460449
461450 outputFile->Write ();
462451 outputFile->Close ();
0 commit comments