Implementation of remote file API for correct FilePath
work with RemoteLinux.
Added tests for this functionality
Run ssh shell in separate thread.
The linux device instance keeps its own thread for running
SshRemoteProcess. In this way all calls to filepath
interface of linux device coming from different threads
are executed in one thread (SshRemoteProcess is reentrant,
but not thread safe). The redirection to the device thread
is done by invoking SshRemoteProcess' methods through
BlockingQueuedConnection.
Done-by: Artem Sokolovskii
Change-Id: Id8756738d3a4597f175c8ef000c148d0c8536eeb
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
The argument must be registered as a meta type for queued connections.
This also depends on a consistent naming of the type in the signal
arguments (which best is fully qualified).
Fixes: QTCREATORBUG-26760
Task-number: QTCREATORBUG-24098
Change-Id: I83991326f051d592a1665ae8cdb472d8376e74bc
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Since "toggle" now becomes ambiguous, change "Toggle Breakpoint"
to "Set or Remove Breakpoint" and add a new "Enable or Disable
Breakpoint"
Fixes: QTCREATORBUG-26788
Change-Id: I7902308298570360af202fced90bf44fc1a59adb
Reviewed-by: David Schulz <david.schulz@qt.io>
since 'configure' file does not exist before 'autoreconf' is
executed first time, it is possible that initially 'configure'
does not exist. Therefore command need to be recalculated again
when step is about to be executed
Change-Id: I7eeeaefd6d41adb2bcb247e35a3de5862899c8db
Reviewed-by: hjk <hjk@qt.io>
We need to handle more than a host file system.
Change-Id: Ia5940f35437f9953df007616bb998698740db9ad
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: David Schulz <david.schulz@qt.io>
qmake may construct QMAKE_CC and QMAKE_CXX by using paths from
environment variables that have native delimiters. That is the case with
Android (see mkspecs/android-clang/qmake.conf).
That leads to QMAKE_CC and QMAKE_CXX having mixed-style path separators,
and that is the reason to treat them as user input.
Change-Id: I1baf180c16710f4cd00ac182fa241b84ae99fa38
Reviewed-by: David Schulz <david.schulz@qt.io>
Do not include lines into the block selection that are shorter than the
block selection start column.
Task-number: QTCREATORBUG-26548
Change-Id: I6e4e26e1c498fb02dd0ebc8b78b8907c23f356b8
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Some duplications of a string may perhaps be fine, but eight occurrences
need a constant. Also, understanding code works better by using the code
model instead of full-text search.
Change-Id: I2944cf9216c825b930dedaae1085491fd10feba5
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This plugin contains the Qt Design Studio specific wizards.
Beforehand the plugin was part of another private repository.
With this patch, those wizards become open source.
The wizards require a specificly configured Qt kit that
comes with Qt Design Studio.
This is checked by
"featuresRequired": [ "QtStudio" ] in the wizards.
Task-number: QDS-5703
Change-Id: Ic9adcc7ff0cbb3ec6a7dfe51b506b4f86c6f50bc
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Create an id for nodes if keyframe is added.
Added missing ::executeInTransaction().
Using executeInTransaction() catches exceptions.
Task-number: QDS-5769
Change-Id: I395d98eec6ead091bd8578019ec3f958b4099db8
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Knud Dollereder <knud.dollereder@qt.io>
It may apparently happen that when calling QProcess::start()
we may receive a synchronous signal QProcess::errorOccurred()
from the process we are trying to start. In this case
the handler of the error signal might have removed the
process from m_processes hash, which invalidated the
"Process *& process" reference inside
LauncherSocketHandler::handleStartPacket(). So, using
process reference after calling start() may be dangerous.
Refactor ProcessStartHandler so that it stores the pointer
to the process it handles. The pointer to the handler
should still be valid after calling start(), since
the process itself is being deleted with a delay.
Make ProcessStartHandler a member of ProcessHelper. In this
way it's being reused in QProcessImpl and ProcessLauncher.
Fixes: QTCREATORBUG-26726
Change-Id: I8e3f39953035d76c83bbbb13bd78e3042ba2a14e
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Insipred by a similar fix in McuSupport, it became now clear to me how
to get the target name (aka buildkey) for a runconfiguration.
The hack of searching for .html files can be removed.
At the same time, remove the very detailed update connections, and just
update on Target::buildSystemUpdated.
Amends: dd1882b817
Task-number: QTCREATORBUG-26562
Change-Id: Ic07b36a1e618d6cc2b6f2ee50b4170170f707632
Reviewed-by: hjk <hjk@qt.io>
This reduces the time spent on making a new connection
from about 100 ms to 0.
Change-Id: I56508d1d0031b166a8f28604dde0b80375c438f0
Reviewed-by: hjk <hjk@qt.io>
The LocalAddressFinder was installed as a start dependency
for MemcheckToolRunner. However, it wasn't registered as
stop dependency for it. This means that when
MemcheckToolRunner was finished, its RunControl couldn't
finish as one of its RunWorkers wasn't finished yet.
Install LocalAddressFinder as a stop dependency and
implement a stop() method which disconnects the conneciton.
This also prevents the ApplicationOutput pane to open
a new tab on successive run of Memcheck for the same
application.
Fixes: QTCREATORBUG-26758
Change-Id: Ib71ddbe787e5c1bcc7b96687ebf15c9b63b714dc
Reviewed-by: hjk <hjk@qt.io>
When a new component is drag and dropped only check current or super class
instead of going trough all prototype classes. This will limit the
possible bindings to a more reasonable level.
Add navigator highlight for components that has properties where the
new component can be bound to.
Task-number: QDS-4969
Change-Id: Ib7091154a4c3c62ce995ad1b3f55830b8bca858b
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This will make recursion easier and has the potential to avoid creating
big intermediate lists.
Change-Id: I44d42925dae9c0048338c7d0a6aa26606f314c28
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
We need to search application directories as well since the new
QML Module API will generate modules there.
Task-number: QTCREATORBUG-24987
Change-Id: Ie67233ffece692c62921db13c49ae8cc2184422f
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@qt.io>
The host name in the remote channel url needs to match the Android
device serial number case-sensitively. Otherwise, the lldb connection
fails.
When constructing a remote channel url via QUrl, the host name gets
forced to be lowercase. The url for serialnumber "MYPHONE12346" would
become "adb://myphone12346:<port>" and the lldb connection fails.
Use the DebuggerRunTool::setRemoteChannel(const QString &host, int port)
overload for lldb to avoid the issue.
Task-number: QTCREATORBUG-26709
Change-Id: I0e61d981c4b80a9d251ba1f7626fc2be9625a831
Reviewed-by: hjk <hjk@qt.io>
When we are starting master process for ssh (-M option specified)
we don't know whether everything went fine, since the process
just starts and doesn't print anything to the output in case
all went fine. It may also happen that when there are issues
the master process finishes soon after it was started.
When everything went fine the master process should create
a socket (specified by ControlPath option). But when we
receive a started() signal from the process, the socket
isn't yet ready. So, in order to detect that connection was
established properly, the old implementation created a
FileSystemWatcher on the expected socket file to appear.
There are 2 issues with the approach above:
1. There might be a race condition inside the started()
handler of the master process. After checking that
the expected socket isn't created yet and before setting
up the file system watcher, the socket file could have
been created in meantime what wouldn't be noticed.
2. The use of Utils::FileSystemWatcher excludes the usage
in non-main threads. Thus in general: usage of SshConnection
outside of main thread is dangerous.
This patch implements it in a different way. Instead of
installing a file system watcher we make use of local command
of ssh master process. We enable it by "PermitLocalCommand=yes"
and specify a local command by "LocalCommand=echo". This means
that local command will be executed after successfully connecting
to the server. Our command is very simple - just empty echo,
which means that we should expect the "\n" on master process
output after successful run. So, instead of connecting to
started() signal we are connected to readyReadStandardOutput()
and detect successful connection after receiving newline char.
This eliminates both issues with the old approach and makes a
step towards thread safe shared ssh connections.
Change-Id: I2e20c82aeff09b297e3cad5644d4d2c956db82d0
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
... in text marks.
The main message can be followed by additional messages, separated by
pairs of newlines. Properly parse their contents and also display them
as clickable links, if applicable.
Change-Id: I341ce0a6bf0e628dfabdb3806fb8ef1b8ca019c6
Reviewed-by: David Schulz <david.schulz@qt.io>
With Sqlite 3.37 strict tables are introduced:
https://www.sqlite.org/stricttables.html
The introduce strict column types. So you can not add a text to an
integer column anymore. Additionally they introduce the "any" column
which is a dynamic type.
Change-Id: I43c0410821aa154e7de83e24bd221a232f98e910
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
With C++ 17 it is possible to deduce the template argument from the
contructor parameter(CTAD). We then do not call anymore a virtual
function but a normal function.
Change-Id: I61c3ce22322c66b256afab278e768014401b08cc
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>