also use `FileSystem::removeRecursively` to properly handle deletion of
read-only directories/files
There's now an integration test for this feature after all those years
as well ;-)
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
ensure we use currently existing server API to get the "no download"
permission
requires parsing some share-attributes new DAV property
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
Extra safeguard to ensure that the usage of
`FileSystem::setFolderPermissions` won't start a new sync run if
FolderWatcher/inotify detects a change in the file metadata...
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
makes our fake server require an md5 custom checksum for bulk upload
until version 32.0.0
starting with 32.0.0 this custom checksum must be empty
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
for now simple rule to guess if the server has windows naming enforced
if windows naming is enforced, we enforce it for new files
if not, we do not care
for now limited to spaces removal
more to come
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
ran
run-clang-tidy-14.py -header-filter='.*' -checks='-*,modernize-use-nodiscard' -fix
under linux with most part of our code covered
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
ensure that we never try to sync a file with a sync that would result in
setting it up to an invalid mtime
test a recovery scenario with plain old sync folder and virtual files
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
add PutMultiFileJob to send many files at once
use it in BulkPropagatorJob to implement bulk upload feature
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
Previously the source was deleted (or attempted to be deleted), even if
the new location was not acceptable for upload. This could make data
unavilable on the server.
For #7410
By introducing a PropagateRootDirectory job that explicitly
separates the directory deletion jobs from all the other jobs.
Note that this means that if there are errors in subJobs the
dirDeletionJobs won't get executed.
Previously RequestEtagJob did return the etag verbatim (including extra
quotes) while the db had the parsed form. That caused the etag
comparison during discovery move detection to always fail. The test
didn't catch it because the etags there didn't have quotes.
Now:
- RequestEtagJob will parse the etag, leading to a consistent format
- Tests have etags with quotes, detecting the problem
Since Qt does not yet transparently resend HTTP2 requests in some cases
we do it manually.
The test showed a problem where the initial non-200 reply would close
the target temporary file and the follow-up request couldn't store any
data. Removing that close() call is safe because there also is a
_saveBodyToFile flag that guards writes to the target file.