diff options
author | hjk <qthjk@ovi.com> | 2012-07-26 17:41:52 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@nokia.com> | 2012-07-27 14:18:21 +0200 |
commit | 5c94f8114f691b1b7d635f47f6c1599618ea6897 (patch) | |
tree | 5ccd23aa3d7b97c899b5df46b30e2695768b9a2b /src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp | |
parent | 4c1dd686cbb3d1f825f34ca1388a6512c803fa5e (diff) | |
download | qt-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.cpp | 91 |
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) |