Browse Source

Autogen: Add FileDiffers and FileWrite methods

Sebastian Holtermann 8 years ago
parent
commit
65290169f2
2 changed files with 47 additions and 0 deletions
  1. 43 0
      Source/cmQtAutoGenerators.cxx
  2. 4 0
      Source/cmQtAutoGenerators.h

+ 43 - 0
Source/cmQtAutoGenerators.cxx

@@ -1856,6 +1856,49 @@ bool cmQtAutoGenerators::MakeParentDirectory(const char* logPrefix,
   return success;
 }
 
+bool cmQtAutoGenerators::FileDiffers(const std::string& filename,
+                                     const std::string& content)
+{
+  bool differs = true;
+  {
+    std::string oldContents;
+    if (ReadAll(oldContents, filename)) {
+      differs = (oldContents != content);
+    }
+  }
+  return differs;
+}
+
+bool cmQtAutoGenerators::FileWrite(const char* logPrefix,
+                                   const std::string& filename,
+                                   const std::string& content)
+{
+  std::string error;
+  // Make sure the parent directory exists
+  if (this->MakeParentDirectory(logPrefix, filename)) {
+    cmsys::ofstream outfile;
+    outfile.open(filename.c_str(), std::ios::trunc);
+    if (outfile) {
+      outfile << content;
+      // Check for write errors
+      if (!outfile.good()) {
+        error = logPrefix;
+        error += ": Error writing ";
+        error += Quoted(filename);
+      }
+    } else {
+      error = logPrefix;
+      error = ": Error opening ";
+      error += Quoted(filename);
+    }
+  }
+  if (!error.empty()) {
+    this->LogError(error);
+    return false;
+  }
+  return true;
+}
+
 /**
  * @brief Runs a command and returns true on success
  * @return True on success

+ 4 - 0
Source/cmQtAutoGenerators.h

@@ -143,6 +143,10 @@ private:
                              const char* baseSuffix) const;
   bool MakeParentDirectory(const char* logPrefix,
                            const std::string& filename) const;
+  bool FileDiffers(const std::string& filename, const std::string& content);
+  bool FileWrite(const char* logPrefix, const std::string& filename,
+                 const std::string& content);
+
   bool RunCommand(const std::vector<std::string>& command, std::string& output,
                   bool verbose = true) const;