[Pkg-owncloud-commits] [owncloud-client] 75/84: Improvements to file recall

Sandro Knauß hefee at moszumanska.debian.org
Fri Oct 21 22:51:57 UTC 2016


This is an automated email from the git hooks/post-receive script.

hefee pushed a commit to branch master
in repository owncloud-client.

commit 3e1690ff7abbcfe00d8d565860511110bc61cc7b
Author: Christian Kamm <mail at ckamm.de>
Date:   Wed Sep 14 15:42:19 2016 +0200

    Improvements to file recall
---
 csync/tests/ownCloud/t_recall.pl  |  6 ++++++
 src/libsync/propagatedownload.cpp | 45 ++++++++++++++++++++++++++++-----------
 2 files changed, 38 insertions(+), 13 deletions(-)

diff --git a/csync/tests/ownCloud/t_recall.pl b/csync/tests/ownCloud/t_recall.pl
index 244618c..de0e170 100755
--- a/csync/tests/ownCloud/t_recall.pl
+++ b/csync/tests/ownCloud/t_recall.pl
@@ -56,6 +56,8 @@ assertLocalAndRemoteDir( '', 0);
 printInfo( "Testing with a .sys.admin#recall#" );
 system("echo 'dir/file2.dat' > ". $tmpdir . ".sys.admin\#recall\#");
 system("echo 'dir/file3.dat' >> ". $tmpdir . ".sys.admin\#recall\#");
+system("echo 'nonexistant' >> ". $tmpdir . ".sys.admin\#recall\#");
+system("echo '/tmp/t_recall/file4.dat' >> ". $tmpdir . ".sys.admin\#recall\#");
 glob_put( "$tmpdir/.sys.admin\#recall\#", "" );
 
 csync();
@@ -68,6 +70,10 @@ assert( -e glob(localDir().'dir/file3_.sys.admin#recall#-*.dat' ) );
 assert( -e glob(localDir().'dir/file2.dat' ) );
 assert( -e glob(localDir().'dir/file3.dat' ) );
 
+assert( !-e glob(localDir().'nonexistant*' ) );
+assert( !-e glob('/tmp/t_recall/file4_.sys.admin#recall#-*.dat' ) );
+assert( -e glob('/tmp/t_recall/file4.dat' ) );
+
 #Remove the recall file
 unlink(localDir() . ".sys.admin#recall#");
 
diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp
index 27a214d..92618e7 100644
--- a/src/libsync/propagatedownload.cpp
+++ b/src/libsync/propagatedownload.cpp
@@ -617,30 +617,47 @@ static QString makeRecallFileName(const QString &fn)
     return recallFileName;
 }
 
-static void handleRecallFile(const QString &fn)
+void handleRecallFile(const QString& filePath, const QString& folderPath, SyncJournalDb& journal)
 {
-    qDebug() << "handleRecallFile: " << fn;
+    qDebug() << "handleRecallFile: " << filePath;
 
-    FileSystem::setFileHidden(fn, true);
+    FileSystem::setFileHidden(filePath, true);
 
-    QFile file(fn);
+    QFile file(filePath);
     if (!file.open(QIODevice::ReadOnly)) {
         qWarning() << "Could not open recall file" << file.errorString();
         return;
     }
-    QFileInfo existingFile(fn);
-    QDir thisDir = existingFile.dir();
+    QFileInfo existingFile(filePath);
+    QDir baseDir = existingFile.dir();
 
     while (!file.atEnd()) {
         QByteArray line = file.readLine();
         line.chop(1); // remove trailing \n
-        QString fpath = thisDir.filePath(line);
-        QString rpath = makeRecallFileName(fpath);
 
-        qDebug() << "Copy recall file: " << fpath << " -> " << rpath;
+        QString recalledFile = QDir::cleanPath(baseDir.filePath(line));
+        if (!recalledFile.startsWith(folderPath) || !recalledFile.startsWith(baseDir.path())) {
+            qDebug() << "Ignoring recall of " << recalledFile;
+            continue;
+        }
+
+        // Path of the recalled file in the local folder
+        QString localRecalledFile = recalledFile.mid(folderPath.size());
+
+        SyncJournalFileRecord record = journal.getFileRecord(localRecalledFile);
+        if (!record.isValid()) {
+            qDebug() << "No db entry for recall of" << localRecalledFile;
+            continue;
+        }
+
+        qDebug() << "Recalling" << localRecalledFile << "Checksum:" << record._contentChecksumType << record._contentChecksum;
+
+        QString targetPath = makeRecallFileName(recalledFile);
+
+        qDebug() << "Copy recall file: " << recalledFile << " -> " << targetPath;
         // Remove the target first, QFile::copy will not overwrite it.
-        FileSystem::remove(rpath);
-        QFile::copy(fpath, rpath);
+        FileSystem::remove(targetPath);
+        QFile::copy(recalledFile, targetPath);
     }
 }
 
@@ -797,8 +814,10 @@ void PropagateDownloadFileQNAM::downloadFinished()
     done(isConflict ? SyncFileItem::Conflict : SyncFileItem::Success);
 
     // handle the special recall file
-    if(_item->_file == QLatin1String(".sys.admin#recall#") || _item->_file.endsWith("/.sys.admin#recall#")) {
-        handleRecallFile(fn);
+    if(!_item->_remotePerm.contains("S")
+            && (_item->_file == QLatin1String(".sys.admin#recall#")
+                || _item->_file.endsWith("/.sys.admin#recall#"))) {
+        handleRecallFile(fn, _propagator->_localDir, *_propagator->_journal);
     }
 
     qint64 duration = _stopwatch.elapsed();

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git



More information about the Pkg-owncloud-commits mailing list