fix(dirWatcher):subVolume has not been excluded while adding '/' to search path.
This commit is contained in:
parent
63ec090747
commit
2f3d2cefad
|
@ -107,26 +107,7 @@ QStringList SearchDir::blackListOfDir(const QString &dirPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const Volume &volume : VolumeManager::self()->volumesHaveSubVolumes()) {
|
blackListOfDir << handleSubVolumes4SingleDir(dirPath);
|
||||||
for (const QString &duplicateMountPoint : volume.mountPoints()) {
|
|
||||||
QMap<QString, QString> subVolumeInfo = volume.subVolumes();
|
|
||||||
if (subVolumeInfo.keys().contains(duplicateMountPoint)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
for (auto it = subVolumeInfo.constBegin(); it != subVolumeInfo.constEnd(); it++) {
|
|
||||||
QString spec = it.key();
|
|
||||||
QString subMountPoint = duplicateMountPoint + it.value();
|
|
||||||
//排除搜索列表指定多个目录时子卷会重复包含的情况,比如同时指定/home和/data/home
|
|
||||||
QString tmp = dirPath;
|
|
||||||
if (dirPath.startsWith(subMountPoint)) {
|
|
||||||
blackListOfDir.append(tmp.replace(0, subMountPoint.length(), spec));
|
|
||||||
}
|
|
||||||
if (dirPath.startsWith(spec)) {
|
|
||||||
blackListOfDir.append(tmp.replace(0, spec.length(), subMountPoint));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return blackListOfDir;
|
return blackListOfDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,6 +158,7 @@ void SearchDir::handleBlackListGenerate()
|
||||||
}
|
}
|
||||||
m_blackList << repeatMountPoints;
|
m_blackList << repeatMountPoints;
|
||||||
}
|
}
|
||||||
|
m_blackList.append(handleSubVolumes4SingleDir("/"));
|
||||||
m_blackList.removeDuplicates();
|
m_blackList.removeDuplicates();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -354,3 +336,40 @@ void SearchDir::handleBlackListGenerate()
|
||||||
}
|
}
|
||||||
m_blackList.removeDuplicates();
|
m_blackList.removeDuplicates();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList SearchDir::handleSubVolumes4SingleDir(const QString &searchDir) {
|
||||||
|
QStringList blackList;
|
||||||
|
for (const Volume &volume : VolumeManager::self()->volumesHaveSubVolumes()) {
|
||||||
|
QMap<QString, QString> subVolumeInfo = volume.subVolumes();
|
||||||
|
for (auto it = subVolumeInfo.constBegin(); it != subVolumeInfo.constEnd(); it++) {
|
||||||
|
QString subMountPoint = it.key();
|
||||||
|
|
||||||
|
for (const QString &duplicateMountPoint : volume.mountPoints()) {
|
||||||
|
if (subVolumeInfo.keys().contains(duplicateMountPoint)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
QString spec = duplicateMountPoint + it.value(); //子卷对应目录
|
||||||
|
|
||||||
|
if (searchDir == "/") {
|
||||||
|
blackList << spec;
|
||||||
|
} else {
|
||||||
|
//排除搜索列表指定多个目录时子卷会重复包含的情况,比如同时指定/home和/data/home
|
||||||
|
QString tmp = searchDir;
|
||||||
|
if (searchDir.startsWith(subMountPoint + "/")) {
|
||||||
|
blackList << tmp.replace(0, subMountPoint.length(), spec);
|
||||||
|
}
|
||||||
|
//要添加目录下存在子卷(要添加/data,但挂到/home的/data/home是子卷),若添加了/home则将/data/home排除
|
||||||
|
if (searchDir.startsWith(spec + "/")) {
|
||||||
|
blackList << tmp.replace(0, spec.length(), subMountPoint);
|
||||||
|
}
|
||||||
|
if (spec.startsWith(searchDir + "/")) {
|
||||||
|
if (searchDir == subMountPoint || subMountPoint.startsWith(searchDir + "/")) {
|
||||||
|
blackList << spec;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return blackList;
|
||||||
|
}
|
||||||
|
|
|
@ -46,6 +46,7 @@ public:
|
||||||
static QStringList blackListOfDir(const QString &dirPath);
|
static QStringList blackListOfDir(const QString &dirPath);
|
||||||
private:
|
private:
|
||||||
void handleBlackListGenerate();
|
void handleBlackListGenerate();
|
||||||
|
static QStringList handleSubVolumes4SingleDir(const QString& searchDir);
|
||||||
QString m_path;
|
QString m_path;
|
||||||
QStringList m_blackList;
|
QStringList m_blackList;
|
||||||
ErrorInfo m_error = ErrorInfo::Successful;
|
ErrorInfo m_error = ErrorInfo::Successful;
|
||||||
|
|
Loading…
Reference in New Issue