From f09047d646ca1ca38d20b3251329919dfafa78d6 Mon Sep 17 00:00:00 2001
From: Philippe Canal <pcanal@fnal.gov>
Date: Fri, 29 May 2015 20:11:42 -0500
Subject: [PATCH] Add TFileMerger::kKeepCompression to request full 'fast'
 cloning

---
 io/io/inc/TFileMerger.h   | 3 ++-
 io/io/src/TFileMerger.cxx | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/io/io/inc/TFileMerger.h b/io/io/inc/TFileMerger.h
index 7d8a1ce28da..93693041c8e 100644
--- a/io/io/inc/TFileMerger.h
+++ b/io/io/inc/TFileMerger.h
@@ -81,7 +81,8 @@ public:
       kAllIncremental = kIncremental | kAll, // Merge incrementally all type of objects.
 
       kOnlyListed     = BIT(4),        // Only the objects specified in fObjectNames list
-      kSkipListed     = BIT(5)         // Skip objects specified in fObjectNames list
+      kSkipListed     = BIT(5),        // Skip objects specified in fObjectNames list
+      kKeepCompression= BIT(6)         // Keep compression level unchanged for each input files
    };
    TFileMerger(Bool_t isLocal = kTRUE, Bool_t histoOneGo = kTRUE);
    virtual ~TFileMerger();
diff --git a/io/io/src/TFileMerger.cxx b/io/io/src/TFileMerger.cxx
index ee02b48f2a4..2d2340f8cc5 100644
--- a/io/io/src/TFileMerger.cxx
+++ b/io/io/src/TFileMerger.cxx
@@ -353,6 +353,7 @@ Bool_t TFileMerger::MergeRecursive(TDirectory *target, TList *sourcelist, Int_t
    //   kNonResetable : merge only the objects without a MergeAfterReset member function.
    //   kOnlyListed   : merge only objects listed in fObjectNames
    //   kSkipListed   : skip merging of objects listed in fObjectNames
+   //   kKeepCompression : Keep compression level of the buffer as it is in each the original input files.
    Bool_t status = kTRUE;
    Bool_t onlyListed = kFALSE;
    if (fPrintLevel > 0) {
@@ -380,7 +381,7 @@ Bool_t TFileMerger::MergeRecursive(TDirectory *target, TList *sourcelist, Int_t
 
    TFileMergeInfo info(target);
 
-   if ((fFastMethod && !fCompressionChange)) {
+   if (fFastMethod && ((type&kKeepCompression) || !fCompressionChange) ) {
       info.fOptions.Append(" fast");
    }
 
-- 
GitLab