summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2021-12-21 10:52:27 +0100
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2021-12-25 17:47:14 +0100
commitf2798c225ad783afc1e170a393656c1a645e09ab (patch)
tree9ed9fedd580bc0c7ccf8447060e838a661eef9be /utils
parentdc677208d0c2ce1e7d627ae92ac420ef850b301b (diff)
downloadrockbox-f2798c225ad783afc1e170a393656c1a645e09ab.tar.gz
rockbox-f2798c225ad783afc1e170a393656c1a645e09ab.zip
rbutil: Simplify reading rockbox-info.txt.
Simplify, and replace use of QRegExp with QRegularExpression for Qt6 compatibility. Also fix the test running on Windows. RockboxInfo constructs the filename from path and filename, so we cannot pass an empty path, since that results in an invalid path. On Linux / MacOS this works only because we use an absolute path. Change-Id: Ieaf30a2df005291d3e997aabf42d64ee832381c2
Diffstat (limited to 'utils')
-rw-r--r--utils/rbutilqt/base/rockboxinfo.cpp70
-rw-r--r--utils/rbutilqt/test/test-rockboxinfo.cpp14
2 files changed, 47 insertions, 37 deletions
diff --git a/utils/rbutilqt/base/rockboxinfo.cpp b/utils/rbutilqt/base/rockboxinfo.cpp
index f34adbfc2f..744559fdec 100644
--- a/utils/rbutilqt/base/rockboxinfo.cpp
+++ b/utils/rbutilqt/base/rockboxinfo.cpp
@@ -18,15 +18,18 @@
18 18
19#include "rockboxinfo.h" 19#include "rockboxinfo.h"
20 20
21#include <QtCore> 21#include <QRegularExpression>
22#include <QDebug> 22#include <QString>
23#include <QFile>
23#include "Logger.h" 24#include "Logger.h"
24 25
25RockboxInfo::RockboxInfo(QString mountpoint, QString fname) 26RockboxInfo::RockboxInfo(QString mountpoint, QString fname) :
27 m_ram(0),
28 m_voicefmt(0),
29 m_success(false)
26{ 30{
27 LOG_INFO() << "Getting version info from rockbox-info.txt"; 31 LOG_INFO() << "Getting version info from rockbox-info.txt";
28 QFile file(mountpoint + "/" + fname); 32 QFile file(mountpoint + "/" + fname);
29 m_success = false;
30 m_voicefmt = 400; // default value for compatibility 33 m_voicefmt = 400; // default value for compatibility
31 if(!file.exists()) 34 if(!file.exists())
32 return; 35 return;
@@ -35,44 +38,47 @@ RockboxInfo::RockboxInfo(QString mountpoint, QString fname)
35 return; 38 return;
36 39
37 // read file contents 40 // read file contents
38 QRegExp hash("^Version:\\s+(r?)([0-9a-fM]+)"); 41 QRegularExpression parts("^([A-Z][a-z ]+):\\s+(.*)");
39 QRegExp version("^Version:\\s+(\\S.*)"); 42
40 QRegExp release("^Version:\\s+([0-9\\.]+)\\s*$");
41 QRegExp target("^Target:\\s+(\\S.*)");
42 QRegExp features("^Features:\\s+(\\S.*)");
43 QRegExp targetid("^Target id:\\s+(\\S.*)");
44 QRegExp memory("^Memory:\\s+(\\S.*)");
45 QRegExp voicefmt("^Voice format:\\s+(\\S.*)");
46 while (!file.atEnd()) 43 while (!file.atEnd())
47 { 44 {
48 QString line = file.readLine().trimmed(); 45 QString line = file.readLine().trimmed();
49 46
50 if(version.indexIn(line) >= 0) { 47 auto match = parts.match(line);
51 m_version = version.cap(1); 48 if(!match.isValid())
52 } 49 {
53 if(release.indexIn(line) >= 0) { 50 continue;
54 m_release = release.cap(1);
55 } 51 }
56 if(hash.indexIn(line) >= 0) { 52
57 // git hashes are usually at least 7 characters. 53 if(match.captured(1) == "Version") {
58 // svn revisions are expected to be at least 4 digits. 54 m_version = match.captured(2);
59 if(hash.cap(2).size() > 3) 55
60 m_revision = hash.cap(2); 56 if(match.captured(2).contains(".")) {
57 // version number
58 m_release = match.captured(2);
59 }
60 if(match.captured(2).contains("-")) {
61 // hash-date format. Revision is first part.
62 m_revision = match.captured(2).split("-").at(0);
63 if(m_revision.startsWith("r")) {
64 m_revision.remove(0, 1);
65 }
66 }
61 } 67 }
62 else if(target.indexIn(line) >= 0) { 68 else if(match.captured(1) == "Target") {
63 m_target = target.cap(1); 69 m_target = match.captured(2);
64 } 70 }
65 else if(features.indexIn(line) >= 0) { 71 else if(match.captured(1) == "Features") {
66 m_features = features.cap(1); 72 m_features = match.captured(2);
67 } 73 }
68 else if(targetid.indexIn(line) >= 0) { 74 else if(match.captured(1) == "Target id") {
69 m_targetid = targetid.cap(1); 75 m_targetid = match.captured(2);
70 } 76 }
71 else if(memory.indexIn(line) >= 0) { 77 else if(match.captured(1) == "Memory") {
72 m_ram = memory.cap(1).toInt(); 78 m_ram = match.captured(2).toInt();
73 } 79 }
74 else if(voicefmt.indexIn(line) >= 0) { 80 else if(match.captured(1) == "Voice format") {
75 m_voicefmt = voicefmt.cap(1).toInt(); 81 m_voicefmt = match.captured(2).toInt();
76 } 82 }
77 } 83 }
78 84
diff --git a/utils/rbutilqt/test/test-rockboxinfo.cpp b/utils/rbutilqt/test/test-rockboxinfo.cpp
index 9d2b53b3ab..69189f585e 100644
--- a/utils/rbutilqt/test/test-rockboxinfo.cpp
+++ b/utils/rbutilqt/test/test-rockboxinfo.cpp
@@ -20,6 +20,7 @@
20 20
21#include <QtTest/QtTest> 21#include <QtTest/QtTest>
22#include <QObject> 22#include <QObject>
23#include <QFileInfo>
23#include "rockboxinfo.h" 24#include "rockboxinfo.h"
24 25
25 26
@@ -83,12 +84,12 @@ void TestRockboxInfo::testVersion()
83 QFETCH(QString, release); 84 QFETCH(QString, release);
84 QTemporaryFile tf(this); 85 QTemporaryFile tf(this);
85 tf.open(); 86 tf.open();
86 QString filename = tf.fileName(); 87 QFileInfo finfo(tf);
87 tf.write(input.toLatin1()); 88 tf.write(input.toLatin1());
88 tf.write("\n"); 89 tf.write("\n");
89 tf.close(); 90 tf.close();
90 91
91 RockboxInfo info("", filename); 92 RockboxInfo info(finfo.path(), finfo.fileName());
92 QCOMPARE(info.version(), QString(version)); 93 QCOMPARE(info.version(), QString(version));
93 QCOMPARE(info.revision(), QString(revision)); 94 QCOMPARE(info.revision(), QString(revision));
94 QCOMPARE(info.release(), QString(release)); 95 QCOMPARE(info.release(), QString(release));
@@ -112,13 +113,14 @@ void TestRockboxInfo::testTarget()
112 QFETCH(QString, target); 113 QFETCH(QString, target);
113 QTemporaryFile tf(this); 114 QTemporaryFile tf(this);
114 tf.open(); 115 tf.open();
116 QFileInfo finfo(tf);
115 QString filename = tf.fileName(); 117 QString filename = tf.fileName();
116 tf.write(prefix.at(j).toLatin1()); 118 tf.write(prefix.at(j).toLatin1());
117 tf.write(target.toLatin1()); 119 tf.write(target.toLatin1());
118 tf.write("\n"); 120 tf.write("\n");
119 tf.close(); 121 tf.close();
120 122
121 RockboxInfo info("", filename); 123 RockboxInfo info(finfo.path(), finfo.fileName());
122 QCOMPARE(info.target(), target); 124 QCOMPARE(info.target(), target);
123 } 125 }
124} 126}
@@ -141,13 +143,14 @@ void TestRockboxInfo::testMemory()
141 QFETCH(QString, memory); 143 QFETCH(QString, memory);
142 QTemporaryFile tf(this); 144 QTemporaryFile tf(this);
143 tf.open(); 145 tf.open();
146 QFileInfo finfo(tf);
144 QString filename = tf.fileName(); 147 QString filename = tf.fileName();
145 tf.write(prefix.at(j).toLatin1()); 148 tf.write(prefix.at(j).toLatin1());
146 tf.write(memory.toLatin1()); 149 tf.write(memory.toLatin1());
147 tf.write("\n"); 150 tf.write("\n");
148 tf.close(); 151 tf.close();
149 152
150 RockboxInfo info("", filename); 153 RockboxInfo info(finfo.path(), finfo.fileName());
151 QCOMPARE(info.ram(), memory.toInt()); 154 QCOMPARE(info.ram(), memory.toInt());
152 } 155 }
153} 156}
@@ -168,13 +171,14 @@ void TestRockboxInfo::testFeatures()
168 QFETCH(QString, features); 171 QFETCH(QString, features);
169 QTemporaryFile tf(this); 172 QTemporaryFile tf(this);
170 tf.open(); 173 tf.open();
174 QFileInfo finfo(tf);
171 QString filename = tf.fileName(); 175 QString filename = tf.fileName();
172 tf.write(prefix.at(j).toLatin1()); 176 tf.write(prefix.at(j).toLatin1());
173 tf.write(features.toLatin1()); 177 tf.write(features.toLatin1());
174 tf.write("\n"); 178 tf.write("\n");
175 tf.close(); 179 tf.close();
176 180
177 RockboxInfo info("", filename); 181 RockboxInfo info(finfo.path(), finfo.fileName());
178 QCOMPARE(info.features(), features); 182 QCOMPARE(info.features(), features);
179 } 183 }
180} 184}