ProjectExplorer: Introduce 'userAtHostAndPort'

There is a case where we need the no-port version even with a
non-standard port.

Provide access to both version, but to avoid confusion, make the
difference explicit in the function names.

Fixes: QTCREATORBUG-29616
Change-Id: I9b93b7dd89099a4f24a7c7c0174bdc97b85666d4
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2023-10-05 11:55:42 +02:00
parent 0a5f48a949
commit af558a431f
5 changed files with 30 additions and 6 deletions

View File

@@ -27,6 +27,12 @@ QString SshParameters::userAtHost() const
if (!m_userName.isEmpty()) if (!m_userName.isEmpty())
res = m_userName + '@'; res = m_userName + '@';
res += m_host; res += m_host;
return res;
}
QString SshParameters::userAtHostAndPort() const
{
QString res = SshParameters::userAtHost();
if (m_port != 22) if (m_port != 22)
res += QString(":%1").arg(m_port); res += QString(":%1").arg(m_port);
return res; return res;
@@ -142,6 +148,15 @@ const QString userAtHost()
return userMidFix + getHostFromEnvironment(); return userMidFix + getHostFromEnvironment();
} }
const QString userAtHostAndPort()
{
QString res = userAtHost();
const int port = getPortFromEnvironment();
if (port != 22)
res += QString(":%1").arg(port);
return res;
}
SshParameters getParameters() SshParameters getParameters()
{ {
SshParameters params; SshParameters params;

View File

@@ -32,6 +32,7 @@ public:
QString userName() const { return m_userName; } QString userName() const { return m_userName; }
QString userAtHost() const; QString userAtHost() const;
QString userAtHostAndPort() const;
void setHost(const QString &host) { m_host = host; } void setHost(const QString &host) { m_host = host; }
void setPort(int port) { m_port = port; } void setPort(int port) { m_port = port; }
@@ -63,6 +64,7 @@ quint16 PROJECTEXPLORER_EXPORT getPortFromEnvironment();
const QString PROJECTEXPLORER_EXPORT getUserFromEnvironment(); const QString PROJECTEXPLORER_EXPORT getUserFromEnvironment();
const QString PROJECTEXPLORER_EXPORT getKeyFileFromEnvironment(); const QString PROJECTEXPLORER_EXPORT getKeyFileFromEnvironment();
const PROJECTEXPLORER_EXPORT QString userAtHost(); const PROJECTEXPLORER_EXPORT QString userAtHost();
const PROJECTEXPLORER_EXPORT QString userAtHostAndPort();
SshParameters PROJECTEXPLORER_EXPORT getParameters(); SshParameters PROJECTEXPLORER_EXPORT getParameters();
bool PROJECTEXPLORER_EXPORT checkParameters(const SshParameters &params); bool PROJECTEXPLORER_EXPORT checkParameters(const SshParameters &params);
void PROJECTEXPLORER_EXPORT printSetupHelp(); void PROJECTEXPLORER_EXPORT printSetupHelp();

View File

@@ -33,7 +33,7 @@ static const char TEST_DIR[] = "/tmp/testdir";
static const FilePath baseFilePath() static const FilePath baseFilePath()
{ {
return FilePath::fromString("ssh://" + SshTest::userAtHost() + QString(TEST_DIR)); return FilePath::fromString("ssh://" + SshTest::userAtHostAndPort() + QString(TEST_DIR));
} }
TestLinuxDeviceFactory::TestLinuxDeviceFactory() TestLinuxDeviceFactory::TestLinuxDeviceFactory()
@@ -55,7 +55,7 @@ TestLinuxDeviceFactory::TestLinuxDeviceFactory()
FilePath createFile(const QString &name) FilePath createFile(const QString &name)
{ {
FilePath testFilePath = baseFilePath() / name; FilePath testFilePath = baseFilePath() / name;
FilePath dummyFilePath = FilePath::fromString("ssh://" + SshTest::userAtHost() + "/dev/null"); FilePath dummyFilePath = FilePath::fromString("ssh://" + SshTest::userAtHostAndPort() + "/dev/null");
dummyFilePath.copyFile(testFilePath); dummyFilePath.copyFile(testFilePath);
return testFilePath; return testFilePath;
} }

View File

@@ -843,13 +843,14 @@ public:
<< m_displaylessSshParameters.host()); << m_displaylessSshParameters.host());
cmd.addArg("/bin/sh"); cmd.addArg("/bin/sh");
m_shell.reset(new LinuxDeviceShell(cmd, FilePath::fromString(QString("ssh://%1/").arg(parameters.userAtHost())))); m_shell.reset(new LinuxDeviceShell(cmd,
FilePath::fromString(QString("ssh://%1/").arg(parameters.userAtHostAndPort()))));
connect(m_shell.get(), &DeviceShell::done, this, [this] { connect(m_shell.get(), &DeviceShell::done, this, [this] {
m_shell.release()->deleteLater(); m_shell.release()->deleteLater();
}); });
auto result = m_shell->start(); auto result = m_shell->start();
if (!result) { if (!result) {
qCWarning(linuxDeviceLog) << "Failed to start shell for:" << parameters.userAtHost() qCWarning(linuxDeviceLog) << "Failed to start shell for:" << parameters.userAtHostAndPort()
<< ", " << result.error(); << ", " << result.error();
} }
return result.has_value(); return result.has_value();
@@ -1027,16 +1028,21 @@ QString LinuxDevice::userAtHost() const
return sshParameters().userAtHost(); return sshParameters().userAtHost();
} }
QString LinuxDevice::userAtHostAndPort() const
{
return sshParameters().userAtHostAndPort();
}
FilePath LinuxDevice::rootPath() const FilePath LinuxDevice::rootPath() const
{ {
return FilePath::fromParts(u"ssh", userAtHost(), u"/"); return FilePath::fromParts(u"ssh", userAtHostAndPort(), u"/");
} }
bool LinuxDevice::handlesFile(const FilePath &filePath) const bool LinuxDevice::handlesFile(const FilePath &filePath) const
{ {
if (filePath.scheme() == u"device" && filePath.host() == id().toString()) if (filePath.scheme() == u"device" && filePath.host() == id().toString())
return true; return true;
if (filePath.scheme() == u"ssh" && filePath.host() == userAtHost()) if (filePath.scheme() == u"ssh" && filePath.host() == userAtHostAndPort())
return true; return true;
return false; return false;
} }

View File

@@ -29,6 +29,7 @@ public:
bool usableAsBuildDevice() const override; bool usableAsBuildDevice() const override;
QString userAtHost() const; QString userAtHost() const;
QString userAtHostAndPort() const;
Utils::FilePath rootPath() const override; Utils::FilePath rootPath() const override;