From 7c39907251a73e91b81f2ae8cc3e0703cb494933 Mon Sep 17 00:00:00 2001 From: Toni Spets Date: Fri, 17 Jul 2020 19:36:24 +0300 Subject: [PATCH] Substitute tilde with USERPROFILE on Windows The substitution is now more shell-like and tilde is only replaced from the beginning of the path if it is trailed by a slash. --- src/core/Tools.cpp | 6 +++++- tests/TestTools.cpp | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/core/Tools.cpp b/src/core/Tools.cpp index 1b3eafcc..d29e92bf 100644 --- a/src/core/Tools.cpp +++ b/src/core/Tools.cpp @@ -331,11 +331,15 @@ namespace Tools #if defined(Q_OS_WIN) QRegularExpression varRe("\\%([A-Za-z][A-Za-z0-9_]*)\\%"); + QString homeEnv = "USERPROFILE"; #else QRegularExpression varRe("\\$([A-Za-z][A-Za-z0-9_]*)"); - subbed.replace("~", environment.value("HOME")); + QString homeEnv = "HOME"; #endif + if (subbed.startsWith("~/") || subbed.startsWith("~\\")) + subbed.replace(0, 1, environment.value(homeEnv)); + QRegularExpressionMatch match; do { diff --git a/tests/TestTools.cpp b/tests/TestTools.cpp index 4809a8bc..cdce6e04 100644 --- a/tests/TestTools.cpp +++ b/tests/TestTools.cpp @@ -72,10 +72,14 @@ void TestTools::testEnvSubstitute() #if defined(Q_OS_WIN) environment.insert("HOMEDRIVE", "C:"); environment.insert("HOMEPATH", "\\Users\\User"); + environment.insert("USERPROFILE", "C:\\Users\\User"); QCOMPARE(Tools::envSubstitute("%HOMEDRIVE%%HOMEPATH%\\.ssh\\id_rsa", environment), QString("C:\\Users\\User\\.ssh\\id_rsa")); QCOMPARE(Tools::envSubstitute("start%EMPTY%%EMPTY%%%HOMEDRIVE%%end", environment), QString("start%C:%end")); + QCOMPARE(Tools::envSubstitute("%USERPROFILE%\\.ssh\\id_rsa", environment), + QString("C:\\Users\\User\\.ssh\\id_rsa")); + QCOMPARE(Tools::envSubstitute("~\\.ssh\\id_rsa", environment), QString("C:\\Users\\User\\.ssh\\id_rsa")); #else environment.insert("HOME", QString("/home/user")); environment.insert("USER", QString("user"));