Merge "Merge remote-tracking branch 'origin/11.0'"

This commit is contained in:
The Qt Project
2023-07-31 10:00:24 +00:00
32 changed files with 375 additions and 219 deletions

View File

@@ -7,7 +7,7 @@ on:
- 'doc/**' - 'doc/**'
env: env:
QT_VERSION: 6.5.1 QT_VERSION: 6.5.2
MACOS_DEPLOYMENT_TARGET: 10.15 MACOS_DEPLOYMENT_TARGET: 10.15
CLANG_VERSION: 16.0.2 CLANG_VERSION: 16.0.2
ELFUTILS_VERSION: 0.175 ELFUTILS_VERSION: 0.175

View File

@@ -10,7 +10,7 @@ instructions:
variableValue: https://ci-files02-hki.ci.qt.io/packages/jenkins/qtcreator_libclang/libclang-release_16.0.2-based variableValue: https://ci-files02-hki.ci.qt.io/packages/jenkins/qtcreator_libclang/libclang-release_16.0.2-based
- type: EnvironmentVariable - type: EnvironmentVariable
variableName: QTC_QT_BASE_URL variableName: QTC_QT_BASE_URL
variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/archive/qt/6.5/6.5.1-released/Qt" variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/archive/qt/6.5/6.5.2-released/Qt"
- type: EnvironmentVariable - type: EnvironmentVariable
variableName: QTC_QT_MODULES variableName: QTC_QT_MODULES
variableValue: "qt5compat qtbase qtdeclarative qtimageformats qtquick3d qtquickcontrols2 qtquicktimeline qtserialport qtshadertools qtsvg qttools qttranslations qtwebengine" variableValue: "qt5compat qtbase qtdeclarative qtimageformats qtquick3d qtquickcontrols2 qtquicktimeline qtserialport qtshadertools qtsvg qttools qttranslations qtwebengine"

View File

@@ -163,8 +163,8 @@ def qdump__std____1__stack(d, value):
d.putBetterType(value.type) d.putBetterType(value.type)
def GetChildMemberWithName(value: DumperBase.Value, name: str) -> DumperBase.Value: def GetChildMemberWithName(value, name):
members: list[DumperBase.Value] = value.members(True) members = value.members(True)
for member in members: for member in members:
if member.name == name: if member.name == name:
@@ -172,8 +172,8 @@ def GetChildMemberWithName(value: DumperBase.Value, name: str) -> DumperBase.Val
return None return None
def GetIndexOfChildWithName(value: DumperBase.Value, name: str) -> int: def GetIndexOfChildWithName(value, name):
members: list[DumperBase.Value] = value.members(True) members = value.members(True)
for i, member in enumerate(members): for i, member in enumerate(members):
if member.name == name: if member.name == name:
@@ -229,8 +229,8 @@ def std_1_string_dumper_v2(d, value):
if not Short_Sp: if not Short_Sp:
raise Exception("Could not find __s") raise Exception("Could not find __s")
Is_Long: DumperBase.Value = GetChildMemberWithName(Short_Sp, "__is_long_") Is_Long = GetChildMemberWithName(Short_Sp, "__is_long_")
Size_Sp: DumperBase.Value = GetChildMemberWithName(Short_Sp, "__size_") Size_Sp = GetChildMemberWithName(Short_Sp, "__size_")
if not Size_Sp: if not Size_Sp:
raise Exception("Could not find __size_") raise Exception("Could not find __size_")

View File

@@ -31686,48 +31686,48 @@ Hinweis: Dies macht Sie anfällig für Man-in-the-middle-Angriffe.</translation>
<name>QtC::Haskell</name> <name>QtC::Haskell</name>
<message> <message>
<source>Release</source> <source>Release</source>
<translation type="unfinished">Release</translation> <translation>Release</translation>
</message> </message>
<message> <message>
<source>General</source> <source>General</source>
<translation type="unfinished">Allgemein</translation> <translation>Allgemein</translation>
</message> </message>
<message> <message>
<source>Build directory:</source> <source>Build directory:</source>
<translation type="unfinished">Build-Verzeichnis:</translation> <translation>Build-Verzeichnis:</translation>
</message> </message>
<message> <message>
<source>GHCi</source> <source>GHCi</source>
<translation type="unfinished"></translation> <translation>GHCi</translation>
</message> </message>
<message> <message>
<source>Run GHCi</source> <source>Run GHCi</source>
<translation type="unfinished"></translation> <translation>GHCi ausführen</translation>
</message> </message>
<message> <message>
<source>Haskell</source> <source>Haskell</source>
<comment>SnippetProvider</comment> <comment>SnippetProvider</comment>
<translation type="unfinished"></translation> <translation>Haskell</translation>
</message> </message>
<message> <message>
<source>Executable</source> <source>Executable</source>
<translation type="unfinished">Ausführbare Datei</translation> <translation>Ausführbare Datei</translation>
</message> </message>
<message> <message>
<source>Haskell</source> <source>Haskell</source>
<translation type="unfinished"></translation> <translation>Haskell</translation>
</message> </message>
<message> <message>
<source>Stack executable:</source> <source>Stack executable:</source>
<translation type="unfinished"></translation> <translation>Ausführbare Stack-Datei:</translation>
</message> </message>
<message> <message>
<source>Choose Stack Executable</source> <source>Choose Stack Executable</source>
<translation type="unfinished"></translation> <translation>Ausführbare Datei für Stack auswählen</translation>
</message> </message>
<message> <message>
<source>Stack Build</source> <source>Stack Build</source>
<translation type="unfinished"></translation> <translation>Erstellen mit Stack</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -46082,7 +46082,7 @@ Are you sure?</source>
</message> </message>
<message> <message>
<source>Checking that files can be created in %1...</source> <source>Checking that files can be created in %1...</source>
<translation type="unfinished"></translation> <translation>Überprüfe, ob Dateien in %1 erstellt werden können...</translation>
</message> </message>
<message> <message>
<source>Files can be created in /var/run.</source> <source>Files can be created in /var/run.</source>
@@ -46090,11 +46090,11 @@ Are you sure?</source>
</message> </message>
<message> <message>
<source>An error occurred while checking that files can be created in %1.</source> <source>An error occurred while checking that files can be created in %1.</source>
<translation type="unfinished"></translation> <translation>Beim Überprüfen, ob Dateien in %1 erstellt werden können, ist ein Fehler aufgetreten.</translation>
</message> </message>
<message> <message>
<source>Files cannot be created in %1.</source> <source>Files cannot be created in %1.</source>
<translation type="unfinished"></translation> <translation>In %1 können keine Dateien erstellt werden.</translation>
</message> </message>
<message> <message>
<source>Warning: &quot;slog2info&quot; is not found on the device, debug output not available.</source> <source>Warning: &quot;slog2info&quot; is not found on the device, debug output not available.</source>
@@ -46173,34 +46173,34 @@ Möchten Sie fortfahren?</translation>
</message> </message>
<message> <message>
<source>No files need to be uploaded.</source> <source>No files need to be uploaded.</source>
<translation type="unfinished">Es müssen keine Dateien hochgeladen werden.</translation> <translation>Es müssen keine Dateien hochgeladen werden.</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<source>%n file(s) need to be uploaded.</source> <source>%n file(s) need to be uploaded.</source>
<translation type="unfinished"> <translation>
<numerusform>Eine Datei muss hochgeladen werden.</numerusform> <numerusform>Eine Datei muss hochgeladen werden.</numerusform>
<numerusform>%n Dateien müssen hochgeladen werden.</numerusform> <numerusform>%n Dateien müssen hochgeladen werden.</numerusform>
</translation> </translation>
</message> </message>
<message> <message>
<source>Local file &quot;%1&quot; does not exist.</source> <source>Local file &quot;%1&quot; does not exist.</source>
<translation type="unfinished">Es gibt keine lokale Datei &quot;%1&quot;.</translation> <translation>Es gibt keine lokale Datei &quot;%1&quot;.</translation>
</message> </message>
<message> <message>
<source>Remote chmod failed for file &quot;%1&quot;: %2</source> <source>Remote chmod failed for file &quot;%1&quot;: %2</source>
<translation type="unfinished">&quot;chmod&quot; für die entfernte Datei &quot;%1&quot; ist fehlgeschlagen: %2</translation> <translation>&quot;chmod&quot; für die entfernte Datei &quot;%1&quot; ist fehlgeschlagen: %2</translation>
</message> </message>
<message> <message>
<source>No device configuration set.</source> <source>No device configuration set.</source>
<translation type="unfinished">Es ist keine Gerätekonfiguration eingestellt.</translation> <translation>Es ist keine Gerätekonfiguration gesetzt.</translation>
</message> </message>
<message> <message>
<source>No deployment action necessary. Skipping.</source> <source>No deployment action necessary. Skipping.</source>
<translation type="unfinished">Alle Dateien sind auf dem aktuellen Stand, es ist keine Installation erforderlich.</translation> <translation>Alle Dateien sind auf dem aktuellen Stand, es ist keine Installation erforderlich.</translation>
</message> </message>
<message> <message>
<source>All files successfully deployed.</source> <source>All files successfully deployed.</source>
<translation type="unfinished">Alle Dateien erfolgreich versandt.</translation> <translation>Deployment für alle Dateien erfolgreich.</translation>
</message> </message>
<message> <message>
<source>Deploy Qt to QNX Device</source> <source>Deploy Qt to QNX Device</source>
@@ -46208,7 +46208,7 @@ Möchten Sie fortfahren?</translation>
</message> </message>
<message> <message>
<source>Create Kit for %1</source> <source>Create Kit for %1</source>
<translation type="unfinished"></translation> <translation>Kit für %1 erstellen</translation>
</message> </message>
<message> <message>
<source>Configuration Information:</source> <source>Configuration Information:</source>
@@ -46232,11 +46232,11 @@ Möchten Sie fortfahren?</translation>
</message> </message>
<message> <message>
<source>Compiler:</source> <source>Compiler:</source>
<translation type="unfinished"></translation> <translation>Compiler:</translation>
</message> </message>
<message> <message>
<source>Architectures:</source> <source>Architectures:</source>
<translation type="unfinished"></translation> <translation>Architekturen:</translation>
</message> </message>
<message> <message>
<source>Remove</source> <source>Remove</source>
@@ -46252,11 +46252,11 @@ Möchten Sie fortfahren?</translation>
</message> </message>
<message> <message>
<source>Configuration already exists.</source> <source>Configuration already exists.</source>
<translation type="unfinished"></translation> <translation>Konfiguration existiert bereits.</translation>
</message> </message>
<message> <message>
<source>Configuration is not valid.</source> <source>Configuration is not valid.</source>
<translation type="unfinished"></translation> <translation>Konfiguration ist ungültig.</translation>
</message> </message>
<message> <message>
<source>Remove QNX Configuration</source> <source>Remove QNX Configuration</source>
@@ -46957,7 +46957,7 @@ wirklich löschen?</translation>
</message> </message>
<message> <message>
<source>Key deployment failed.</source> <source>Key deployment failed.</source>
<translation type="unfinished"></translation> <translation>Deployment des Schlüssels fehlgeschlagen.</translation>
</message> </message>
<message> <message>
<source>Deployment finished successfully.</source> <source>Deployment finished successfully.</source>
@@ -47003,7 +47003,7 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
</message> </message>
<message> <message>
<source>Uploading package to device...</source> <source>Uploading package to device...</source>
<translation type="unfinished"></translation> <translation>Lade Paket auf das Gerät hoch...</translation>
</message> </message>
<message> <message>
<source>Successfully uploaded package file.</source> <source>Successfully uploaded package file.</source>
@@ -47015,19 +47015,19 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
</message> </message>
<message> <message>
<source>Successfully installed package file.</source> <source>Successfully installed package file.</source>
<translation type="unfinished"></translation> <translation>Die Paketdatei wurde erfolgreich installiert.</translation>
</message> </message>
<message> <message>
<source>Failed to start &quot;stat&quot;: %1</source> <source>Failed to start &quot;stat&quot;: %1</source>
<translation type="unfinished"></translation> <translation>&quot;stat&quot; konnte nicht gestartet werden: %1</translation>
</message> </message>
<message> <message>
<source>&quot;stat&quot; crashed.</source> <source>&quot;stat&quot; crashed.</source>
<translation type="unfinished"></translation> <translation>&quot;stat&quot; ist abgestürzt.</translation>
</message> </message>
<message> <message>
<source>&quot;stat&quot; failed with exit code %1: %2</source> <source>&quot;stat&quot; failed with exit code %1: %2</source>
<translation type="unfinished"></translation> <translation>&quot;stat&quot; ist mit Rückgabewert %1 fehlgeschlagen: %2</translation>
</message> </message>
<message> <message>
<source>Failed to retrieve remote timestamp for file &quot;%1&quot;. Incremental deployment will not work. Error message was: %2</source> <source>Failed to retrieve remote timestamp for file &quot;%1&quot;. Incremental deployment will not work. Error message was: %2</source>
@@ -47066,7 +47066,7 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
</message> </message>
<message> <message>
<source>Ignore missing files</source> <source>Ignore missing files</source>
<translation type="unfinished"></translation> <translation>Fehlende Dateien ignorieren</translation>
</message> </message>
<message> <message>
<source>Upload files via SFTP</source> <source>Upload files via SFTP</source>
@@ -47074,19 +47074,19 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
</message> </message>
<message> <message>
<source>Sending echo to device...</source> <source>Sending echo to device...</source>
<translation type="unfinished"></translation> <translation>Sende Echo zum Gerät...</translation>
</message> </message>
<message> <message>
<source>echo failed: %1</source> <source>echo failed: %1</source>
<translation type="unfinished"></translation> <translation>Echo fehlgeschlagen: %1</translation>
</message> </message>
<message> <message>
<source>echo failed.</source> <source>echo failed.</source>
<translation type="unfinished"></translation> <translation>Echo fehlgeschlagen.</translation>
</message> </message>
<message> <message>
<source>Device replied to echo with expected contents.</source> <source>Device replied to echo with expected contents.</source>
<translation type="unfinished"></translation> <translation>Das Gerät hat mit dem erwarteten Inhalt auf das Echo geantwortet.</translation>
</message> </message>
<message> <message>
<source>Checking kernel version...</source> <source>Checking kernel version...</source>
@@ -47110,7 +47110,7 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
</message> </message>
<message> <message>
<source>Device replied to echo with unexpected contents: &quot;%1&quot;</source> <source>Device replied to echo with unexpected contents: &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation>Das Gerät hat auf das Echo mit unerwartetem Inhalt geantwortet: &quot;%1&quot;</translation>
</message> </message>
<message> <message>
<source>The following specified ports are currently in use: %1</source> <source>The following specified ports are currently in use: %1</source>
@@ -47119,56 +47119,62 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
<message> <message>
<source>Some tools will not work out of the box. <source>Some tools will not work out of the box.
</source> </source>
<translation type="unfinished"></translation> <translation>Einige Werkzeuge werden nicht ohne weitere Einstellungen funktionieren.
</translation>
</message> </message>
<message> <message>
<source>Checking whether &quot;%1&quot; works...</source> <source>Checking whether &quot;%1&quot; works...</source>
<translation type="unfinished"></translation> <translation>Überprüfe, ob &quot;%1&quot; funktioniert...</translation>
</message> </message>
<message> <message>
<source>Failed to start &quot;%1&quot;: %2 <source>Failed to start &quot;%1&quot;: %2
</source> </source>
<translation type="unfinished"></translation> <translation>&quot;%1&quot; konnte nicht gestartet werden: %2
</translation>
</message> </message>
<message> <message>
<source>&quot;%1&quot; crashed. <source>&quot;%1&quot; crashed.
</source> </source>
<translation type="unfinished"></translation> <translation>&quot;%1&quot; ist abgestürzt.
</translation>
</message> </message>
<message> <message>
<source>&quot;%1&quot; failed with exit code %2: %3 <source>&quot;%1&quot; failed with exit code %2: %3
</source> </source>
<translation type="unfinished"></translation> <translation>&quot;%1&quot; ist mit Rückgabewert %2 fehlgeschlagen: %3
</translation>
</message> </message>
<message> <message>
<source>&quot;%1&quot; is functional. <source>&quot;%1&quot; is functional.
</source> </source>
<translation type="unfinished"></translation> <translation>&quot;%1&quot; funktioniert.
</translation>
</message> </message>
<message> <message>
<source>&quot;%1&quot; will be used for deployment, because &quot;%2&quot; and &quot;%3&quot; are not available. <source>&quot;%1&quot; will be used for deployment, because &quot;%2&quot; and &quot;%3&quot; are not available.
</source> </source>
<translation type="unfinished"></translation> <translation>&quot;%1&quot; wird für das Deployment benutzt, da &quot;%2&quot; und &quot;%3&quot; nicht verfügbar sind.
</translation>
</message> </message>
<message> <message>
<source>Checking if required commands are available...</source> <source>Checking if required commands are available...</source>
<translation type="unfinished"></translation> <translation>Überprüfe Verfügbarkeit der benötigten Kommandos...</translation>
</message> </message>
<message> <message>
<source>%1...</source> <source>%1...</source>
<translation type="unfinished"></translation> <translation>%1...</translation>
</message> </message>
<message> <message>
<source>%1 found.</source> <source>%1 found.</source>
<translation type="unfinished">%1 gefunden.</translation> <translation>%1 gefunden.</translation>
</message> </message>
<message> <message>
<source>An error occurred while checking for %1.</source> <source>An error occurred while checking for %1.</source>
<translation type="unfinished">Bei der Prüfung von %1 trat ein Fehler auf.</translation> <translation>Bei der Überprüfung von %1 trat ein Fehler auf.</translation>
</message> </message>
<message> <message>
<source>%1 not found.</source> <source>%1 not found.</source>
<translation type="unfinished">%1 nicht gefunden.</translation> <translation>%1 nicht gefunden.</translation>
</message> </message>
<message> <message>
<source>Deployment to this device will not work out of the box. <source>Deployment to this device will not work out of the box.
@@ -47182,7 +47188,7 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
</message> </message>
<message> <message>
<source>Deploy to Remote Linux Host</source> <source>Deploy to Remote Linux Host</source>
<translation>Auf Linux-Mobilgerät ausführen</translation> <translation>Deployment auf entferntes Linuxgerät</translation>
</message> </message>
<message> <message>
<source>Installing package failed.</source> <source>Installing package failed.</source>
@@ -47290,7 +47296,7 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
</message> </message>
<message> <message>
<source>The device&apos;s SSH port number:</source> <source>The device&apos;s SSH port number:</source>
<translation type="unfinished"></translation> <translation>SSH-Port des Geräts:</translation>
</message> </message>
<message> <message>
<source>The username to log into the device:</source> <source>The username to log into the device:</source>
@@ -47326,11 +47332,12 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
</message> </message>
<message> <message>
<source>Source %1 and %2</source> <source>Source %1 and %2</source>
<translation type="unfinished"></translation> <translatorcomment>Source (verb) /etc/profile and $HOME/.profile</translatorcomment>
<translation>%1 und %2 einbeziehen</translation>
</message> </message>
<message> <message>
<source>Direct</source> <source>Direct</source>
<translation type="unfinished"></translation> <translation>Direkt</translation>
</message> </message>
<message> <message>
<source>&amp;Username:</source> <source>&amp;Username:</source>
@@ -47338,11 +47345,12 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
</message> </message>
<message> <message>
<source>QML runtime executable:</source> <source>QML runtime executable:</source>
<translation type="unfinished"></translation> <translation>Ausführbare Datei der QML-Runtime:</translation>
</message> </message>
<message> <message>
<source>Access via:</source> <source>Access via:</source>
<translation type="unfinished"></translation> <translatorcomment>drop down with devices</translatorcomment>
<translation>Zugriff über:</translation>
</message> </message>
<message> <message>
<source>Physical Device</source> <source>Physical Device</source>
@@ -47402,62 +47410,65 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
</message> </message>
<message> <message>
<source>Cannot establish SSH connection: ssh binary &quot;%1&quot; does not exist.</source> <source>Cannot establish SSH connection: ssh binary &quot;%1&quot; does not exist.</source>
<translation type="unfinished">SSH-Verbindung kann nicht aufgebaut werden: Eine ausführbare SSH-Datei &quot;%1&quot; existiert nicht.</translation> <translation>SSH-Verbindung kann nicht hergestellt werden: Eine ausführbare SSH-Datei &quot;%1&quot; existiert nicht.</translation>
</message> </message>
<message> <message>
<source>Cannot establish SSH connection: Failed to create temporary directory for control socket: %1</source> <source>Cannot establish SSH connection: Failed to create temporary directory for control socket: %1</source>
<translation type="unfinished">SSH-Verbindung kann nicht aufgebaut werden: Es konnte kein temporäres Verzeichnis für den Steuer-Socket angelegt werden: %1</translation> <translation>SSH-Verbindung kann nicht hergestellt werden: Es konnte kein temporäres Verzeichnis für den Steuer-Socket angelegt werden: %1</translation>
</message> </message>
<message> <message>
<source>Cannot establish SSH connection. <source>Cannot establish SSH connection.
Control process failed to start.</source> Control process failed to start.</source>
<translation type="unfinished"></translation> <translation>SSH-Verbindung kann nicht hergestellt werden.
Der Kontrollprozess konnte nicht gestartet werden.</translation>
</message> </message>
<message> <message>
<source>SSH connection failure.</source> <source>SSH connection failure.</source>
<translation type="unfinished">SSH-Verbindungsfehler.</translation> <translation>SSH-Verbindungsfehler.</translation>
</message> </message>
<message> <message>
<source>SSH connection failure:</source> <source>SSH connection failure:</source>
<translation type="unfinished"></translation> <translation>SSH-Verbindungsfehler:</translation>
</message> </message>
<message> <message>
<source>Remote Linux</source> <source>Remote Linux</source>
<translation type="unfinished"></translation> <translation>Entferntes Linuxgerät</translation>
</message> </message>
<message> <message>
<source>Failed: %1</source> <source>Failed: %1</source>
<translation type="unfinished"></translation> <translation>Fehlgeschlagen: %1</translation>
</message> </message>
<message> <message>
<source>Remote Linux Device</source> <source>Remote Linux Device</source>
<translation type="unfinished"></translation> <translation>Entferntes Linuxgerät</translation>
</message> </message>
<message> <message>
<source>&quot;%1&quot; failed to start: %2</source> <source>&quot;%1&quot; failed to start: %2</source>
<translation type="unfinished">&quot;%1&quot; konnte nicht gestartet werden: %2</translation> <translation>&quot;%1&quot; konnte nicht gestartet werden: %2</translation>
</message> </message>
<message> <message>
<source>&quot;%1&quot; crashed.</source> <source>&quot;%1&quot; crashed.</source>
<translation type="unfinished">&quot;%1&quot; ist abgestürzt.</translation> <translation>&quot;%1&quot; ist abgestürzt.</translation>
</message> </message>
<message> <message>
<source>&quot;sftp&quot; binary &quot;%1&quot; does not exist.</source> <source>&quot;sftp&quot; binary &quot;%1&quot; does not exist.</source>
<translation type="unfinished"></translation> <translation>Ausführbare &quot;sftp&quot;-Datei &quot;%1&quot; existiert nicht.</translation>
</message> </message>
<message> <message>
<source>Creating directory: %1 <source>Creating directory: %1
</source> </source>
<translation type="unfinished"></translation> <translation>Erstelle Verzeichnis: %1
</translation>
</message> </message>
<message> <message>
<source>Failed.</source> <source>Failed.</source>
<translation type="unfinished">Fehlgeschlagen.</translation> <translation>Fehlgeschlagen.</translation>
</message> </message>
<message> <message>
<source>Copying %1/%2: %3 -&gt; %4 <source>Copying %1/%2: %3 -&gt; %4
</source> </source>
<translation type="unfinished"></translation> <translation>Kopiere %1/%2: %3 -&gt; %4
</translation>
</message> </message>
<message> <message>
<source>Clean Environment</source> <source>Clean Environment</source>
@@ -47559,7 +47570,7 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
</message> </message>
<message> <message>
<source>Deploy via rsync: failed to create remote directories:</source> <source>Deploy via rsync: failed to create remote directories:</source>
<translation type="unfinished"></translation> <translation>Deployment über rsync: Erstellen von entfernten Verzeichnissen ist fehlgeschlagen:</translation>
</message> </message>
<message> <message>
<source>rsync failed to start: %1</source> <source>rsync failed to start: %1</source>
@@ -47583,7 +47594,7 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
</message> </message>
<message> <message>
<source>rsync is only supported for transfers between different devices.</source> <source>rsync is only supported for transfers between different devices.</source>
<translation type="unfinished"></translation> <translation>rsync wird nur für das Übertragen zwischen unterschiedlichen Geräten unterstützt.</translation>
</message> </message>
<message> <message>
<source>Deploy files via rsync</source> <source>Deploy files via rsync</source>
@@ -47591,7 +47602,7 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
</message> </message>
<message> <message>
<source>Command:</source> <source>Command:</source>
<translation type="unfinished"></translation> <translation>Kommando:</translation>
</message> </message>
<message> <message>
<source>Install root:</source> <source>Install root:</source>
@@ -47599,43 +47610,43 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
</message> </message>
<message> <message>
<source>Clean install root first:</source> <source>Clean install root first:</source>
<translation type="unfinished"></translation> <translation>Install-Root zuerst bereinigen:</translation>
</message> </message>
<message> <message>
<source>Full command line:</source> <source>Full command line:</source>
<translation type="unfinished"></translation> <translation>Vollständige Kommandozeile:</translation>
</message> </message>
<message> <message>
<source>Custom command line:</source> <source>Custom command line:</source>
<translation type="unfinished"></translation> <translation>Benutzerdefinierte Kommandozeile:</translation>
</message> </message>
<message> <message>
<source>Use custom command line instead:</source> <source>Use custom command line instead:</source>
<translation type="unfinished"></translation> <translation>Benutzerdefinierte Kommandozeile verwenden:</translation>
</message> </message>
<message> <message>
<source>Install into temporary host directory</source> <source>Install into temporary host directory</source>
<translation type="unfinished"></translation> <translation>In temporäres Host-Verzeichnis installieren</translation>
</message> </message>
<message> <message>
<source>You must provide an install root.</source> <source>You must provide an install root.</source>
<translation type="unfinished"></translation> <translation>Sie müssen ein Installationsverzeichnis angeben.</translation>
</message> </message>
<message> <message>
<source>The install root &quot;%1&quot; could not be cleaned.</source> <source>The install root &quot;%1&quot; could not be cleaned.</source>
<translation type="unfinished"></translation> <translation>Das Installationsverzeichnis &quot;%1&quot; konnte nicht bereinigt werden.</translation>
</message> </message>
<message> <message>
<source>The install root &quot;%1&quot; could not be created.</source> <source>The install root &quot;%1&quot; could not be created.</source>
<translation type="unfinished"></translation> <translation>Das Installationsverzeichnis &quot;%1&quot; konnte nicht erstellt werden.</translation>
</message> </message>
<message> <message>
<source>The &quot;make install&quot; step should probably not be last in the list of deploy steps. Consider moving it up.</source> <source>The &quot;make install&quot; step should probably not be last in the list of deploy steps. Consider moving it up.</source>
<translation type="unfinished"></translation> <translation>Der &quot;make install&quot;-Schritt sollte wahrscheinlich nicht der letzte Deployment-Schritt sein. Ziehen Sie in Betracht, ihn nach oben zu verschieben.</translation>
</message> </message>
<message> <message>
<source>You need to add an install statement to your CMakeLists.txt file for deployment to work.</source> <source>You need to add an install statement to your CMakeLists.txt file for deployment to work.</source>
<translation type="unfinished"></translation> <translation>Sie müssen zu Ihrer CMakeLists.txt-Datei eine &quot;install&quot;-Anweisung hinzufügen, damit das Deployment funktioniert.</translation>
</message> </message>
<message> <message>
<source>Executable on device:</source> <source>Executable on device:</source>
@@ -47651,59 +47662,59 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
</message> </message>
<message> <message>
<source>New Remote Linux Device Configuration Setup</source> <source>New Remote Linux Device Configuration Setup</source>
<translation type="unfinished"></translation> <translation>Einrichtung der Konfiguration für neues entferntes Linuxgerät</translation>
</message> </message>
<message> <message>
<source>SSH Key Configuration</source> <source>SSH Key Configuration</source>
<translation type="unfinished">SSH-Schlüsselkonfiguration</translation> <translation>SSH-Schlüsselkonfiguration</translation>
</message> </message>
<message> <message>
<source>&amp;RSA</source> <source>&amp;RSA</source>
<translation type="unfinished">&amp;RSA</translation> <translation>&amp;RSA</translation>
</message> </message>
<message> <message>
<source>ECDSA</source> <source>ECDSA</source>
<translation type="unfinished">ECDSA</translation> <translation>ECDSA</translation>
</message> </message>
<message> <message>
<source>&amp;Generate And Save Key Pair</source> <source>&amp;Generate And Save Key Pair</source>
<translation type="unfinished">&amp;Erzeuge und speichere Schlüsselpaar</translation> <translation>&amp;Erzeuge und speichere Schlüsselpaar</translation>
</message> </message>
<message> <message>
<source>Options</source> <source>Options</source>
<translation type="unfinished">Einstellungen</translation> <translation>Einstellungen</translation>
</message> </message>
<message> <message>
<source>Key algorithm:</source> <source>Key algorithm:</source>
<translation type="unfinished">Schlüsselalgorithmus:</translation> <translation>Schlüsselalgorithmus:</translation>
</message> </message>
<message> <message>
<source>Key &amp;size:</source> <source>Key &amp;size:</source>
<translation type="unfinished">Schlüssel&amp;länge:</translation> <translation>Schlüssel&amp;länge:</translation>
</message> </message>
<message> <message>
<source>Public key file:</source> <source>Public key file:</source>
<translation type="unfinished">Öffentliche Schlüsseldatei:</translation> <translation>Öffentliche Schlüsseldatei:</translation>
</message> </message>
<message> <message>
<source>The ssh-keygen tool was not found.</source> <source>The ssh-keygen tool was not found.</source>
<translation type="unfinished">Das Programm &quot;ssh-keygen&quot; wurde nicht gefunden.</translation> <translation>Das Programm &quot;ssh-keygen&quot; wurde nicht gefunden.</translation>
</message> </message>
<message> <message>
<source>Refusing to overwrite existing private key file &quot;%1&quot;.</source> <source>Refusing to overwrite existing private key file &quot;%1&quot;.</source>
<translation type="unfinished">Die private Schlüsseldatei &quot;%1&quot; wird nicht überschrieben.</translation> <translation>Die private Schlüsseldatei &quot;%1&quot; wird nicht überschrieben.</translation>
</message> </message>
<message> <message>
<source>The ssh-keygen tool at &quot;%1&quot; failed: %2</source> <source>The ssh-keygen tool at &quot;%1&quot; failed: %2</source>
<translation type="unfinished">Das Programm &quot;ssh-keygen&quot; in &quot;%1&quot; hat einen Fehler festgestellt: %2</translation> <translation>Das Programm &quot;ssh-keygen&quot; in &quot;%1&quot; hat einen Fehler festgestellt: %2</translation>
</message> </message>
<message> <message>
<source>Choose Private Key File Name</source> <source>Choose Private Key File Name</source>
<translation type="unfinished">Name der privaten Schlüsseldatei auswählen</translation> <translation>Private Schlüsseldatei auswählen</translation>
</message> </message>
<message> <message>
<source>Key Generation Failed</source> <source>Key Generation Failed</source>
<translation type="unfinished">Fehler bei Erzeugung der Schlüssel</translation> <translation>Schlüsselerzeugung ist fehlgeschlagen</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -48636,30 +48647,30 @@ Zeile: %4, Spalte: %5
</message> </message>
<message> <message>
<source>None</source> <source>None</source>
<translation type="unfinished">Keine</translation> <translation>Keine</translation>
</message> </message>
<message> <message>
<source>LF</source> <source>LF</source>
<translation type="unfinished">LF</translation> <translation>LF</translation>
</message> </message>
<message> <message>
<source>CR</source> <source>CR</source>
<translation type="unfinished">CR</translation> <translation>CR</translation>
</message> </message>
<message> <message>
<source>CRLF</source> <source>CRLF</source>
<translation type="unfinished">CRLF</translation> <translation>CRLF</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QtC::SilverSearcher</name> <name>QtC::SilverSearcher</name>
<message> <message>
<source>Search Options (optional)</source> <source>Search Options (optional)</source>
<translation type="unfinished">Sucheinstellungen (optional)</translation> <translation>Sucheinstellungen (optional)</translation>
</message> </message>
<message> <message>
<source>Silver Searcher is not available on the system.</source> <source>Silver Searcher is not available on the system.</source>
<translation type="unfinished">Silver Searcher ist auf dem System nicht verfügbar.</translation> <translation>Silver Searcher ist auf dem System nicht verfügbar.</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -55651,88 +55662,92 @@ should a repository require SSH-authentication (see documentation on SSH and the
<name>QtC::WebAssembly</name> <name>QtC::WebAssembly</name>
<message> <message>
<source>Web Browser</source> <source>Web Browser</source>
<translation type="unfinished"></translation> <translation>Webbrowser</translation>
</message> </message>
<message> <message>
<source>WebAssembly Runtime</source> <source>WebAssembly Runtime</source>
<translation type="unfinished"></translation> <translation>WebAssembly-Runtime</translation>
</message> </message>
<message> <message>
<source>Emscripten SDK path:</source> <source>Emscripten SDK path:</source>
<translation type="unfinished"></translation> <translation>Pfad zum Emscripten-SDK:</translation>
</message> </message>
<message> <message>
<source>Select the root directory of an installed %1. Ensure that the activated SDK version is compatible with the %2 or %3 version that you plan to develop against.</source> <source>Select the root directory of an installed %1. Ensure that the activated SDK version is compatible with the %2 or %3 version that you plan to develop against.</source>
<translation type="unfinished"></translation> <translatorcomment>%1=Emscripten SDK, %2=Qt 5, %3=Qt 6</translatorcomment>
<translation>Wählen Sie das Wurzelverzeichnis einer Installation von %1. Stellen Sie sicher, dass die eingestellte SDK-Version mit der von Ihnen für das Entwickeln geplanten %2- oder %3-Version kompatibel ist.</translation>
</message> </message>
<message> <message>
<source>Emscripten SDK environment:</source> <source>Emscripten SDK environment:</source>
<translation type="unfinished"></translation> <translation>Umgebung für Emscripten-SDK:</translation>
</message> </message>
<message> <message>
<source>Note: %1 supports Qt %2 for WebAssembly and higher. Your installed lower Qt version(s) are not supported.</source> <source>Note: %1 supports Qt %2 for WebAssembly and higher. Your installed lower Qt version(s) are not supported.</source>
<translation type="unfinished"></translation> <translatorcomment>%1=the QtC-Version, %2=minimumSupportedQtVersion</translatorcomment>
<translation>Hinweis: %1 unterstützt für WebAssembly nur Qt %2 und höher. Ihre älteren installierten Qt-Versionen werden nicht unterstützt.</translation>
</message> </message>
<message> <message>
<source>Adding directories to PATH:</source> <source>Adding directories to PATH:</source>
<translation type="unfinished"></translation> <translation>Füge Verzeichnisse zu PATH hinzu:</translation>
</message> </message>
<message> <message>
<source>Setting environment variables:</source> <source>Setting environment variables:</source>
<translation type="unfinished"></translation> <translation>Setze Umgebungsvariablen:</translation>
</message> </message>
<message> <message>
<source>The activated version %1 is not supported by %2. Activate version %3 or higher.</source> <source>The activated version %1 is not supported by %2. Activate version %3 or higher.</source>
<translation type="unfinished"></translation> <translatorcomment>%1=sdkVersion, %2=QtC-Version, %3=minVersion</translatorcomment>
<translation>Die aktivierte Version %1 wird von %2 nicht unterstützt. Benutzen Sie Version %3 oder höher.</translation>
</message> </message>
<message> <message>
<source>Activated version: %1</source> <source>Activated version: %1</source>
<translation type="unfinished"></translation> <translation>Aktivierte Version: %1</translation>
</message> </message>
<message> <message>
<source>WebAssembly</source> <source>WebAssembly</source>
<translation type="unfinished"></translation> <translation>WebAssembly</translation>
</message> </message>
<message> <message>
<source>Setup Emscripten SDK for WebAssembly? To do it later, select Edit &gt; Preferences &gt; Devices &gt; WebAssembly.</source> <source>Setup Emscripten SDK for WebAssembly? To do it later, select Edit &gt; Preferences &gt; Devices &gt; WebAssembly.</source>
<translation type="unfinished"></translation> <translation>Emscripten-SDK für WebAssembly einrichten? Dies geht auch später unter Bearbeiten &gt; Einstellungen &gt; Geräte &gt; WebAssembly.</translation>
</message> </message>
<message> <message>
<source>Setup Emscripten SDK</source> <source>Setup Emscripten SDK</source>
<translation type="unfinished"></translation> <translation>Emscripten-SDK einrichten</translation>
</message> </message>
<message> <message>
<source>WebAssembly</source> <source>WebAssembly</source>
<comment>Qt Version is meant for WebAssembly</comment> <comment>Qt Version is meant for WebAssembly</comment>
<translation type="unfinished"></translation> <translation>WebAssembly</translation>
</message> </message>
<message> <message>
<source>%1 does not support Qt for WebAssembly below version %2.</source> <source>%1 does not support Qt for WebAssembly below version %2.</source>
<translation type="unfinished"></translation> <translatorcomment>%1=QtC-Version</translatorcomment>
<translation>%1 unterstützt Qt für WebAssembly nicht unter Version %2.</translation>
</message> </message>
<message> <message>
<source>Effective emrun call:</source> <source>Effective emrun call:</source>
<translation type="unfinished"></translation> <translation>Resultierender emrun-Aufruf:</translation>
</message> </message>
<message> <message>
<source>Default Browser</source> <source>Default Browser</source>
<translation type="unfinished"></translation> <translation>Vorgabe-Browser</translation>
</message> </message>
<message> <message>
<source>Web browser:</source> <source>Web browser:</source>
<translation type="unfinished"></translation> <translation>Webbrowser:</translation>
</message> </message>
<message> <message>
<source>Emscripten Compiler</source> <source>Emscripten Compiler</source>
<translation type="unfinished"></translation> <translation>Emscripten-Compiler</translation>
</message> </message>
<message> <message>
<source>Emscripten Compiler %1 for %2</source> <source>Emscripten Compiler %1 for %2</source>
<translation type="unfinished"></translation> <translation>Emscripten-Compiler %1 für %2</translation>
</message> </message>
<message> <message>
<source>Emscripten</source> <source>Emscripten</source>
<translation type="unfinished"></translation> <translation>Emscripten</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -58293,35 +58308,35 @@ Are you sure you want to remove the material?</source>
<name>QtC::Vcpkg</name> <name>QtC::Vcpkg</name>
<message> <message>
<source>Search package...</source> <source>Search package...</source>
<translation type="unfinished"></translation> <translation>Paket suchen...</translation>
</message> </message>
<message> <message>
<source>Vcpkg Manifest Editor</source> <source>Vcpkg Manifest Editor</source>
<translation type="unfinished"></translation> <translation>Vcpkg Manifest-Editor</translation>
</message> </message>
<message> <message>
<source>Name</source> <source>Name</source>
<translation type="unfinished"></translation> <translation>Name:</translation>
</message> </message>
<message> <message>
<source>Version:</source> <source>Version:</source>
<translation type="unfinished">Version:</translation> <translation>Version:</translation>
</message> </message>
<message> <message>
<source>License:</source> <source>License:</source>
<translation type="unfinished">Lizenz:</translation> <translation>Lizenz:</translation>
</message> </message>
<message> <message>
<source>Description:</source> <source>Description:</source>
<translation type="unfinished">Beschreibung:</translation> <translation>Beschreibung:</translation>
</message> </message>
<message> <message>
<source>Homepage:</source> <source>Homepage:</source>
<translation type="unfinished"></translation> <translation>Homepage:</translation>
</message> </message>
<message> <message>
<source>Vcpkg installation</source> <source>Vcpkg installation</source>
<translation type="unfinished"></translation> <translation>Vcpkg-Installation</translation>
</message> </message>
</context> </context>
<context> <context>

View File

@@ -54,6 +54,10 @@ bool UnixPtyProcess::startProcess(const QString &shellPath,
int rc = 0; int rc = 0;
m_shellProcess.m_handleMaster = ::posix_openpt(O_RDWR | O_NOCTTY); m_shellProcess.m_handleMaster = ::posix_openpt(O_RDWR | O_NOCTTY);
int flags = fcntl(m_shellProcess.m_handleMaster, F_GETFL, 0);
fcntl(m_shellProcess.m_handleMaster, F_SETFL, flags | O_NONBLOCK);
if (m_shellProcess.m_handleMaster <= 0) { if (m_shellProcess.m_handleMaster <= 0) {
m_lastError = QString("UnixPty Error: unable to open master -> %1").arg(QLatin1String(strerror(errno))); m_lastError = QString("UnixPty Error: unable to open master -> %1").arg(QLatin1String(strerror(errno)));
kill(); kill();
@@ -308,10 +312,7 @@ QByteArray UnixPtyProcess::readAll()
qint64 UnixPtyProcess::write(const QByteArray &byteArray) qint64 UnixPtyProcess::write(const QByteArray &byteArray)
{ {
int result = ::write(m_shellProcess.m_handleMaster, byteArray.constData(), byteArray.size()); return ::write(m_shellProcess.m_handleMaster, byteArray.constData(), byteArray.size());
Q_UNUSED(result)
return byteArray.size();
} }
bool UnixPtyProcess::isAvailable() bool UnixPtyProcess::isAvailable()

View File

@@ -10,6 +10,7 @@
#include <vterm.h> #include <vterm.h>
#include <QLoggingCategory> #include <QLoggingCategory>
#include <QTimer>
namespace TerminalSolution { namespace TerminalSolution {
@@ -20,6 +21,8 @@ QColor toQColor(const VTermColor &c)
return QColor(qRgb(c.rgb.red, c.rgb.green, c.rgb.blue)); return QColor(qRgb(c.rgb.red, c.rgb.green, c.rgb.blue));
}; };
constexpr int batchFlushSize = 256;
struct TerminalSurfacePrivate struct TerminalSurfacePrivate
{ {
TerminalSurfacePrivate(TerminalSurface *surface, const QSize &initialGridSize) TerminalSurfacePrivate(TerminalSurface *surface, const QSize &initialGridSize)
@@ -29,13 +32,64 @@ struct TerminalSurfacePrivate
, q(surface) , q(surface)
{} {}
void flush()
{
if (m_writeBuffer.isEmpty())
return;
QByteArray data = m_writeBuffer.left(batchFlushSize);
qint64 result = m_writeToPty(data);
if (result != data.size()) {
// Not all data was written, remove the unwritten data from the array
data.resize(qMax(0, result));
}
// Remove the written data from the buffer
if (data.size() > 0)
m_writeBuffer = m_writeBuffer.mid(data.size());
if (!m_writeBuffer.isEmpty())
m_delayWriteTimer.start();
}
void init() void init()
{ {
m_delayWriteTimer.setInterval(1);
m_delayWriteTimer.setSingleShot(true);
QObject::connect(&m_delayWriteTimer, &QTimer::timeout, &m_delayWriteTimer, [this] {
flush();
});
vterm_set_utf8(m_vterm.get(), true); vterm_set_utf8(m_vterm.get(), true);
static auto writeToPty = [](const char *s, size_t len, void *user) { static auto writeToPty = [](const char *s, size_t len, void *user) {
auto p = static_cast<TerminalSurfacePrivate *>(user); auto p = static_cast<TerminalSurfacePrivate *>(user);
emit p->q->writeToPty(QByteArray(s, static_cast<int>(len))); QByteArray d(s, len);
// If its just a couple of chars, or we already have data in the writeBuffer,
// add the new data to the write buffer and start the delay timer
if (d.size() < batchFlushSize || !p->m_writeBuffer.isEmpty()) {
p->m_writeBuffer.append(d);
p->m_delayWriteTimer.start();
return;
}
// Try to write the data ...
qint64 result = p->m_writeToPty(d);
if (result != d.size()) {
// if writing failed, append the data to the writeBuffer and start the delay timer
// Check if partial data may have already been written ...
if (result <= 0)
p->m_writeBuffer.append(d);
else
p->m_writeBuffer.append(d.mid(result));
p->m_delayWriteTimer.start();
}
}; };
vterm_output_set_callback(m_vterm.get(), writeToPty, this); vterm_output_set_callback(m_vterm.get(), writeToPty, this);
@@ -319,6 +373,10 @@ struct TerminalSurfacePrivate
SurfaceIntegration *m_surfaceIntegration{nullptr}; SurfaceIntegration *m_surfaceIntegration{nullptr};
TerminalSurface *q; TerminalSurface *q;
QTimer m_delayWriteTimer;
QByteArray m_writeBuffer;
TerminalSurface::WriteToPty m_writeToPty;
}; };
TerminalSurface::TerminalSurface(QSize initialGridSize) TerminalSurface::TerminalSurface(QSize initialGridSize)
@@ -393,7 +451,7 @@ void TerminalSurface::clearAll()
vterm_input_write(d->m_vterm.get(), data.constData(), data.size()); vterm_input_write(d->m_vterm.get(), data.constData(), data.size());
// Send Ctrl+L which will clear the screen // Send Ctrl+L which will clear the screen
emit writeToPty(QByteArray("\f")); d->m_writeToPty(QByteArray("\f"));
} }
void TerminalSurface::resize(QSize newSize) void TerminalSurface::resize(QSize newSize)
@@ -539,6 +597,11 @@ void TerminalSurface::mouseButton(Qt::MouseButton button,
vterm_mouse_button(d->m_vterm.get(), btnIdx, pressed, qtModifierToVTerm(modifiers)); vterm_mouse_button(d->m_vterm.get(), btnIdx, pressed, qtModifierToVTerm(modifiers));
} }
void TerminalSurface::setWriteToPty(WriteToPty writeToPty)
{
d->m_writeToPty = writeToPty;
}
CellIterator TerminalSurface::begin() const CellIterator TerminalSurface::begin() const
{ {
auto res = CellIterator(this, {0, 0}); auto res = CellIterator(this, {0, 0});

View File

@@ -98,10 +98,12 @@ public:
SurfaceIntegration *surfaceIntegration() const; SurfaceIntegration *surfaceIntegration() const;
void setSurfaceIntegration(SurfaceIntegration *surfaceIntegration); void setSurfaceIntegration(SurfaceIntegration *surfaceIntegration);
using WriteToPty = std::function<qint64(const QByteArray &)>;
void setWriteToPty(WriteToPty writeToPty);
void mouseMove(QPoint pos, Qt::KeyboardModifiers modifiers); void mouseMove(QPoint pos, Qt::KeyboardModifiers modifiers);
void mouseButton(Qt::MouseButton button, bool pressed, Qt::KeyboardModifiers modifiers); void mouseButton(Qt::MouseButton button, bool pressed, Qt::KeyboardModifiers modifiers);
signals: signals:
void writeToPty(const QByteArray &data);
void invalidated(QRect grid); void invalidated(QRect grid);
void fullSizeChanged(QSize newSize); void fullSizeChanged(QSize newSize);
void cursorChanged(Cursor oldCursor, Cursor newCursor); void cursorChanged(Cursor oldCursor, Cursor newCursor);

View File

@@ -170,7 +170,7 @@ void TerminalView::setupSurface()
if (d->m_surfaceIntegration) if (d->m_surfaceIntegration)
d->m_surface->setSurfaceIntegration(d->m_surfaceIntegration); d->m_surface->setSurfaceIntegration(d->m_surfaceIntegration);
connect(d->m_surface.get(), &TerminalSurface::writeToPty, this, &TerminalView::writeToPty); d->m_surface->setWriteToPty([this](const QByteArray &data) { return writeToPty(data); });
connect(d->m_surface.get(), &TerminalSurface::fullSizeChanged, this, [this] { connect(d->m_surface.get(), &TerminalSurface::fullSizeChanged, this, [this] {
updateScrollBars(); updateScrollBars();

View File

@@ -105,7 +105,11 @@ public:
} }
}; };
virtual void writeToPty(const QByteArray &data) { Q_UNUSED(data); } virtual qint64 writeToPty(const QByteArray &data)
{
Q_UNUSED(data);
return 0;
}
void writeToTerminal(const QByteArray &data, bool forceFlush); void writeToTerminal(const QByteArray &data, bool forceFlush);
void restart(); void restart();

View File

@@ -1564,9 +1564,11 @@ qint64 Process::writeRaw(const QByteArray &input)
QTC_ASSERT(state() == QProcess::Running, return -1); QTC_ASSERT(state() == QProcess::Running, return -1);
QTC_ASSERT(QThread::currentThread() == thread(), return -1); QTC_ASSERT(QThread::currentThread() == thread(), return -1);
qint64 result = -1; qint64 result = -1;
QMetaObject::invokeMethod(d->m_process.get(), [this, input] { QMetaObject::invokeMethod(
d->m_process->write(input); d->m_process.get(),
}, d->connectionType(), &result); [this, input] { return d->m_process->write(input); },
d->connectionType(),
&result);
return result; return result;
} }

View File

@@ -48,6 +48,36 @@ CommandsFile::CommandsFile(const FilePath &filename)
} }
// XML attributes cannot contain these characters, and
// QXmlStreamWriter just bails out with an error.
// QKeySequence::toString() should probably not result in these
// characters, but it currently does, see QTCREATORBUG-29431
static bool containsInvalidCharacters(const QString &s)
{
const auto end = s.constEnd();
for (auto it = s.constBegin(); it != end; ++it) {
// from QXmlStreamWriterPrivate::writeEscaped
if (*it == u'\v' || *it == u'\f' || *it <= u'\x1F' || *it >= u'\uFFFE') {
return true;
}
}
return false;
}
static QString toAttribute(const QString &s)
{
if (containsInvalidCharacters(s))
return "0x" + QString::fromUtf8(s.toUtf8().toHex());
return s;
}
static QString fromAttribute(const QStringView &s)
{
if (s.startsWith(QLatin1String("0x")))
return QString::fromUtf8(QByteArray::fromHex(s.sliced(2).toUtf8()));
return s.toString();
}
/*! /*!
\internal \internal
*/ */
@@ -76,7 +106,7 @@ QMap<QString, QList<QKeySequence>> CommandsFile::importCommands() const
QTC_ASSERT(!currentId.isEmpty(), continue); QTC_ASSERT(!currentId.isEmpty(), continue);
const QXmlStreamAttributes attributes = r.attributes(); const QXmlStreamAttributes attributes = r.attributes();
if (attributes.hasAttribute(ctx.valueAttribute)) { if (attributes.hasAttribute(ctx.valueAttribute)) {
const QString keyString = attributes.value(ctx.valueAttribute).toString(); const QString keyString = fromAttribute(attributes.value(ctx.valueAttribute));
QList<QKeySequence> keys = result.value(currentId); QList<QKeySequence> keys = result.value(currentId);
result.insert(currentId, keys << QKeySequence(keyString)); result.insert(currentId, keys << QKeySequence(keyString));
} }
@@ -93,7 +123,6 @@ QMap<QString, QList<QKeySequence>> CommandsFile::importCommands() const
/*! /*!
\internal \internal
*/ */
bool CommandsFile::exportCommands(const QList<ShortcutItem *> &items) bool CommandsFile::exportCommands(const QList<ShortcutItem *> &items)
{ {
FileSaver saver(m_filePath, QIODevice::Text); FileSaver saver(m_filePath, QIODevice::Text);
@@ -118,7 +147,7 @@ bool CommandsFile::exportCommands(const QList<ShortcutItem *> &items)
w.writeAttribute(ctx.idAttribute, id.toString()); w.writeAttribute(ctx.idAttribute, id.toString());
for (const QKeySequence &k : item->m_keys) { for (const QKeySequence &k : item->m_keys) {
w.writeEmptyElement(ctx.keyElement); w.writeEmptyElement(ctx.keyElement);
w.writeAttribute(ctx.valueAttribute, k.toString()); w.writeAttribute(ctx.valueAttribute, toAttribute(k.toString()));
} }
w.writeEndElement(); // Shortcut w.writeEndElement(); // Shortcut
} }
@@ -126,7 +155,8 @@ bool CommandsFile::exportCommands(const QList<ShortcutItem *> &items)
w.writeEndElement(); w.writeEndElement();
w.writeEndDocument(); w.writeEndDocument();
saver.setResult(&w); if (!saver.setResult(&w))
qWarning() << saver.errorString();
} }
return saver.finalize(); return saver.finalize();
} }

View File

@@ -426,6 +426,7 @@ public:
QList<ParameterAction *> m_projectActions; QList<ParameterAction *> m_projectActions;
QList<QAction *> m_repositoryActions; QList<QAction *> m_repositoryActions;
ParameterAction *m_applyCurrentFilePatchAction = nullptr; ParameterAction *m_applyCurrentFilePatchAction = nullptr;
Gerrit::Internal::GerritPlugin m_gerritPlugin; Gerrit::Internal::GerritPlugin m_gerritPlugin;
QPointer<StashDialog> m_stashDialog; QPointer<StashDialog> m_stashDialog;

View File

@@ -10,6 +10,7 @@
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <debugger/debuggeritem.h> #include <debugger/debuggeritem.h>
#include <debugger/debuggeritemmanager.h> #include <debugger/debuggeritemmanager.h>
#include <projectexplorer/devicesupport/devicemanager.h>
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/toolchain.h> #include <projectexplorer/toolchain.h>
#include <projectexplorer/toolchainmanager.h> #include <projectexplorer/toolchainmanager.h>
@@ -447,7 +448,8 @@ static ToolChain *iarToolChain(const FilePath &path, Id language)
== BareMetal::Constants::IAREW_TOOLCHAIN_TYPEID; == BareMetal::Constants::IAREW_TOOLCHAIN_TYPEID;
}); });
if (iarFactory) { if (iarFactory) {
Toolchains detected = iarFactory->autoDetect(ToolchainDetector({}, {}, {})); Toolchains detected = iarFactory->autoDetect(
{{}, DeviceManager::defaultDesktopDevice(), {}});
if (detected.isEmpty()) if (detected.isEmpty())
detected = iarFactory->detectForImport({path, language}); detected = iarFactory->detectForImport({path, language});
for (auto tc : detected) { for (auto tc : detected) {

View File

@@ -3,10 +3,11 @@
#include "toolchainoptionspage.h" #include "toolchainoptionspage.h"
#include "toolchain.h"
#include "abi.h" #include "abi.h"
#include "devicesupport/devicemanager.h"
#include "projectexplorerconstants.h" #include "projectexplorerconstants.h"
#include "projectexplorertr.h" #include "projectexplorertr.h"
#include "toolchain.h"
#include "toolchainconfigwidget.h" #include "toolchainconfigwidget.h"
#include "toolchainmanager.h" #include "toolchainmanager.h"
@@ -407,7 +408,7 @@ void ToolChainOptionsWidget::redetectToolchains()
QSet<ToolChain *> toDelete; QSet<ToolChain *> toDelete;
ToolChainManager::resetBadToolchains(); ToolChainManager::resetBadToolchains();
for (ToolChainFactory *f : ToolChainFactory::allToolChainFactories()) { for (ToolChainFactory *f : ToolChainFactory::allToolChainFactories()) {
const ToolchainDetector detector(knownTcs, {}, {}); // FIXME: Pass device and search paths const ToolchainDetector detector(knownTcs, DeviceManager::defaultDesktopDevice(), {}); // FIXME: Pass search paths
for (ToolChain * const tc : f->autoDetect(detector)) { for (ToolChain * const tc : f->autoDetect(detector)) {
if (knownTcs.contains(tc) || toDelete.contains(tc)) if (knownTcs.contains(tc) || toDelete.contains(tc))
continue; continue;

View File

@@ -1675,8 +1675,8 @@ void DesignerActionManager::createDefaultDesignerActions()
setFlowStartDisplayName, setFlowStartDisplayName,
{}, {},
flowCategory, flowCategory,
2,
{}, {},
2,
&setFlowStartItem, &setFlowStartItem,
&isFlowItem, &isFlowItem,
&flowOptionVisible)); &flowOptionVisible));

View File

@@ -260,10 +260,12 @@ void TerminalWidget::closeTerminal()
deleteLater(); deleteLater();
} }
void TerminalWidget::writeToPty(const QByteArray &data) qint64 TerminalWidget::writeToPty(const QByteArray &data)
{ {
if (m_process && m_process->isRunning()) if (m_process && m_process->isRunning())
m_process->writeRaw(data); return m_process->writeRaw(data);
return data.size();
} }
void TerminalWidget::resizePty(QSize newSize) void TerminalWidget::resizePty(QSize newSize)

View File

@@ -71,7 +71,7 @@ protected:
void linkActivated(const Link &link) override; void linkActivated(const Link &link) override;
void contextMenuRequested(const QPoint &pos) override; void contextMenuRequested(const QPoint &pos) override;
void writeToPty(const QByteArray &data) override; qint64 writeToPty(const QByteArray &data) override;
void resizePty(QSize newSize) override; void resizePty(QSize newSize) override;
void setClipboard(const QString &text) override; void setClipboard(const QString &text) override;
std::optional<TerminalView::Link> toLink(const QString &text) override; std::optional<TerminalView::Link> toLink(const QString &text) override;

View File

@@ -0,0 +1,33 @@
From e5aec585120ca65b92e642b50b1552f75df26b93 Mon Sep 17 00:00:00 2001
From: Christian Stenger <christian.stenger@qt.io>
Date: Thu, 27 Jul 2023 08:49:30 +0200
Subject: [PATCH] Fix build on macOS
---
src/CMakeLists.txt | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7be6aad..0cad721 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -18,7 +18,6 @@ if(APPLE)
set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${speedcrunch_VERSION})
set(MACOSX_BUNDLE_VERSION ${speedcrunch_VERSION})
set(MACOSX_BUNDLE_LONG_VERSION_STRING Version ${speedcrunch_VERSION})
- set(CMAKE_OSX_ARCHITECTURES ppc;i386)
else(APPLE)
set(PROGNAME speedcrunch)
endif(APPLE)
@@ -71,7 +70,7 @@ if(APPLE)
set( speedcrunch_RESOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/${PROGNAME}.app/Contents/Resources )
add_custom_command(TARGET ${PROGNAME} POST_BUILD
COMMAND mkdir ARGS -p ${speedcrunch_RESOURCE_DIR}
- COMMAND cp ARGS -f resources/${MACOSX_BUNDLE_ICON_FILE} ${speedcrunch_RESOURCE_DIR})
+ COMMAND cp ARGS -f ${CMAKE_CURRENT_SOURCE_DIR}/resources/${MACOSX_BUNDLE_ICON_FILE} ${speedcrunch_RESOURCE_DIR})
endif(APPLE)
add_custom_target(confclean COMMAND rm -rf Makefile CMakeFiles/ CMakeCache.txt cmake_install.cmake DartTestfile.txt install_manifest.txt)
--
2.32.0 (Apple Git-132)

View File

@@ -238,7 +238,7 @@ def __logDebugResult__():
def verifyBreakPoint(bpToVerify): def verifyBreakPoint(bpToVerify):
if isinstance(bpToVerify, dict): if isinstance(bpToVerify, dict):
fileName = list(bpToVerify.keys())[0] fileName = next(iter(bpToVerify.keys()))
editor = getEditorForFileSuffix(fileName) editor = getEditorForFileSuffix(fileName)
if editor: if editor:
test.compare(waitForObject(":DebugModeWidget_QComboBox").toolTip, fileName, test.compare(waitForObject(":DebugModeWidget_QComboBox").toolTip, fileName,
@@ -247,7 +247,7 @@ def verifyBreakPoint(bpToVerify):
windowTitle = str(waitForObject(":Qt Creator_Core::Internal::MainWindow").windowTitle) windowTitle = str(waitForObject(":Qt Creator_Core::Internal::MainWindow").windowTitle)
test.verify(windowTitle.startswith(os.path.basename(fileName) + " "), test.verify(windowTitle.startswith(os.path.basename(fileName) + " "),
"Verify that Creator's window title changed according to current file") "Verify that Creator's window title changed according to current file")
return test.compare(line, list(bpToVerify.values())[0], return test.compare(line, next(iter(bpToVerify.values())),
"Compare hit breakpoint to expected line number in %s" % fileName) "Compare hit breakpoint to expected line number in %s" % fileName)
else: else:
test.fatal("Expected a dict for bpToVerify - got '%s'" % className(bpToVerify)) test.fatal("Expected a dict for bpToVerify - got '%s'" % className(bpToVerify))

View File

@@ -248,11 +248,16 @@ def createProject_Qt_GUI(path, projectName, checks=True, addToVersionControl="<N
# param path specifies where to create the project # param path specifies where to create the project
# param projectName is the name for the new project # param projectName is the name for the new project
# param checks turns tests in the function on if set to True # param checks turns tests in the function on if set to True
def createProject_Qt_Console(path, projectName, checks = True, buildSystem = None): def createProject_Qt_Console(path, projectName, checks = True, buildSystem = None, targets=[]):
available = __createProjectOrFileSelectType__(" Application (Qt)", "Qt Console Application") available = __createProjectOrFileSelectType__(" Application (Qt)", "Qt Console Application")
__createProjectSetNameAndPath__(path, projectName, checks) __createProjectSetNameAndPath__(path, projectName, checks)
buildSystem = __handleBuildSystem__(buildSystem) buildSystem = __handleBuildSystem__(buildSystem)
__createProjectHandleTranslationSelection__() __createProjectHandleTranslationSelection__()
if targets:
available = set(targets).intersection(available)
if len(available) < len(targets):
test.warning("Could not use all desired targets.",
"%s vs %s" % (str(available), str(targets)))
__selectQtVersionDesktop__(buildSystem, checks, available) __selectQtVersionDesktop__(buildSystem, checks, available)
expectedFiles = [] expectedFiles = []

View File

@@ -206,7 +206,8 @@ def substituteCdb(settingsDir):
try: try:
serverIni = readFile(os.path.join(os.getenv("APPDATA"), "froglogic", serverIni = readFile(os.path.join(os.getenv("APPDATA"), "froglogic",
"Squish", "ver1", "server.ini")) "Squish", "ver1", "server.ini"))
autLine = list(filter(lambda line: "AUT/qtcreator" in line, serverIni.splitlines()))[0] autLine = next(iter(filter(lambda line: "AUT/qtcreator" in line,
serverIni.splitlines())))
autPath = autLine.split("\"")[1] autPath = autLine.split("\"")[1]
return os.path.exists(os.path.join(autPath, "..", "lib", "qtcreatorcdbext64")) return os.path.exists(os.path.join(autPath, "..", "lib", "qtcreatorcdbext64"))
except: except:

View File

@@ -41,8 +41,9 @@ def main():
listView = waitForObject(":popupFrame_Proposal_QListView") listView = waitForObject(":popupFrame_Proposal_QListView")
shownProposals = dumpItems(listView.model()) shownProposals = dumpItems(listView.model())
usedProposal = "class derived from QObject" usedProposal = "class derived from QObject"
expectedProposals = ["class", "class ", "class template", expectedProposals = ["class ", "class template",
usedProposal, "class derived from QWidget"] usedProposal, "class derived from QWidget"]
expectedProposals += [" class"] if useClang else ["class"]
test.xcompare(len(shownProposals), len(expectedProposals), # QTCREATORBUG-23159 test.xcompare(len(shownProposals), len(expectedProposals), # QTCREATORBUG-23159
"Number of proposed templates") "Number of proposed templates")
test.verify(set(expectedProposals).issubset(set(shownProposals)), test.verify(set(expectedProposals).issubset(set(shownProposals)),

View File

@@ -44,7 +44,7 @@ def checkQtCreatorHelpVersion(expectedVersion):
helpContentWidget = waitForObject(':Qt Creator_QHelpContentWidget', 5000) helpContentWidget = waitForObject(':Qt Creator_QHelpContentWidget', 5000)
waitFor("any(map(rightStart, dumpItems(helpContentWidget.model())))", 10000) waitFor("any(map(rightStart, dumpItems(helpContentWidget.model())))", 10000)
items = dumpItems(helpContentWidget.model()) items = dumpItems(helpContentWidget.model())
test.compare(list(filter(rightStart, items))[0], test.compare(next(iter(filter(rightStart, items))),
'Qt Creator Manual %s' % expectedVersion, 'Qt Creator Manual %s' % expectedVersion,
'Verifying whether manual uses expected version.') 'Verifying whether manual uses expected version.')
except: except:

View File

@@ -12,7 +12,11 @@ def main():
startQC() startQC()
if not startedWithoutPluginError(): if not startedWithoutPluginError():
return return
createProject_Qt_Console(tempDir(), project) targets = []
if platform.system() in ('Microsoft', 'Windows'):
# Qt5.10 has constructs that do not work on Win because of limitation to older C++
targets = [Targets.DESKTOP_5_14_1_DEFAULT, Targets.DESKTOP_6_2_4]
createProject_Qt_Console(tempDir(), project, targets=targets)
mainEditor = waitForObject(":Qt Creator_CppEditor::Internal::CPPEditorWidget") mainEditor = waitForObject(":Qt Creator_CppEditor::Internal::CPPEditorWidget")
replaceEditorContent(mainEditor, "") replaceEditorContent(mainEditor, "")

View File

@@ -9,7 +9,7 @@ def cmakeSupported():
versionLines = filter(lambda line: "cmake version " in line, versionLines = filter(lambda line: "cmake version " in line,
getOutputFromCmdline(["cmake", "--version"]).splitlines()) getOutputFromCmdline(["cmake", "--version"]).splitlines())
try: try:
versionLine = list(versionLines)[0] versionLine = next(iter(versionLines))
test.log("Using " + versionLine) test.log("Using " + versionLine)
matcher = re.match("cmake version (\d+)\.(\d+)\.\d+", versionLine) matcher = re.match("cmake version (\d+)\.(\d+)\.\d+", versionLine)
major = __builtin__.int(matcher.group(1)) major = __builtin__.int(matcher.group(1))
@@ -32,6 +32,16 @@ def main():
if not SpeedCrunchPath: if not SpeedCrunchPath:
test.fatal("Could not clone SpeedCrunch") test.fatal("Could not clone SpeedCrunch")
return return
# patch CMakeLists.txt outside of QC
try:
patchFile = os.path.join(os.path.dirname(__file__),
"..", "..", "0001-Fix-build-on-macOS.patch")
subprocess.check_call(["git", "am", patchFile], cwd=SpeedCrunchPath)
test.log("Patched speedcrunch.")
except:
t, v = sys.exc_info()[:2]
test.warning("Patching speedcrunch failed.", "%s(%s)" % (str(t), str(v)))
startQC() startQC()
if not startedWithoutPluginError(): if not startedWithoutPluginError():
return return

View File

@@ -1,6 +1,5 @@
"text" "nestinglevel" "text" "nestinglevel"
"CMakeLists.txt" "0" "CMakeLists.txt" "0"
"speedcrunch" "0"
"Header Files" "1" "Header Files" "1"
"genericdock.h" "2" "genericdock.h" "2"
"Source Files" "1" "Source Files" "1"
1 text nestinglevel
2 CMakeLists.txt 0
speedcrunch 0
3 Header Files 1
4 genericdock.h 2
5 Source Files 1

View File

@@ -49,8 +49,8 @@ def main():
availableProjectTypes.append({category:template}) availableProjectTypes.append({category:template})
safeClickButton("Cancel") safeClickButton("Cancel")
for current in availableProjectTypes: for current in availableProjectTypes:
category = list(current.keys())[0] category = next(iter(current.keys()))
template = list(current.values())[0] template = next(iter(current.values()))
with TestSection("Testing project template %s -> %s" % (category, template)): with TestSection("Testing project template %s -> %s" % (category, template)):
displayedPlatforms = __createProject__(category, template) displayedPlatforms = __createProject__(category, template)
if template.startswith("Qt Quick Application"): if template.startswith("Qt Quick Application"):

View File

@@ -311,15 +311,15 @@ def __compareCompilers__(foundCompilers, expectedCompilers):
for currentExp in expectedCompilers: for currentExp in expectedCompilers:
if isString(currentExp): if isString(currentExp):
continue continue
key = list(currentExp.keys())[0] key = next(iter(currentExp.keys()))
# the regex .*? is used for the different possible version strings of the WinSDK # the regex .*? is used for the different possible version strings of the WinSDK
# if it's present a regex will be validated otherwise simple string comparison # if it's present a regex will be validated otherwise simple string comparison
# same applies for [.0-9]+ which is used for minor/patch versions # same applies for [.0-9]+ which is used for minor/patch versions
isRegex = ".*?" in key or "[.0-9]+" in key isRegex = ".*?" in key or "[.0-9]+" in key
if (((isRegex and re.match(key, list(currentFound.keys())[0], flags))) if (((isRegex and re.match(key, next(iter(currentFound.keys())), flags)))
or currentFound.keys() == currentExp.keys()): or currentFound.keys() == currentExp.keys()):
if ((isWin and os.path.abspath(list(currentFound.values())[0].lower()) if ((isWin and os.path.abspath(next(iter(currentFound.values())).lower())
== os.path.abspath(list(currentExp.values())[0].lower())) == os.path.abspath(next(iter(currentExp.values())).lower()))
or currentFound.values() == currentExp.values()): or currentFound.values() == currentExp.values()):
foundExp = True foundExp = True
break break
@@ -359,24 +359,22 @@ def __lowerStrs__(iterable):
def __checkCreatedSettings__(settingsFolder): def __checkCreatedSettings__(settingsFolder):
waitForCleanShutdown() waitForCleanShutdown()
qtProj = os.path.join(settingsFolder, "QtProject") qtProj = os.path.join(settingsFolder, "QtProject")
folders = [] creatorFolder = os.path.join(qtProj, "qtcreator")
files = [{os.path.join(qtProj, "QtCreator.db"):0}, folders = [creatorFolder,
{os.path.join(qtProj, "QtCreator.ini"):30}] os.path.join(creatorFolder, "generic-highlighter"),
folders.append(os.path.join(qtProj, "qtcreator")) os.path.join(creatorFolder, "macros")]
files.extend([{os.path.join(folders[0], "debuggers.xml"):0}, files = {os.path.join(qtProj, "QtCreator.db"):0,
{os.path.join(folders[0], "devices.xml"):0}, os.path.join(qtProj, "QtCreator.ini"):30,
{os.path.join(folders[0], "helpcollection.qhc"):0}, os.path.join(creatorFolder, "debuggers.xml"):0,
{os.path.join(folders[0], "profiles.xml"):0}, os.path.join(creatorFolder, "devices.xml"):0,
{os.path.join(folders[0], "qtversion.xml"):0}, os.path.join(creatorFolder, "helpcollection.qhc"):0,
{os.path.join(folders[0], "toolchains.xml"):0}]) os.path.join(creatorFolder, "profiles.xml"):0,
folders.extend([os.path.join(folders[0], "generic-highlighter"), os.path.join(creatorFolder, "qtversion.xml"):0,
os.path.join(folders[0], "macros")]) os.path.join(creatorFolder, "toolchains.xml"):0}
for f in folders: for f in folders:
test.verify(os.path.isdir(f), test.verify(os.path.isdir(f),
"Verifying whether folder '%s' has been created." % os.path.basename(f)) "Verifying whether folder '%s' has been created." % os.path.basename(f))
for f in files: for fName, fMinSize in files.items():
fName = list(f.keys())[0]
fMinSize = list(f.values())[0]
text = "created non-empty" text = "created non-empty"
if fMinSize > 0: if fMinSize > 0:
text = "modified" text = "modified"

View File

@@ -8,7 +8,7 @@ def main():
if not neededFilePresent(pathCreator): if not neededFilePresent(pathCreator):
return return
startQC() startQC(["-noload", "ClangCodeModel"])
if not startedWithoutPluginError(): if not startedWithoutPluginError():
return return
openQbsProject(pathCreator) openQbsProject(pathCreator)
@@ -24,7 +24,7 @@ def main():
else: else:
test.warning("Parsing project timed out") test.warning("Parsing project timed out")
compareProjectTree(rootNodeTemplate % "Qt Creator", "projecttree_creator.tsv") compareProjectTree(rootNodeTemplate % "Qt Creator", "projecttree_creator.tsv")
buildIssuesTexts = map(lambda i: str(i[0]), getBuildIssues()) buildIssuesTexts = map(lambda i: str(i[0]), getBuildIssues(False))
deprecationWarnings = "\n".join(set(filter(lambda s: "deprecated" in s, buildIssuesTexts))) deprecationWarnings = "\n".join(set(filter(lambda s: "deprecated" in s, buildIssuesTexts)))
if deprecationWarnings: if deprecationWarnings:
test.warning("Creator claims that the .qbs file uses deprecated features.", test.warning("Creator claims that the .qbs file uses deprecated features.",

View File

@@ -13,7 +13,7 @@ def main():
if not pathSpeedcrunch: if not pathSpeedcrunch:
test.fatal("Could not clone SpeedCrunch") test.fatal("Could not clone SpeedCrunch")
return return
startQC() startQC(["-noload", "ClangCodeModel"])
if not startedWithoutPluginError(): if not startedWithoutPluginError():
return return

View File

@@ -4166,7 +4166,6 @@
"Headers" "5" "Headers" "5"
"touchbar.h" "6" "touchbar.h" "6"
"Sources" "5" "Sources" "5"
"touchbar.cpp" "6"
"Headers" "4" "Headers" "4"
"optional" "6" "optional" "6"
"optional.hpp" "7" "optional.hpp" "7"
@@ -16895,21 +16894,6 @@
"qtc-askpass-main.cpp" "4" "qtc-askpass-main.cpp" "4"
"Other files" "3" "Other files" "3"
"qtc-askpass.qbs" "4" "qtc-askpass.qbs" "4"
"qtcreatortool" "3"
"qtcreatortool.pri" "4"
"qtcreator" "4"
"qtcreator.pri" "5"
"qtcreator_ide_branding" "5"
"qtcreator_ide_branding.pri" "6"
"qtcreator_testvars" "5"
"qtcreator_testvars.pri" "6"
"Other files" "5"
"CMakeLists.txt" "7"
"rpath" "4"
"rpath.pri" "5"
"Sources" "3"
"main.cpp" "4"
"Other files" "3"
"qtpromaker" "2" "qtpromaker" "2"
"qtpromaker.pro" "3" "qtpromaker.pro" "3"
"qtcreatortool" "3" "qtcreatortool" "3"
@@ -20837,7 +20821,6 @@
"Headers" "5" "Headers" "5"
"touchbar.h" "6" "touchbar.h" "6"
"Sources" "5" "Sources" "5"
"touchbar.cpp" "6"
"Headers" "4" "Headers" "4"
"optional" "6" "optional" "6"
"optional.hpp" "7" "optional.hpp" "7"
@@ -21758,7 +21741,6 @@
"Headers" "6" "Headers" "6"
"touchbar.h" "7" "touchbar.h" "7"
"Sources" "6" "Sources" "6"
"touchbar.cpp" "7"
"Headers" "5" "Headers" "5"
"optional" "7" "optional" "7"
"optional.hpp" "8" "optional.hpp" "8"
Can't render this file because it is too large.

View File

@@ -86,12 +86,12 @@ def __clickCommit__(count):
show = str(description.plainText) show = str(description.plainText)
id = "Nobody <nobody@nowhere\.com>" id = "Nobody <nobody@nowhere\.com>"
time = "\w{3} \w{3} \d{1,2} \d{2}:\d{2}:\d{2} \d{4}.* seconds ago\)" time = "\w{3} \w{3} \d{1,2} \d{2}:\d{2}:\d{2} \d{4}.* seconds ago\)"
expected = [{"commit %s" % commit:False}, expected = [["commit %s" % commit, False],
{"Author: %s, %s" % (id, time): True}, ["Author: %s, %s" % (id, time), True],
{"Committer: %s, %s" % (id, time): True}] ["Committer: %s, %s" % (id, time), True]]
for line, exp in zip(show.splitlines(), expected): for line, exp in zip(show.splitlines(), expected):
expLine = list(exp.keys())[0] expLine = exp[0]
isRegex = list(exp.values())[0] isRegex = exp[1]
if isRegex: if isRegex:
test.verify(re.match(expLine, line), "Verifying commit header line '%s'" % line) test.verify(re.match(expLine, line), "Verifying commit header line '%s'" % line)
else: else: