Skip to content

Commit

Permalink
Add .sync-exclude.lst to exclude files
Browse files Browse the repository at this point in the history
Previously the .sync-exclude.lst file of the sync root directory was
not added to the exclude files, because the current logic did only
recognize .sync-exclude.lst files when their containing directory was
discovered during the discovery phase. Therefore the sync root
.sync-exclude.lst file was never discovered. See also
ExcludedFiles::traversalPatternMatch().

Fix: #3830, #2728

Signed-off-by: Felix Weilbach <[email protected]>
  • Loading branch information
Felix Weilbach authored and mgallien committed Nov 30, 2021
1 parent 592678e commit cec16d0
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 6 deletions.
10 changes: 4 additions & 6 deletions src/csync/csync_exclude.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -232,18 +232,16 @@ ExcludedFiles::ExcludedFiles(const QString &localPath)
// We're in a detached exclude probably coming from a partial sync or test
if (_localPath.isEmpty())
return;

// Load exclude file from base dir
QFileInfo fi(_localPath + QStringLiteral(".sync-exclude.lst"));
if (fi.isReadable())
addInTreeExcludeFilePath(fi.absoluteFilePath());
}

ExcludedFiles::~ExcludedFiles() = default;

void ExcludedFiles::addExcludeFilePath(const QString &path)
{
_excludeFiles[_localPath].append(path);
auto &excludeFilesLocalPath = _excludeFiles[_localPath];
if (std::find(excludeFilesLocalPath.cbegin(), excludeFilesLocalPath.cend(), path) == excludeFilesLocalPath.cend()) {
excludeFilesLocalPath.append(path);
}
}

void ExcludedFiles::addInTreeExcludeFilePath(const QString &path)
Expand Down
5 changes: 5 additions & 0 deletions src/libsync/syncengine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,11 @@ void SyncEngine::startSync()
_discoveryPhase.reset(new DiscoveryPhase);
_discoveryPhase->_account = _account;
_discoveryPhase->_excludes = _excludedFiles.data();
const QString excludeFilePath = _localPath + QStringLiteral(".sync-exclude.lst");
if (QFile::exists(excludeFilePath)) {
_discoveryPhase->_excludes->addExcludeFilePath(excludeFilePath);
_discoveryPhase->_excludes->reloadExcludeFiles();
}
_discoveryPhase->_statedb = _journal;
_discoveryPhase->_localDir = _localPath;
if (!_discoveryPhase->_localDir.endsWith('/'))
Expand Down

0 comments on commit cec16d0

Please sign in to comment.