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.