commit 04fe818b2239ac2fcc4af48618b699cb50ccf543
Author: Pavel Sanda <[email protected]>
Date:   Fri Dec 7 23:10:46 2018 +0100

    Keep permissions of the saved files intact.
    
    Previously the permission were destroyed by the newly created
    temporary file -- which is later used as new saved file.
    Tested on symlinks as well but only on Linux.
---
 src/Buffer.cpp           |    3 +++
 src/support/FileName.cpp |    7 +++++++
 src/support/FileName.h   |    2 ++
 3 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index 41a86ba..1f64366 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -1443,6 +1443,9 @@ bool Buffer::save() const
 
        FileName savefile(tempfile->name());
        LYXERR(Debug::FILES, "Saving to " << savefile.absFileName());
+       if (!savefile.clonePermissions(fileName()))
+               LYXERR0("Failed to clone the permission from " << 
fileName().absFileName() << " to " << savefile.absFileName());
+
        if (!writeFile(savefile))
                return false;
 
diff --git a/src/support/FileName.cpp b/src/support/FileName.cpp
index 3d22acb..b485ae9 100644
--- a/src/support/FileName.cpp
+++ b/src/support/FileName.cpp
@@ -288,6 +288,13 @@ bool FileName::changePermission(unsigned long int mode) 
const
        return true;
 }
 
+bool FileName::clonePermissions(FileName const & source)
+{
+       QFile fin(toqstr(source.absFileName()));
+       QFile f(toqstr(absFileName()));
+
+       return f.setPermissions(fin.permissions());
+}
 
 string FileName::toFilesystemEncoding() const
 {
diff --git a/src/support/FileName.h b/src/support/FileName.h
index 8264d80..fad5077 100644
--- a/src/support/FileName.h
+++ b/src/support/FileName.h
@@ -150,6 +150,8 @@ public:
        /// support this.
        /// \return true on success.
        bool changePermission(unsigned long int mode) const;
+       // sets permission based on the file given as an argument
+       bool clonePermissions(FileName const & target);
 
        /// remove pointed directory and all contents.
        /// \return true on success.

Reply via email to