forked from qt-creator/qt-creator
RemoteLinux: Proper double-remote
There seems something wrong with quoting the sed command for port access which should be fixed independently. As it is not crucial for plain deployment / run, make the test optional. Change-Id: Id82bdc7c25a7fb6e2f8799676b869216a7720cfa Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
@@ -392,7 +392,6 @@ public:
|
|||||||
|
|
||||||
QString m_socketFilePath;
|
QString m_socketFilePath;
|
||||||
SshParameters m_sshParameters;
|
SshParameters m_sshParameters;
|
||||||
IDevice::ConstPtr m_linkDevice;
|
|
||||||
|
|
||||||
bool m_connecting = false;
|
bool m_connecting = false;
|
||||||
bool m_killed = false;
|
bool m_killed = false;
|
||||||
@@ -596,12 +595,32 @@ SshProcessInterfacePrivate::SshProcessInterfacePrivate(SshProcessInterface *sshI
|
|||||||
void SshProcessInterfacePrivate::start()
|
void SshProcessInterfacePrivate::start()
|
||||||
{
|
{
|
||||||
clearForStart();
|
clearForStart();
|
||||||
|
m_sshParameters = m_device->sshParameters();
|
||||||
|
|
||||||
const Id linkDeviceId = Id::fromSetting(m_device->extraData(Constants::LinkDevice));
|
const Id linkDeviceId = Id::fromSetting(m_device->extraData(Constants::LinkDevice));
|
||||||
m_linkDevice = DeviceManager::instance()->find(linkDeviceId);
|
if (const IDevice::ConstPtr linkDevice = DeviceManager::instance()->find(linkDeviceId)) {
|
||||||
m_useConnectionSharing = !m_linkDevice && SshSettings::connectionSharingEnabled();
|
CommandLine cmd{linkDevice->filePath("ssh")};
|
||||||
|
if (!m_sshParameters.userName().isEmpty()) {
|
||||||
|
cmd.addArg("-l");
|
||||||
|
cmd.addArg(m_sshParameters.userName());
|
||||||
|
}
|
||||||
|
cmd.addArg(m_sshParameters.host());
|
||||||
|
|
||||||
|
const CommandLine full = q->m_setup.m_commandLine;
|
||||||
|
if (!full.isEmpty()) {
|
||||||
|
// Empty is ok in case of opening a terminal.
|
||||||
|
cmd.addArgs(QString("echo ") + s_pidMarker + "\\$\\$" + s_pidMarker + " \\&\\& ",
|
||||||
|
CommandLine::Raw);
|
||||||
|
cmd.addCommandLineAsArgs(full, CommandLine::Raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_process.setCommand(cmd);
|
||||||
|
m_process.start();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_useConnectionSharing = SshSettings::connectionSharingEnabled();
|
||||||
|
|
||||||
m_sshParameters = m_device->sshParameters();
|
|
||||||
// TODO: Do we really need it for master process?
|
// TODO: Do we really need it for master process?
|
||||||
m_sshParameters.x11DisplayName
|
m_sshParameters.x11DisplayName
|
||||||
= q->m_setup.m_extraData.value("Ssh.X11ForwardToDisplay").toString();
|
= q->m_setup.m_extraData.value("Ssh.X11ForwardToDisplay").toString();
|
||||||
@@ -672,17 +691,14 @@ void SshProcessInterfacePrivate::doStart()
|
|||||||
m_process.start();
|
m_process.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
static CommandLine getCommandLine(
|
CommandLine SshProcessInterfacePrivate::fullLocalCommandLine() const
|
||||||
const FilePath sshBinary,
|
|
||||||
const CommandLine commandLine0,
|
|
||||||
const FilePath &workingDirectory,
|
|
||||||
const Environment &env,
|
|
||||||
const QStringList &options,
|
|
||||||
bool useX,
|
|
||||||
bool useTerminal,
|
|
||||||
bool usePidMarker,
|
|
||||||
bool sourceProfile)
|
|
||||||
{
|
{
|
||||||
|
const FilePath sshBinary = SshSettings::sshFilePath();
|
||||||
|
const bool useTerminal = q->m_setup.m_terminalMode != TerminalMode::Off || q->m_setup.m_ptyData;
|
||||||
|
const bool usePidMarker = !useTerminal;
|
||||||
|
const bool sourceProfile = m_device->extraData(Constants::SourceProfile).toBool();
|
||||||
|
const bool useX = !m_sshParameters.x11DisplayName.isEmpty();
|
||||||
|
|
||||||
CommandLine cmd{sshBinary};
|
CommandLine cmd{sshBinary};
|
||||||
|
|
||||||
if (useX)
|
if (useX)
|
||||||
@@ -692,9 +708,13 @@ static CommandLine getCommandLine(
|
|||||||
|
|
||||||
cmd.addArg("-q");
|
cmd.addArg("-q");
|
||||||
|
|
||||||
cmd.addArgs(options);
|
cmd.addArgs(m_sshParameters.connectionOptions(sshBinary));
|
||||||
|
if (!m_socketFilePath.isEmpty())
|
||||||
|
cmd.addArgs({"-o", "ControlPath=" + m_socketFilePath});
|
||||||
|
|
||||||
CommandLine commandLine = commandLine0;
|
cmd.addArg(m_sshParameters.host());
|
||||||
|
|
||||||
|
CommandLine commandLine = q->m_setup.m_commandLine;
|
||||||
FilePath executable = FilePath::fromParts({}, {}, commandLine.executable().path());
|
FilePath executable = FilePath::fromParts({}, {}, commandLine.executable().path());
|
||||||
commandLine.setExecutable(executable);
|
commandLine.setExecutable(executable);
|
||||||
|
|
||||||
@@ -710,6 +730,7 @@ static CommandLine getCommandLine(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const FilePath &workingDirectory = q->m_setup.m_workingDirectory;
|
||||||
if (!workingDirectory.isEmpty()) {
|
if (!workingDirectory.isEmpty()) {
|
||||||
inner.addArgs({"cd", workingDirectory.path()});
|
inner.addArgs({"cd", workingDirectory.path()});
|
||||||
inner.addArgs("&&", CommandLine::Raw);
|
inner.addArgs("&&", CommandLine::Raw);
|
||||||
@@ -718,6 +739,7 @@ static CommandLine getCommandLine(
|
|||||||
if (usePidMarker)
|
if (usePidMarker)
|
||||||
inner.addArgs(QString("echo ") + s_pidMarker + "$$" + s_pidMarker + " && ", CommandLine::Raw);
|
inner.addArgs(QString("echo ") + s_pidMarker + "$$" + s_pidMarker + " && ", CommandLine::Raw);
|
||||||
|
|
||||||
|
const Environment &env = q->m_setup.m_environment;
|
||||||
env.forEachEntry([&](const QString &key, const QString &value, bool) {
|
env.forEachEntry([&](const QString &key, const QString &value, bool) {
|
||||||
inner.addArgs(key + "='" + env.expandVariables(value) + '\'', CommandLine::Raw);
|
inner.addArgs(key + "='" + env.expandVariables(value) + '\'', CommandLine::Raw);
|
||||||
});
|
});
|
||||||
@@ -733,64 +755,6 @@ static CommandLine getCommandLine(
|
|||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
CommandLine SshProcessInterfacePrivate::fullLocalCommandLine() const
|
|
||||||
{
|
|
||||||
const FilePath sshBinary = SshSettings::sshFilePath();
|
|
||||||
const bool useTerminal = q->m_setup.m_terminalMode != TerminalMode::Off || q->m_setup.m_ptyData;
|
|
||||||
const bool usePidMarker = !useTerminal;
|
|
||||||
const bool sourceProfile = m_device->extraData(Constants::SourceProfile).toBool();
|
|
||||||
const bool useX = !m_sshParameters.x11DisplayName.isEmpty();
|
|
||||||
|
|
||||||
CommandLine cmd;
|
|
||||||
if (m_linkDevice) {
|
|
||||||
QStringList farOptions = m_sshParameters.connectionOptions("ssh");
|
|
||||||
farOptions << m_sshParameters.host();
|
|
||||||
|
|
||||||
const SshParameters nearParameters = m_linkDevice->sshParameters();
|
|
||||||
QStringList nearOptions = nearParameters.connectionOptions(sshBinary);
|
|
||||||
// if (!m_socketFilePath.isEmpty())
|
|
||||||
// options << "-o" << ("ControlPath=" + m_socketFilePath);
|
|
||||||
nearOptions << nearParameters.host();
|
|
||||||
|
|
||||||
cmd = getCommandLine("ssh",
|
|
||||||
q->m_setup.m_commandLine,
|
|
||||||
{},
|
|
||||||
{},
|
|
||||||
farOptions,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false);
|
|
||||||
|
|
||||||
cmd = getCommandLine(sshBinary,
|
|
||||||
cmd,
|
|
||||||
{},
|
|
||||||
{},
|
|
||||||
nearOptions,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
usePidMarker,
|
|
||||||
false);
|
|
||||||
} else {
|
|
||||||
QStringList options = m_sshParameters.connectionOptions(sshBinary);
|
|
||||||
if (!m_socketFilePath.isEmpty())
|
|
||||||
options << "-o" << ("ControlPath=" + m_socketFilePath);
|
|
||||||
options << m_sshParameters.host();
|
|
||||||
|
|
||||||
cmd = getCommandLine(sshBinary,
|
|
||||||
q->m_setup.m_commandLine,
|
|
||||||
q->m_setup.m_workingDirectory,
|
|
||||||
q->m_setup.m_environment,
|
|
||||||
options,
|
|
||||||
useX,
|
|
||||||
useTerminal,
|
|
||||||
usePidMarker,
|
|
||||||
sourceProfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
return cmd;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ShellThreadHandler
|
// ShellThreadHandler
|
||||||
|
|
||||||
static SshParameters displayless(const SshParameters &sshParameters)
|
static SshParameters displayless(const SshParameters &sshParameters)
|
||||||
|
@@ -154,9 +154,14 @@ TaskItem GenericLinuxDeviceTesterPrivate::gathererTask() const
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
const auto error = [this](const DeviceUsedPortsGatherer &gatherer) {
|
const auto error = [this](const DeviceUsedPortsGatherer &gatherer) {
|
||||||
emit q->errorMessage(Tr::tr("Error gathering ports: %1").arg(gatherer.errorString()) + '\n');
|
emit q->errorMessage(Tr::tr("Error gathering ports: %1").arg(gatherer.errorString()) + '\n'
|
||||||
|
+ Tr::tr("Some tools will not work out of the box.\n"));
|
||||||
|
};
|
||||||
|
|
||||||
|
return Group {
|
||||||
|
optional,
|
||||||
|
PortGatherer(setup, done, error)
|
||||||
};
|
};
|
||||||
return PortGatherer(setup, done, error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TaskItem GenericLinuxDeviceTesterPrivate::transferTask(FileTransferMethod method,
|
TaskItem GenericLinuxDeviceTesterPrivate::transferTask(FileTransferMethod method,
|
||||||
|
@@ -65,7 +65,8 @@ RemoteLinuxRunConfiguration::RemoteLinuxRunConfiguration(Target *target, Id id)
|
|||||||
QTC_ASSERT(runDevice, return);
|
QTC_ASSERT(runDevice, return);
|
||||||
const BuildTargetInfo bti = buildTargetInfo();
|
const BuildTargetInfo bti = buildTargetInfo();
|
||||||
const FilePath localExecutable = bti.targetFilePath;
|
const FilePath localExecutable = bti.targetFilePath;
|
||||||
const DeployableFile depFile = target->deploymentData().deployableForLocalFile(localExecutable);
|
const DeploymentData deploymentData = target->deploymentData();
|
||||||
|
const DeployableFile depFile = deploymentData.deployableForLocalFile(localExecutable);
|
||||||
|
|
||||||
exeAspect->setExecutable(runDevice->filePath(depFile.remoteFilePath()));
|
exeAspect->setExecutable(runDevice->filePath(depFile.remoteFilePath()));
|
||||||
symbolsAspect->setFilePath(localExecutable);
|
symbolsAspect->setFilePath(localExecutable);
|
||||||
|
Reference in New Issue
Block a user