forked from qt-creator/qt-creator
Merge "Merge remote-tracking branch 'origin/11.0'"
This commit is contained in:
2
.github/workflows/build_cmake.yml
vendored
2
.github/workflows/build_cmake.yml
vendored
@@ -7,7 +7,7 @@ on:
|
||||
- 'doc/**'
|
||||
|
||||
env:
|
||||
QT_VERSION: 6.5.1
|
||||
QT_VERSION: 6.5.2
|
||||
MACOS_DEPLOYMENT_TARGET: 10.15
|
||||
CLANG_VERSION: 16.0.2
|
||||
ELFUTILS_VERSION: 0.175
|
||||
|
||||
@@ -10,7 +10,7 @@ instructions:
|
||||
variableValue: https://ci-files02-hki.ci.qt.io/packages/jenkins/qtcreator_libclang/libclang-release_16.0.2-based
|
||||
- type: EnvironmentVariable
|
||||
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
|
||||
variableName: QTC_QT_MODULES
|
||||
variableValue: "qt5compat qtbase qtdeclarative qtimageformats qtquick3d qtquickcontrols2 qtquicktimeline qtserialport qtshadertools qtsvg qttools qttranslations qtwebengine"
|
||||
|
||||
@@ -163,8 +163,8 @@ def qdump__std____1__stack(d, value):
|
||||
d.putBetterType(value.type)
|
||||
|
||||
|
||||
def GetChildMemberWithName(value: DumperBase.Value, name: str) -> DumperBase.Value:
|
||||
members: list[DumperBase.Value] = value.members(True)
|
||||
def GetChildMemberWithName(value, name):
|
||||
members = value.members(True)
|
||||
|
||||
for member in members:
|
||||
if member.name == name:
|
||||
@@ -172,8 +172,8 @@ def GetChildMemberWithName(value: DumperBase.Value, name: str) -> DumperBase.Val
|
||||
return None
|
||||
|
||||
|
||||
def GetIndexOfChildWithName(value: DumperBase.Value, name: str) -> int:
|
||||
members: list[DumperBase.Value] = value.members(True)
|
||||
def GetIndexOfChildWithName(value, name):
|
||||
members = value.members(True)
|
||||
|
||||
for i, member in enumerate(members):
|
||||
if member.name == name:
|
||||
@@ -229,8 +229,8 @@ def std_1_string_dumper_v2(d, value):
|
||||
if not Short_Sp:
|
||||
raise Exception("Could not find __s")
|
||||
|
||||
Is_Long: DumperBase.Value = GetChildMemberWithName(Short_Sp, "__is_long_")
|
||||
Size_Sp: DumperBase.Value = GetChildMemberWithName(Short_Sp, "__size_")
|
||||
Is_Long = GetChildMemberWithName(Short_Sp, "__is_long_")
|
||||
Size_Sp = GetChildMemberWithName(Short_Sp, "__size_")
|
||||
if not Size_Sp:
|
||||
raise Exception("Could not find __size_")
|
||||
|
||||
|
||||
@@ -31686,48 +31686,48 @@ Hinweis: Dies macht Sie anfällig für Man-in-the-middle-Angriffe.</translation>
|
||||
<name>QtC::Haskell</name>
|
||||
<message>
|
||||
<source>Release</source>
|
||||
<translation type="unfinished">Release</translation>
|
||||
<translation>Release</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>General</source>
|
||||
<translation type="unfinished">Allgemein</translation>
|
||||
<translation>Allgemein</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Build directory:</source>
|
||||
<translation type="unfinished">Build-Verzeichnis:</translation>
|
||||
<translation>Build-Verzeichnis:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GHCi</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>GHCi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Run GHCi</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>GHCi ausführen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Haskell</source>
|
||||
<comment>SnippetProvider</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Haskell</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Executable</source>
|
||||
<translation type="unfinished">Ausführbare Datei</translation>
|
||||
<translation>Ausführbare Datei</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Haskell</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Haskell</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Stack executable:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Ausführbare Stack-Datei:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Choose Stack Executable</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Ausführbare Datei für Stack auswählen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Stack Build</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Erstellen mit Stack</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -46082,7 +46082,7 @@ Are you sure?</source>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>Files can be created in /var/run.</source>
|
||||
@@ -46090,11 +46090,11 @@ Are you sure?</source>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>Files cannot be created in %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>In %1 können keine Dateien erstellt werden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Warning: "slog2info" is not found on the device, debug output not available.</source>
|
||||
@@ -46173,34 +46173,34 @@ Möchten Sie fortfahren?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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 numerus="yes">
|
||||
<source>%n file(s) need to be uploaded.</source>
|
||||
<translation type="unfinished">
|
||||
<translation>
|
||||
<numerusform>Eine Datei muss hochgeladen werden.</numerusform>
|
||||
<numerusform>%n Dateien müssen hochgeladen werden.</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Local file "%1" does not exist.</source>
|
||||
<translation type="unfinished">Es gibt keine lokale Datei "%1".</translation>
|
||||
<translation>Es gibt keine lokale Datei "%1".</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remote chmod failed for file "%1": %2</source>
|
||||
<translation type="unfinished">"chmod" für die entfernte Datei "%1" ist fehlgeschlagen: %2</translation>
|
||||
<translation>"chmod" für die entfernte Datei "%1" ist fehlgeschlagen: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<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>
|
||||
<source>All files successfully deployed.</source>
|
||||
<translation type="unfinished">Alle Dateien erfolgreich versandt.</translation>
|
||||
<translation>Deployment für alle Dateien erfolgreich.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Deploy Qt to QNX Device</source>
|
||||
@@ -46208,7 +46208,7 @@ Möchten Sie fortfahren?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Create Kit for %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Kit für %1 erstellen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Configuration Information:</source>
|
||||
@@ -46232,11 +46232,11 @@ Möchten Sie fortfahren?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Compiler:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Compiler:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Architectures:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Architekturen:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remove</source>
|
||||
@@ -46252,11 +46252,11 @@ Möchten Sie fortfahren?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Configuration already exists.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Konfiguration existiert bereits.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Configuration is not valid.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Konfiguration ist ungültig.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remove QNX Configuration</source>
|
||||
@@ -46957,7 +46957,7 @@ wirklich löschen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key deployment failed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Deployment des Schlüssels fehlgeschlagen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Deployment finished successfully.</source>
|
||||
@@ -47003,7 +47003,7 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Uploading package to device...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Lade Paket auf das Gerät hoch...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Successfully uploaded package file.</source>
|
||||
@@ -47015,19 +47015,19 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Successfully installed package file.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Die Paketdatei wurde erfolgreich installiert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to start "stat": %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>"stat" konnte nicht gestartet werden: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"stat" crashed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>"stat" ist abgestürzt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"stat" failed with exit code %1: %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>"stat" ist mit Rückgabewert %1 fehlgeschlagen: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to retrieve remote timestamp for file "%1". 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>
|
||||
<source>Ignore missing files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Fehlende Dateien ignorieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Upload files via SFTP</source>
|
||||
@@ -47074,19 +47074,19 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sending echo to device...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Sende Echo zum Gerät...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>echo failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Echo fehlgeschlagen: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>echo failed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Echo fehlgeschlagen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>Checking kernel version...</source>
|
||||
@@ -47110,7 +47110,7 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Device replied to echo with unexpected contents: "%1"</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Das Gerät hat auf das Echo mit unerwartetem Inhalt geantwortet: "%1"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>Some tools will not work out of the box.
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Einige Werkzeuge werden nicht ohne weitere Einstellungen funktionieren.
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Checking whether "%1" works...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Überprüfe, ob "%1" funktioniert...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to start "%1": %2
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>"%1" konnte nicht gestartet werden: %2
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" crashed.
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>"%1" ist abgestürzt.
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" failed with exit code %2: %3
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>"%1" ist mit Rückgabewert %2 fehlgeschlagen: %3
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is functional.
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>"%1" funktioniert.
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" will be used for deployment, because "%2" and "%3" are not available.
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>"%1" wird für das Deployment benutzt, da "%2" und "%3" nicht verfügbar sind.
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Checking if required commands are available...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Überprüfe Verfügbarkeit der benötigten Kommandos...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>%1...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 found.</source>
|
||||
<translation type="unfinished">%1 gefunden.</translation>
|
||||
<translation>%1 gefunden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>%1 not found.</source>
|
||||
<translation type="unfinished">%1 nicht gefunden.</translation>
|
||||
<translation>%1 nicht gefunden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>Deploy to Remote Linux Host</source>
|
||||
<translation>Auf Linux-Mobilgerät ausführen</translation>
|
||||
<translation>Deployment auf entferntes Linuxgerät</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Installing package failed.</source>
|
||||
@@ -47290,7 +47296,7 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The device's SSH port number:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>SSH-Port des Geräts:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<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>
|
||||
<source>Direct</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Direkt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Username:</source>
|
||||
@@ -47338,11 +47345,12 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>QML runtime executable:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Ausführbare Datei der QML-Runtime:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Access via:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translatorcomment>drop down with devices</translatorcomment>
|
||||
<translation>Zugriff über:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Physical Device</source>
|
||||
@@ -47402,62 +47410,65 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot establish SSH connection: ssh binary "%1" does not exist.</source>
|
||||
<translation type="unfinished">SSH-Verbindung kann nicht aufgebaut werden: Eine ausführbare SSH-Datei "%1" existiert nicht.</translation>
|
||||
<translation>SSH-Verbindung kann nicht hergestellt werden: Eine ausführbare SSH-Datei "%1" existiert nicht.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>Cannot establish SSH connection.
|
||||
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>
|
||||
<source>SSH connection failure.</source>
|
||||
<translation type="unfinished">SSH-Verbindungsfehler.</translation>
|
||||
<translation>SSH-Verbindungsfehler.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SSH connection failure:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>SSH-Verbindungsfehler:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remote Linux</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Entferntes Linuxgerät</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Fehlgeschlagen: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remote Linux Device</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Entferntes Linuxgerät</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" failed to start: %2</source>
|
||||
<translation type="unfinished">"%1" konnte nicht gestartet werden: %2</translation>
|
||||
<translation>"%1" konnte nicht gestartet werden: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" crashed.</source>
|
||||
<translation type="unfinished">"%1" ist abgestürzt.</translation>
|
||||
<translation>"%1" ist abgestürzt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"sftp" binary "%1" does not exist.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Ausführbare "sftp"-Datei "%1" existiert nicht.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Creating directory: %1
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Erstelle Verzeichnis: %1
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed.</source>
|
||||
<translation type="unfinished">Fehlgeschlagen.</translation>
|
||||
<translation>Fehlgeschlagen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copying %1/%2: %3 -> %4
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Kopiere %1/%2: %3 -> %4
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<source>Command:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Kommando:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>Clean install root first:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Install-Root zuerst bereinigen:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Full command line:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Vollständige Kommandozeile:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom command line:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Benutzerdefinierte Kommandozeile:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use custom command line instead:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Benutzerdefinierte Kommandozeile verwenden:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Install into temporary host directory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>In temporäres Host-Verzeichnis installieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You must provide an install root.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Sie müssen ein Installationsverzeichnis angeben.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The install root "%1" could not be cleaned.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Das Installationsverzeichnis "%1" konnte nicht bereinigt werden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The install root "%1" could not be created.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Das Installationsverzeichnis "%1" konnte nicht erstellt werden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The "make install" step should probably not be last in the list of deploy steps. Consider moving it up.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Der "make install"-Schritt sollte wahrscheinlich nicht der letzte Deployment-Schritt sein. Ziehen Sie in Betracht, ihn nach oben zu verschieben.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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 "install"-Anweisung hinzufügen, damit das Deployment funktioniert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<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>
|
||||
<source>SSH Key Configuration</source>
|
||||
<translation type="unfinished">SSH-Schlüsselkonfiguration</translation>
|
||||
<translation>SSH-Schlüsselkonfiguration</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&RSA</source>
|
||||
<translation type="unfinished">&RSA</translation>
|
||||
<translation>&RSA</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ECDSA</source>
|
||||
<translation type="unfinished">ECDSA</translation>
|
||||
<translation>ECDSA</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Generate And Save Key Pair</source>
|
||||
<translation type="unfinished">&Erzeuge und speichere Schlüsselpaar</translation>
|
||||
<translation>&Erzeuge und speichere Schlüsselpaar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Options</source>
|
||||
<translation type="unfinished">Einstellungen</translation>
|
||||
<translation>Einstellungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key algorithm:</source>
|
||||
<translation type="unfinished">Schlüsselalgorithmus:</translation>
|
||||
<translation>Schlüsselalgorithmus:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key &size:</source>
|
||||
<translation type="unfinished">Schlüssel&länge:</translation>
|
||||
<translation>Schlüssel&länge:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Public key file:</source>
|
||||
<translation type="unfinished">Öffentliche Schlüsseldatei:</translation>
|
||||
<translation>Öffentliche Schlüsseldatei:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The ssh-keygen tool was not found.</source>
|
||||
<translation type="unfinished">Das Programm "ssh-keygen" wurde nicht gefunden.</translation>
|
||||
<translation>Das Programm "ssh-keygen" wurde nicht gefunden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Refusing to overwrite existing private key file "%1".</source>
|
||||
<translation type="unfinished">Die private Schlüsseldatei "%1" wird nicht überschrieben.</translation>
|
||||
<translation>Die private Schlüsseldatei "%1" wird nicht überschrieben.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The ssh-keygen tool at "%1" failed: %2</source>
|
||||
<translation type="unfinished">Das Programm "ssh-keygen" in "%1" hat einen Fehler festgestellt: %2</translation>
|
||||
<translation>Das Programm "ssh-keygen" in "%1" hat einen Fehler festgestellt: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>Key Generation Failed</source>
|
||||
<translation type="unfinished">Fehler bei Erzeugung der Schlüssel</translation>
|
||||
<translation>Schlüsselerzeugung ist fehlgeschlagen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -48636,30 +48647,30 @@ Zeile: %4, Spalte: %5
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation type="unfinished">Keine</translation>
|
||||
<translation>Keine</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>LF</source>
|
||||
<translation type="unfinished">LF</translation>
|
||||
<translation>LF</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CR</source>
|
||||
<translation type="unfinished">CR</translation>
|
||||
<translation>CR</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CRLF</source>
|
||||
<translation type="unfinished">CRLF</translation>
|
||||
<translation>CRLF</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtC::SilverSearcher</name>
|
||||
<message>
|
||||
<source>Search Options (optional)</source>
|
||||
<translation type="unfinished">Sucheinstellungen (optional)</translation>
|
||||
<translation>Sucheinstellungen (optional)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</context>
|
||||
<context>
|
||||
@@ -55651,88 +55662,92 @@ should a repository require SSH-authentication (see documentation on SSH and the
|
||||
<name>QtC::WebAssembly</name>
|
||||
<message>
|
||||
<source>Web Browser</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Webbrowser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>WebAssembly Runtime</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>WebAssembly-Runtime</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Emscripten SDK path:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Pfad zum Emscripten-SDK:</translation>
|
||||
</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>
|
||||
<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>
|
||||
<source>Emscripten SDK environment:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Umgebung für Emscripten-SDK:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>Adding directories to PATH:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Füge Verzeichnisse zu PATH hinzu:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Setting environment variables:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Setze Umgebungsvariablen:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>Activated version: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Aktivierte Version: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>WebAssembly</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>WebAssembly</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Setup Emscripten SDK for WebAssembly? To do it later, select Edit > Preferences > Devices > WebAssembly.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Emscripten-SDK für WebAssembly einrichten? Dies geht auch später unter Bearbeiten > Einstellungen > Geräte > WebAssembly.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Setup Emscripten SDK</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Emscripten-SDK einrichten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>WebAssembly</source>
|
||||
<comment>Qt Version is meant for WebAssembly</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>WebAssembly</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>Effective emrun call:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Resultierender emrun-Aufruf:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Default Browser</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Vorgabe-Browser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Web browser:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Webbrowser:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Emscripten Compiler</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Emscripten-Compiler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Emscripten Compiler %1 for %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Emscripten-Compiler %1 für %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Emscripten</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Emscripten</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -58293,35 +58308,35 @@ Are you sure you want to remove the material?</source>
|
||||
<name>QtC::Vcpkg</name>
|
||||
<message>
|
||||
<source>Search package...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Paket suchen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Vcpkg Manifest Editor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Vcpkg Manifest-Editor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Name:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Name:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Version:</source>
|
||||
<translation type="unfinished">Version:</translation>
|
||||
<translation>Version:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>License:</source>
|
||||
<translation type="unfinished">Lizenz:</translation>
|
||||
<translation>Lizenz:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Description:</source>
|
||||
<translation type="unfinished">Beschreibung:</translation>
|
||||
<translation>Beschreibung:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Homepage:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Homepage:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Vcpkg installation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Vcpkg-Installation</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
||||
@@ -54,6 +54,10 @@ bool UnixPtyProcess::startProcess(const QString &shellPath,
|
||||
int rc = 0;
|
||||
|
||||
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) {
|
||||
m_lastError = QString("UnixPty Error: unable to open master -> %1").arg(QLatin1String(strerror(errno)));
|
||||
kill();
|
||||
@@ -308,10 +312,7 @@ QByteArray UnixPtyProcess::readAll()
|
||||
|
||||
qint64 UnixPtyProcess::write(const QByteArray &byteArray)
|
||||
{
|
||||
int result = ::write(m_shellProcess.m_handleMaster, byteArray.constData(), byteArray.size());
|
||||
Q_UNUSED(result)
|
||||
|
||||
return byteArray.size();
|
||||
return ::write(m_shellProcess.m_handleMaster, byteArray.constData(), byteArray.size());
|
||||
}
|
||||
|
||||
bool UnixPtyProcess::isAvailable()
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <vterm.h>
|
||||
|
||||
#include <QLoggingCategory>
|
||||
#include <QTimer>
|
||||
|
||||
namespace TerminalSolution {
|
||||
|
||||
@@ -20,6 +21,8 @@ QColor toQColor(const VTermColor &c)
|
||||
return QColor(qRgb(c.rgb.red, c.rgb.green, c.rgb.blue));
|
||||
};
|
||||
|
||||
constexpr int batchFlushSize = 256;
|
||||
|
||||
struct TerminalSurfacePrivate
|
||||
{
|
||||
TerminalSurfacePrivate(TerminalSurface *surface, const QSize &initialGridSize)
|
||||
@@ -29,13 +32,64 @@ struct TerminalSurfacePrivate
|
||||
, 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()
|
||||
{
|
||||
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);
|
||||
|
||||
static auto writeToPty = [](const char *s, size_t len, void *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);
|
||||
@@ -319,6 +373,10 @@ struct TerminalSurfacePrivate
|
||||
SurfaceIntegration *m_surfaceIntegration{nullptr};
|
||||
|
||||
TerminalSurface *q;
|
||||
QTimer m_delayWriteTimer;
|
||||
QByteArray m_writeBuffer;
|
||||
|
||||
TerminalSurface::WriteToPty m_writeToPty;
|
||||
};
|
||||
|
||||
TerminalSurface::TerminalSurface(QSize initialGridSize)
|
||||
@@ -393,7 +451,7 @@ void TerminalSurface::clearAll()
|
||||
vterm_input_write(d->m_vterm.get(), data.constData(), data.size());
|
||||
|
||||
// Send Ctrl+L which will clear the screen
|
||||
emit writeToPty(QByteArray("\f"));
|
||||
d->m_writeToPty(QByteArray("\f"));
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
void TerminalSurface::setWriteToPty(WriteToPty writeToPty)
|
||||
{
|
||||
d->m_writeToPty = writeToPty;
|
||||
}
|
||||
|
||||
CellIterator TerminalSurface::begin() const
|
||||
{
|
||||
auto res = CellIterator(this, {0, 0});
|
||||
|
||||
@@ -98,10 +98,12 @@ public:
|
||||
SurfaceIntegration *surfaceIntegration() const;
|
||||
void setSurfaceIntegration(SurfaceIntegration *surfaceIntegration);
|
||||
|
||||
using WriteToPty = std::function<qint64(const QByteArray &)>;
|
||||
void setWriteToPty(WriteToPty writeToPty);
|
||||
|
||||
void mouseMove(QPoint pos, Qt::KeyboardModifiers modifiers);
|
||||
void mouseButton(Qt::MouseButton button, bool pressed, Qt::KeyboardModifiers modifiers);
|
||||
signals:
|
||||
void writeToPty(const QByteArray &data);
|
||||
void invalidated(QRect grid);
|
||||
void fullSizeChanged(QSize newSize);
|
||||
void cursorChanged(Cursor oldCursor, Cursor newCursor);
|
||||
|
||||
@@ -170,7 +170,7 @@ void TerminalView::setupSurface()
|
||||
if (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] {
|
||||
updateScrollBars();
|
||||
|
||||
@@ -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 restart();
|
||||
|
||||
@@ -1564,9 +1564,11 @@ qint64 Process::writeRaw(const QByteArray &input)
|
||||
QTC_ASSERT(state() == QProcess::Running, return -1);
|
||||
QTC_ASSERT(QThread::currentThread() == thread(), return -1);
|
||||
qint64 result = -1;
|
||||
QMetaObject::invokeMethod(d->m_process.get(), [this, input] {
|
||||
d->m_process->write(input);
|
||||
}, d->connectionType(), &result);
|
||||
QMetaObject::invokeMethod(
|
||||
d->m_process.get(),
|
||||
[this, input] { return d->m_process->write(input); },
|
||||
d->connectionType(),
|
||||
&result);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
@@ -76,7 +106,7 @@ QMap<QString, QList<QKeySequence>> CommandsFile::importCommands() const
|
||||
QTC_ASSERT(!currentId.isEmpty(), continue);
|
||||
const QXmlStreamAttributes attributes = r.attributes();
|
||||
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);
|
||||
result.insert(currentId, keys << QKeySequence(keyString));
|
||||
}
|
||||
@@ -93,7 +123,6 @@ QMap<QString, QList<QKeySequence>> CommandsFile::importCommands() const
|
||||
/*!
|
||||
\internal
|
||||
*/
|
||||
|
||||
bool CommandsFile::exportCommands(const QList<ShortcutItem *> &items)
|
||||
{
|
||||
FileSaver saver(m_filePath, QIODevice::Text);
|
||||
@@ -118,7 +147,7 @@ bool CommandsFile::exportCommands(const QList<ShortcutItem *> &items)
|
||||
w.writeAttribute(ctx.idAttribute, id.toString());
|
||||
for (const QKeySequence &k : item->m_keys) {
|
||||
w.writeEmptyElement(ctx.keyElement);
|
||||
w.writeAttribute(ctx.valueAttribute, k.toString());
|
||||
w.writeAttribute(ctx.valueAttribute, toAttribute(k.toString()));
|
||||
}
|
||||
w.writeEndElement(); // Shortcut
|
||||
}
|
||||
@@ -126,7 +155,8 @@ bool CommandsFile::exportCommands(const QList<ShortcutItem *> &items)
|
||||
w.writeEndElement();
|
||||
w.writeEndDocument();
|
||||
|
||||
saver.setResult(&w);
|
||||
if (!saver.setResult(&w))
|
||||
qWarning() << saver.errorString();
|
||||
}
|
||||
return saver.finalize();
|
||||
}
|
||||
|
||||
@@ -426,6 +426,7 @@ public:
|
||||
QList<ParameterAction *> m_projectActions;
|
||||
QList<QAction *> m_repositoryActions;
|
||||
ParameterAction *m_applyCurrentFilePatchAction = nullptr;
|
||||
|
||||
Gerrit::Internal::GerritPlugin m_gerritPlugin;
|
||||
|
||||
QPointer<StashDialog> m_stashDialog;
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <coreplugin/icore.h>
|
||||
#include <debugger/debuggeritem.h>
|
||||
#include <debugger/debuggeritemmanager.h>
|
||||
#include <projectexplorer/devicesupport/devicemanager.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
#include <projectexplorer/toolchain.h>
|
||||
#include <projectexplorer/toolchainmanager.h>
|
||||
@@ -447,7 +448,8 @@ static ToolChain *iarToolChain(const FilePath &path, Id language)
|
||||
== BareMetal::Constants::IAREW_TOOLCHAIN_TYPEID;
|
||||
});
|
||||
if (iarFactory) {
|
||||
Toolchains detected = iarFactory->autoDetect(ToolchainDetector({}, {}, {}));
|
||||
Toolchains detected = iarFactory->autoDetect(
|
||||
{{}, DeviceManager::defaultDesktopDevice(), {}});
|
||||
if (detected.isEmpty())
|
||||
detected = iarFactory->detectForImport({path, language});
|
||||
for (auto tc : detected) {
|
||||
|
||||
@@ -3,10 +3,11 @@
|
||||
|
||||
#include "toolchainoptionspage.h"
|
||||
|
||||
#include "toolchain.h"
|
||||
#include "abi.h"
|
||||
#include "devicesupport/devicemanager.h"
|
||||
#include "projectexplorerconstants.h"
|
||||
#include "projectexplorertr.h"
|
||||
#include "toolchain.h"
|
||||
#include "toolchainconfigwidget.h"
|
||||
#include "toolchainmanager.h"
|
||||
|
||||
@@ -407,7 +408,7 @@ void ToolChainOptionsWidget::redetectToolchains()
|
||||
QSet<ToolChain *> toDelete;
|
||||
ToolChainManager::resetBadToolchains();
|
||||
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)) {
|
||||
if (knownTcs.contains(tc) || toDelete.contains(tc))
|
||||
continue;
|
||||
|
||||
@@ -1675,8 +1675,8 @@ void DesignerActionManager::createDefaultDesignerActions()
|
||||
setFlowStartDisplayName,
|
||||
{},
|
||||
flowCategory,
|
||||
2,
|
||||
{},
|
||||
2,
|
||||
&setFlowStartItem,
|
||||
&isFlowItem,
|
||||
&flowOptionVisible));
|
||||
|
||||
@@ -260,10 +260,12 @@ void TerminalWidget::closeTerminal()
|
||||
deleteLater();
|
||||
}
|
||||
|
||||
void TerminalWidget::writeToPty(const QByteArray &data)
|
||||
qint64 TerminalWidget::writeToPty(const QByteArray &data)
|
||||
{
|
||||
if (m_process && m_process->isRunning())
|
||||
m_process->writeRaw(data);
|
||||
return m_process->writeRaw(data);
|
||||
|
||||
return data.size();
|
||||
}
|
||||
|
||||
void TerminalWidget::resizePty(QSize newSize)
|
||||
|
||||
@@ -71,7 +71,7 @@ protected:
|
||||
void linkActivated(const Link &link) 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 setClipboard(const QString &text) override;
|
||||
std::optional<TerminalView::Link> toLink(const QString &text) override;
|
||||
|
||||
33
tests/system/0001-Fix-build-on-macOS.patch
Normal file
33
tests/system/0001-Fix-build-on-macOS.patch
Normal 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)
|
||||
|
||||
@@ -238,7 +238,7 @@ def __logDebugResult__():
|
||||
|
||||
def verifyBreakPoint(bpToVerify):
|
||||
if isinstance(bpToVerify, dict):
|
||||
fileName = list(bpToVerify.keys())[0]
|
||||
fileName = next(iter(bpToVerify.keys()))
|
||||
editor = getEditorForFileSuffix(fileName)
|
||||
if editor:
|
||||
test.compare(waitForObject(":DebugModeWidget_QComboBox").toolTip, fileName,
|
||||
@@ -247,7 +247,7 @@ def verifyBreakPoint(bpToVerify):
|
||||
windowTitle = str(waitForObject(":Qt Creator_Core::Internal::MainWindow").windowTitle)
|
||||
test.verify(windowTitle.startswith(os.path.basename(fileName) + " "),
|
||||
"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)
|
||||
else:
|
||||
test.fatal("Expected a dict for bpToVerify - got '%s'" % className(bpToVerify))
|
||||
|
||||
@@ -248,11 +248,16 @@ def createProject_Qt_GUI(path, projectName, checks=True, addToVersionControl="<N
|
||||
# param path specifies where to create the project
|
||||
# param projectName is the name for the new project
|
||||
# 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")
|
||||
__createProjectSetNameAndPath__(path, projectName, checks)
|
||||
buildSystem = __handleBuildSystem__(buildSystem)
|
||||
__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)
|
||||
|
||||
expectedFiles = []
|
||||
|
||||
@@ -206,7 +206,8 @@ def substituteCdb(settingsDir):
|
||||
try:
|
||||
serverIni = readFile(os.path.join(os.getenv("APPDATA"), "froglogic",
|
||||
"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]
|
||||
return os.path.exists(os.path.join(autPath, "..", "lib", "qtcreatorcdbext64"))
|
||||
except:
|
||||
|
||||
@@ -41,8 +41,9 @@ def main():
|
||||
listView = waitForObject(":popupFrame_Proposal_QListView")
|
||||
shownProposals = dumpItems(listView.model())
|
||||
usedProposal = "class derived from QObject"
|
||||
expectedProposals = ["class", "class ", "class template",
|
||||
expectedProposals = ["class ", "class template",
|
||||
usedProposal, "class derived from QWidget"]
|
||||
expectedProposals += [" class"] if useClang else ["class"]
|
||||
test.xcompare(len(shownProposals), len(expectedProposals), # QTCREATORBUG-23159
|
||||
"Number of proposed templates")
|
||||
test.verify(set(expectedProposals).issubset(set(shownProposals)),
|
||||
|
||||
@@ -44,7 +44,7 @@ def checkQtCreatorHelpVersion(expectedVersion):
|
||||
helpContentWidget = waitForObject(':Qt Creator_QHelpContentWidget', 5000)
|
||||
waitFor("any(map(rightStart, dumpItems(helpContentWidget.model())))", 10000)
|
||||
items = dumpItems(helpContentWidget.model())
|
||||
test.compare(list(filter(rightStart, items))[0],
|
||||
test.compare(next(iter(filter(rightStart, items))),
|
||||
'Qt Creator Manual %s' % expectedVersion,
|
||||
'Verifying whether manual uses expected version.')
|
||||
except:
|
||||
|
||||
@@ -12,7 +12,11 @@ def main():
|
||||
startQC()
|
||||
if not startedWithoutPluginError():
|
||||
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")
|
||||
replaceEditorContent(mainEditor, "")
|
||||
|
||||
@@ -9,7 +9,7 @@ def cmakeSupported():
|
||||
versionLines = filter(lambda line: "cmake version " in line,
|
||||
getOutputFromCmdline(["cmake", "--version"]).splitlines())
|
||||
try:
|
||||
versionLine = list(versionLines)[0]
|
||||
versionLine = next(iter(versionLines))
|
||||
test.log("Using " + versionLine)
|
||||
matcher = re.match("cmake version (\d+)\.(\d+)\.\d+", versionLine)
|
||||
major = __builtin__.int(matcher.group(1))
|
||||
@@ -32,6 +32,16 @@ def main():
|
||||
if not SpeedCrunchPath:
|
||||
test.fatal("Could not clone SpeedCrunch")
|
||||
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()
|
||||
if not startedWithoutPluginError():
|
||||
return
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
"text" "nestinglevel"
|
||||
"CMakeLists.txt" "0"
|
||||
"speedcrunch" "0"
|
||||
"Header Files" "1"
|
||||
"genericdock.h" "2"
|
||||
"Source Files" "1"
|
||||
|
||||
|
@@ -49,8 +49,8 @@ def main():
|
||||
availableProjectTypes.append({category:template})
|
||||
safeClickButton("Cancel")
|
||||
for current in availableProjectTypes:
|
||||
category = list(current.keys())[0]
|
||||
template = list(current.values())[0]
|
||||
category = next(iter(current.keys()))
|
||||
template = next(iter(current.values()))
|
||||
with TestSection("Testing project template %s -> %s" % (category, template)):
|
||||
displayedPlatforms = __createProject__(category, template)
|
||||
if template.startswith("Qt Quick Application"):
|
||||
|
||||
@@ -311,15 +311,15 @@ def __compareCompilers__(foundCompilers, expectedCompilers):
|
||||
for currentExp in expectedCompilers:
|
||||
if isString(currentExp):
|
||||
continue
|
||||
key = list(currentExp.keys())[0]
|
||||
key = next(iter(currentExp.keys()))
|
||||
# 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
|
||||
# same applies for [.0-9]+ which is used for minor/patch versions
|
||||
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()):
|
||||
if ((isWin and os.path.abspath(list(currentFound.values())[0].lower())
|
||||
== os.path.abspath(list(currentExp.values())[0].lower()))
|
||||
if ((isWin and os.path.abspath(next(iter(currentFound.values())).lower())
|
||||
== os.path.abspath(next(iter(currentExp.values())).lower()))
|
||||
or currentFound.values() == currentExp.values()):
|
||||
foundExp = True
|
||||
break
|
||||
@@ -359,24 +359,22 @@ def __lowerStrs__(iterable):
|
||||
def __checkCreatedSettings__(settingsFolder):
|
||||
waitForCleanShutdown()
|
||||
qtProj = os.path.join(settingsFolder, "QtProject")
|
||||
folders = []
|
||||
files = [{os.path.join(qtProj, "QtCreator.db"):0},
|
||||
{os.path.join(qtProj, "QtCreator.ini"):30}]
|
||||
folders.append(os.path.join(qtProj, "qtcreator"))
|
||||
files.extend([{os.path.join(folders[0], "debuggers.xml"):0},
|
||||
{os.path.join(folders[0], "devices.xml"):0},
|
||||
{os.path.join(folders[0], "helpcollection.qhc"):0},
|
||||
{os.path.join(folders[0], "profiles.xml"):0},
|
||||
{os.path.join(folders[0], "qtversion.xml"):0},
|
||||
{os.path.join(folders[0], "toolchains.xml"):0}])
|
||||
folders.extend([os.path.join(folders[0], "generic-highlighter"),
|
||||
os.path.join(folders[0], "macros")])
|
||||
creatorFolder = os.path.join(qtProj, "qtcreator")
|
||||
folders = [creatorFolder,
|
||||
os.path.join(creatorFolder, "generic-highlighter"),
|
||||
os.path.join(creatorFolder, "macros")]
|
||||
files = {os.path.join(qtProj, "QtCreator.db"):0,
|
||||
os.path.join(qtProj, "QtCreator.ini"):30,
|
||||
os.path.join(creatorFolder, "debuggers.xml"):0,
|
||||
os.path.join(creatorFolder, "devices.xml"):0,
|
||||
os.path.join(creatorFolder, "helpcollection.qhc"):0,
|
||||
os.path.join(creatorFolder, "profiles.xml"):0,
|
||||
os.path.join(creatorFolder, "qtversion.xml"):0,
|
||||
os.path.join(creatorFolder, "toolchains.xml"):0}
|
||||
for f in folders:
|
||||
test.verify(os.path.isdir(f),
|
||||
"Verifying whether folder '%s' has been created." % os.path.basename(f))
|
||||
for f in files:
|
||||
fName = list(f.keys())[0]
|
||||
fMinSize = list(f.values())[0]
|
||||
for fName, fMinSize in files.items():
|
||||
text = "created non-empty"
|
||||
if fMinSize > 0:
|
||||
text = "modified"
|
||||
|
||||
@@ -8,7 +8,7 @@ def main():
|
||||
if not neededFilePresent(pathCreator):
|
||||
return
|
||||
|
||||
startQC()
|
||||
startQC(["-noload", "ClangCodeModel"])
|
||||
if not startedWithoutPluginError():
|
||||
return
|
||||
openQbsProject(pathCreator)
|
||||
@@ -24,7 +24,7 @@ def main():
|
||||
else:
|
||||
test.warning("Parsing project timed out")
|
||||
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)))
|
||||
if deprecationWarnings:
|
||||
test.warning("Creator claims that the .qbs file uses deprecated features.",
|
||||
|
||||
@@ -13,7 +13,7 @@ def main():
|
||||
if not pathSpeedcrunch:
|
||||
test.fatal("Could not clone SpeedCrunch")
|
||||
return
|
||||
startQC()
|
||||
startQC(["-noload", "ClangCodeModel"])
|
||||
if not startedWithoutPluginError():
|
||||
return
|
||||
|
||||
|
||||
@@ -4166,7 +4166,6 @@
|
||||
"Headers" "5"
|
||||
"touchbar.h" "6"
|
||||
"Sources" "5"
|
||||
"touchbar.cpp" "6"
|
||||
"Headers" "4"
|
||||
"optional" "6"
|
||||
"optional.hpp" "7"
|
||||
@@ -16895,21 +16894,6 @@
|
||||
"qtc-askpass-main.cpp" "4"
|
||||
"Other files" "3"
|
||||
"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.pro" "3"
|
||||
"qtcreatortool" "3"
|
||||
@@ -20837,7 +20821,6 @@
|
||||
"Headers" "5"
|
||||
"touchbar.h" "6"
|
||||
"Sources" "5"
|
||||
"touchbar.cpp" "6"
|
||||
"Headers" "4"
|
||||
"optional" "6"
|
||||
"optional.hpp" "7"
|
||||
@@ -21758,7 +21741,6 @@
|
||||
"Headers" "6"
|
||||
"touchbar.h" "7"
|
||||
"Sources" "6"
|
||||
"touchbar.cpp" "7"
|
||||
"Headers" "5"
|
||||
"optional" "7"
|
||||
"optional.hpp" "8"
|
||||
|
||||
|
Can't render this file because it is too large.
|
@@ -86,12 +86,12 @@ def __clickCommit__(count):
|
||||
show = str(description.plainText)
|
||||
id = "Nobody <nobody@nowhere\.com>"
|
||||
time = "\w{3} \w{3} \d{1,2} \d{2}:\d{2}:\d{2} \d{4}.* seconds ago\)"
|
||||
expected = [{"commit %s" % commit:False},
|
||||
{"Author: %s, %s" % (id, time): True},
|
||||
{"Committer: %s, %s" % (id, time): True}]
|
||||
expected = [["commit %s" % commit, False],
|
||||
["Author: %s, %s" % (id, time), True],
|
||||
["Committer: %s, %s" % (id, time), True]]
|
||||
for line, exp in zip(show.splitlines(), expected):
|
||||
expLine = list(exp.keys())[0]
|
||||
isRegex = list(exp.values())[0]
|
||||
expLine = exp[0]
|
||||
isRegex = exp[1]
|
||||
if isRegex:
|
||||
test.verify(re.match(expLine, line), "Verifying commit header line '%s'" % line)
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user