Skip to content

Commit 8dd614d

Browse files
committed
libsync: Fix checksum and size for symlinks in bulk upload
1 parent 40caf4c commit 8dd614d

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

src/libsync/bulkpropagatorjob.cpp

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,6 @@ void BulkPropagatorJob::triggerUpload()
210210
0,
211211
std::numeric_limits<qint64>::max(),
212212
&propagator()->_bandwidthManager);
213-
singleFile._headers["Content-Length"] = QByteArray::number(device->size());
214213
} else {
215214
device = std::make_unique<UploadDevice>(singleFile._localPath,
216215
0,
@@ -234,7 +233,7 @@ void BulkPropagatorJob::triggerUpload()
234233
}
235234

236235
singleFile._headers["X-File-Path"] = singleFile._remotePath.toUtf8();
237-
singleFile._headers["X-File-Type"] = QString::number(singleFile._item->_type == ItemTypeSoftLink).toUtf8();
236+
singleFile._headers["OC-File-Type"] = QString::number(singleFile._item->_type).toUtf8();
238237
uploadParametersData.push_back({std::move(device), singleFile._headers});
239238
timeout += singleFile._fileSize;
240239
}
@@ -282,12 +281,24 @@ void BulkPropagatorJob::slotComputeTransmissionChecksum(SyncFileItemPtr item,
282281
const auto checksumType = uploadChecksumEnabled() ? "MD5" : "";
283282
computeChecksum->setChecksumType(checksumType);
284283

285-
connect(computeChecksum, &ComputeChecksum::done, this, [this, item, fileToUpload] (const QByteArray &contentChecksumType, const QByteArray &contentChecksum) {
286-
slotStartUpload(item, fileToUpload, contentChecksumType, contentChecksum);
287-
});
288-
connect(computeChecksum, &ComputeChecksum::done, computeChecksum, &QObject::deleteLater);
284+
if (item->_type == CSyncEnums::ItemTypeSoftLink) {
285+
auto checksumDevice = QSharedPointer<SymLinkUploadDevice>::create(fileToUpload._path,
286+
0,
287+
std::numeric_limits<qint64>::max(),
288+
&propagator()->_bandwidthManager);
289+
const auto contentChecksum = ComputeChecksum().computeNow(checksumDevice, checksumType);
290+
item->_size = checksumDevice->size();
291+
fileToUpload._size = checksumDevice->size();
292+
slotStartUpload(item, fileToUpload, checksumType, contentChecksum);
293+
computeChecksum->deleteLater();
294+
} else {
295+
connect(computeChecksum, &ComputeChecksum::done, this, [this, item, fileToUpload] (const QByteArray &contentChecksumType, const QByteArray &contentChecksum) {
296+
slotStartUpload(item, fileToUpload, contentChecksumType, contentChecksum);
297+
});
298+
connect(computeChecksum, &ComputeChecksum::done, computeChecksum, &QObject::deleteLater);
289299

290-
computeChecksum->start(fileToUpload._path);
300+
computeChecksum->start(fileToUpload._path);
301+
}
291302
}
292303

293304
void BulkPropagatorJob::slotStartUpload(SyncFileItemPtr item,
@@ -333,8 +344,10 @@ void BulkPropagatorJob::slotStartUpload(SyncFileItemPtr item,
333344
return;
334345
}
335346

336-
fileToUpload._size = FileSystem::getSize(fullFilePath);
337-
item->_size = FileSystem::getSize(originalFilePath);
347+
if (!item->isSymLink()) {
348+
fileToUpload._size = FileSystem::getSize(fullFilePath);
349+
item->_size = FileSystem::getSize(originalFilePath);
350+
}
338351

339352
// But skip the file if the mtime is too close to 'now'!
340353
// That usually indicates a file that is still being changed

0 commit comments

Comments
 (0)