diff options
author | Svetlana Abramenkova <sabramenkova@luxoft.com> | 2019-08-14 18:57:18 +0300 |
---|---|---|
committer | Svetlana Abramenkova <sabramenkova@luxoft.com> | 2019-10-03 17:11:01 +0300 |
commit | 75fdf3a9d4f6af8b86bb7ec8628038a3e424a875 (patch) | |
tree | 4e1695e377fda47a3220107e6874b889ff8628f6 | |
parent | ee3277bf453502f0864e591740b1da785c4cc614 (diff) |
fix resolving paths policy
Change-Id: I26a075a4fdbacbcd82ad47a44e913b1e475aa23e
Fixes: AUTOSUITE-1112
Reviewed-by: Nikolay Zamotaev <nzamotaev@luxoft.com>
-rw-r--r-- | src/projectmanager.cpp | 43 |
1 files changed, 35 insertions, 8 deletions
diff --git a/src/projectmanager.cpp b/src/projectmanager.cpp index fd6cad9..07659da 100644 --- a/src/projectmanager.cpp +++ b/src/projectmanager.cpp @@ -75,18 +75,45 @@ bool ProjectManager::read(const QString &path) qWarning() << "Document must be a JSON object"; return false; } + QJsonObject root = document.object(); - if (root.contains(MainKey)) - m_mainDocument = root.value(MainKey).toString(); if (root.contains(WorkspaceKey)) { - m_workspace = root.value(WorkspaceKey).toString(); - } - if (root.contains(ImportsKey) && root.value(ImportsKey).isArray()) { - QJsonArray imports = root.value(ImportsKey).toArray(); - for (QJsonValue value : imports) - m_imports.append(value.toString()); + QString workspacestr = root.value(WorkspaceKey).toString(); + QDir prjdir(m_projectLocation); + + if (prjdir.exists(workspacestr)) { + m_workspace = QDir::cleanPath(prjdir.absoluteFilePath(workspacestr)); + QDir workspacedir(m_workspace); + + if (root.contains(MainKey)) { + if (workspacedir.exists(root.value(MainKey).toString())) { + m_mainDocument = workspacedir.relativeFilePath(root.value(MainKey).toString()); + } else { + qWarning() << "File " + root.value(MainKey).toString() + " doesn't exist at " + m_workspace; + } + } + + if (root.contains(ImportsKey) && root.value(ImportsKey).isArray()) { + QJsonArray imports = root.value(ImportsKey).toArray(); + for (QJsonValue value : imports) { + if (workspacedir.exists(value.toString())) { + m_imports.append(workspacedir.relativeFilePath(value.toString())); + } else { + qWarning() << "Import path " + value.toString() + " doesn't exist at " + m_workspace; + } + } + } + } else { + qCritical() << "Workspace path " + workspacestr + " doesn't exist at " + m_projectLocation; + return false; + } + + } else { + qCritical() << "Document must contain a workspace path"; + return false; } + return true; } |