summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp
diff options
context:
space:
mode:
authorhjk <qthjk@ovi.com>2012-07-26 17:41:52 +0200
committerChristian Kandeler <christian.kandeler@nokia.com>2012-07-27 14:18:21 +0200
commit5c94f8114f691b1b7d635f47f6c1599618ea6897 (patch)
tree5ccd23aa3d7b97c899b5df46b30e2695768b9a2b /src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp
parent4c1dd686cbb3d1f825f34ca1388a6512c803fa5e (diff)
downloadqt-creator-5c94f8114f691b1b7d635f47f6c1599618ea6897.tar.gz
projectexplorer: move kill/list to IDevice
Change-Id: Ic4cbf62a61f7d0bf72e700a77c08788850cde85b Reviewed-by: Christian Kandeler <christian.kandeler@nokia.com>
Diffstat (limited to 'src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp')
-rw-r--r--src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp91
1 files changed, 11 insertions, 80 deletions
diff --git a/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp b/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp
index c1e841488f..fcdf87abf4 100644
--- a/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp
+++ b/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp
@@ -38,23 +38,16 @@ namespace ProjectExplorer {
namespace Internal {
enum State { Inactive, Listing, Killing };
-const char Delimiter0[] = "x--";
-const char Delimiter1[] = "---";
-
-static QString visualizeNull(QString s)
-{
- return s.replace(QLatin1Char('\0'), QLatin1String("<null>"));
-}
class DeviceProcessListPrivate
{
public:
DeviceProcessListPrivate(const IDevice::ConstPtr &devConf)
- : deviceConfiguration(devConf),
+ : device(devConf),
state(Inactive)
{ }
- const IDevice::ConstPtr deviceConfiguration;
+ const IDevice::ConstPtr device;
SshRemoteProcessRunner process;
QList<DeviceProcess> remoteProcesses;
QString errorMsg;
@@ -85,7 +78,7 @@ void DeviceProcessList::update()
endRemoveRows();
}
d->state = Listing;
- startProcess(listProcessesCommandLine());
+ startProcess(d->device->listProcessesCommandLine());
}
void DeviceProcessList::killProcess(int row)
@@ -94,7 +87,7 @@ void DeviceProcessList::killProcess(int row)
QTC_ASSERT(d->state == Inactive, return);
d->state = Killing;
- startProcess(killProcessCommandLine(d->remoteProcesses.at(row)));
+ startProcess(d->device->killProcessCommandLine(d->remoteProcesses.at(row)));
}
DeviceProcess DeviceProcessList::at(int row) const
@@ -102,6 +95,11 @@ DeviceProcess DeviceProcessList::at(int row) const
return d->remoteProcesses.at(row);
}
+IDevice::ConstPtr DeviceProcessList::device() const
+{
+ return d->device;
+}
+
int DeviceProcessList::rowCount(const QModelIndex &parent) const
{
return parent.isValid() ? 0 : d->remoteProcesses.count();
@@ -163,7 +161,7 @@ void DeviceProcessList::handleRemoteProcessFinished(int exitStatus)
if (d->state == Listing) {
beginResetModel();
const QByteArray remoteStdout = d->process.readAllStandardOutput();
- QList<DeviceProcess> processes = buildProcessList(QString::fromUtf8(remoteStdout.data(),
+ QList<DeviceProcess> processes = d->device->buildProcessList(QString::fromUtf8(remoteStdout.data(),
remoteStdout.count()));
if (!processes.isEmpty()) {
beginInsertRows(QModelIndex(), 0, processes.count()-1);
@@ -200,7 +198,7 @@ void DeviceProcessList::startProcess(const QString &cmdLine)
connect(&d->process, SIGNAL(processClosed(int)),
SLOT(handleRemoteProcessFinished(int)));
d->errorMsg.clear();
- d->process.run(cmdLine.toUtf8(), d->deviceConfiguration->sshParameters());
+ d->process.run(cmdLine.toUtf8(), d->device->sshParameters());
}
void DeviceProcessList::setFinished()
@@ -210,73 +208,6 @@ void DeviceProcessList::setFinished()
}
-GenericLinuxProcessList::GenericLinuxProcessList(const IDevice::ConstPtr &devConfig,
- QObject *parent)
- : DeviceProcessList(devConfig, parent)
-{
-}
-
-QString GenericLinuxProcessList::listProcessesCommandLine() const
-{
- return QString::fromLatin1(
- "for dir in `ls -d /proc/[0123456789]*`; do "
- "test -d $dir || continue;" // Decrease the likelihood of a race condition.
- "echo $dir;"
- "cat $dir/cmdline;echo;" // cmdline does not end in newline
- "cat $dir/stat;"
- "readlink $dir/exe;"
- "printf '%1''%2';"
- "done").arg(Delimiter0).arg(Delimiter1);
-}
-
-QString GenericLinuxProcessList::killProcessCommandLine(const DeviceProcess &process) const
-{
- return QLatin1String("kill -9 ") + QString::number(process.pid);
-}
-
-QList<DeviceProcess> GenericLinuxProcessList::buildProcessList(const QString &listProcessesReply) const
-{
- QList<DeviceProcess> processes;
- const QStringList lines = listProcessesReply.split(QString::fromLatin1(Delimiter0)
- + QString::fromLatin1(Delimiter1), QString::SkipEmptyParts);
- foreach (const QString &line, lines) {
- const QStringList elements = line.split(QLatin1Char('\n'));
- if (elements.count() < 4) {
- qDebug("%s: Expected four list elements, got %d. Line was '%s'.", Q_FUNC_INFO,
- elements.count(), qPrintable(visualizeNull(line)));
- continue;
- }
- bool ok;
- const int pid = elements.first().mid(6).toInt(&ok);
- if (!ok) {
- qDebug("%s: Expected number in %s. Line was '%s'.", Q_FUNC_INFO,
- qPrintable(elements.first()), qPrintable(visualizeNull(line)));
- continue;
- }
- QString command = elements.at(1);
- command.replace(QLatin1Char('\0'), QLatin1Char(' '));
- if (command.isEmpty()) {
- const QString &statString = elements.at(2);
- const int openParenPos = statString.indexOf(QLatin1Char('('));
- const int closedParenPos = statString.indexOf(QLatin1Char(')'), openParenPos);
- if (openParenPos == -1 || closedParenPos == -1)
- continue;
- command = QLatin1Char('[')
- + statString.mid(openParenPos + 1, closedParenPos - openParenPos - 1)
- + QLatin1Char(']');
- }
-
- DeviceProcess process;
- process.pid = pid;
- process.cmdLine = command;
- process.exe = elements.at(3);
- processes.append(process);
- }
-
- qSort(processes);
- return processes;
-}
-
bool DeviceProcess::operator <(const DeviceProcess &other) const
{
if (pid != other.pid)