]> git.lyx.org Git - features.git/commitdiff
Keep permissions of the saved files intact.
authorPavel Sanda <sanda@lyx.org>
Fri, 7 Dec 2018 22:10:46 +0000 (23:10 +0100)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 18 Jun 2020 12:39:51 +0000 (14:39 +0200)
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
src/support/FileName.cpp
src/support/FileName.h

index 41a86ba1a90521769da3dc9fe60c859bd35a17b3..1f6436662d56c37017878922b661482bc3a50f3c 100644 (file)
@@ -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;
 
index 3d22acbe705e497ed38ffbdb1e26e61a94b1de34..b485ae939524d989d585110ac5c5aed9d2e2bb76 100644 (file)
@@ -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
 {
index 8264d8087bd0052715bc2098a3851869c9e04472..fad5077bdf90d2a3bceed7f35c581266eacf6a2b 100644 (file)
@@ -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.