# # # patch "src/model/Annotate.cpp" # from [d7fe79ade508a60624a3aa51bf23f5ce8076c4a9] # to [bac57aad56435487ef2a0d1c1ab77f24fd89e8f2] # # patch "src/model/GetBranchLog.cpp" # from [c40ea2f6102a38f69aa54af15b7efac6f91a78d5] # to [4f53ccedca50123c2632de11b4820505f66eaf67] # # patch "src/monotone/WorkspaceCreator.cpp" # from [1602c4766b5e4c079f3062cac612af21ce14e42f] # to [e2abf1e85e13092c96106650fb5a29c9d1c040bf] # # patch "src/view/panels/NodeInfo.cpp" # from [42a281f64f26502909ada22e46f271daf5010482] # to [427059e0d6bd2dd1a453c6b98918c05a1514d92e] # # patch "src/view/widgets/CertListBrowser.cpp" # from [7b10a41d97f7692e656450d562fce456040c0dbc] # to [d5308d39e3f7ea8e7cc7d4cf1561967079c213ac] # # patch "src/vocab.h" # from [a602e63e66da14ac0f3b73a82e4e5819b9c44677] # to [cbfc15387b50095e8d7fec842b57e6c445400350] # ============================================================ --- src/model/Annotate.cpp d7fe79ade508a60624a3aa51bf23f5ce8076c4a9 +++ src/model/Annotate.cpp bac57aad56435487ef2a0d1c1ab77f24fd89e8f2 @@ -44,8 +44,8 @@ QVariant Annotation::data(int col, int r if (certs.revision.isEmpty()) return QVariant(revision); - QList authorCerts = certs.find("author"); - QList dateCerts = certs.find("date"); + QList authorCerts = certs.findByName("author"); + QList dateCerts = certs.findByName("date"); if (authorCerts.size() == 0 || dateCerts.size() == 0) return QVariant(revision); ============================================================ --- src/model/GetBranchLog.cpp c40ea2f6102a38f69aa54af15b7efac6f91a78d5 +++ src/model/GetBranchLog.cpp 4f53ccedca50123c2632de11b4820505f66eaf67 @@ -184,7 +184,7 @@ QVariant GetBranchLog::data(const QModel { if (certMap.contains(rev)) { - QList changeLogCerts = certMap[rev].find("changelog"); + QList changeLogCerts = certMap[rev].findByName("changelog"); QStringList changeLogs; foreach (Cert cert, changeLogCerts) { @@ -199,7 +199,7 @@ QVariant GetBranchLog::data(const QModel { if (certMap.contains(rev)) { - QStringList branches = certMap[rev].findValues("branch"); + QStringList branches = certMap[rev].findByNameValues("branch"); if (!branches.contains(currentBranch)) { @@ -245,7 +245,7 @@ QVariant GetBranchLog::data(const QModel if (col == 0) { - QList dateCerts = certMap[rev].find("date"); + QList dateCerts = certMap[rev].findByName("date"); QStringList dates; foreach (Cert cert, dateCerts) { @@ -259,12 +259,12 @@ QVariant GetBranchLog::data(const QModel } else if (col == 1) { - QStringList authors = certMap[rev].findValues("author"); + QStringList authors = certMap[rev].findByNameValues("author"); return QVariant(authors.join(", ")); } else if (col == 2) { - QList changelogCerts = certMap[rev].find("changelog"); + QList changelogCerts = certMap[rev].findByName("changelog"); QStringList changelogs; foreach (Cert cert, changelogCerts) { ============================================================ --- src/monotone/WorkspaceCreator.cpp 1602c4766b5e4c079f3062cac612af21ce14e42f +++ src/monotone/WorkspaceCreator.cpp e2abf1e85e13092c96106650fb5a29c9d1c040bf @@ -31,7 +31,7 @@ bool WorkspaceCreator::run() // at first determine the branch name(s) of the revision and let the // user select one branch of a list of branches CertList certs = MonotoneUtil::getCerts(databaseFile, revision); - QStringList branches = certs.findValues("branch"); + QStringList branches = certs.findByNameValues("branch"); if (branches.size() == 0) { ============================================================ --- src/view/panels/NodeInfo.cpp 42a281f64f26502909ada22e46f271daf5010482 +++ src/view/panels/NodeInfo.cpp 427059e0d6bd2dd1a453c6b98918c05a1514d92e @@ -102,9 +102,9 @@ void NodeInfo::readAndSetInfo() CertList certs = MonotoneUtil::getCerts(db, revs.at(0)); - strLastChangeAuthor = certs.findValues("author").join(", "); + strLastChangeAuthor = certs.findByNameValues("author").join(", "); - QList changelogCerts = certs.find("changelog"); + QList changelogCerts = certs.findByName("changelog"); QStringList changelogs; foreach (const Cert & cert, changelogCerts) { @@ -112,7 +112,7 @@ void NodeInfo::readAndSetInfo() } strLastChangelog = changelogs.join("\n
\n"); - QList dateCerts = certs.find("date"); + QList dateCerts = certs.findByName("date"); QStringList dates; foreach (const Cert & cert, dateCerts) { ============================================================ --- src/view/widgets/CertListBrowser.cpp 7b10a41d97f7692e656450d562fce456040c0dbc +++ src/view/widgets/CertListBrowser.cpp d5308d39e3f7ea8e7cc7d4cf1561967079c213ac @@ -28,42 +28,53 @@ void CertListBrowser::setCertList(const { QString html = "" ; - foreach (const Cert & cert, list.certs) + QStringList signers = list.signers(); + + foreach (const QString & signer, signers) { - QString name, value; - if (cert.name == "date") + QString certHtml, signerHtml = tr("

Signer: %1

").arg(signer); + + foreach (const Cert & cert, list.findBySigner(signer)) { - name = tr("Date"); - value = cert.dateTimeValue().toString( - Qt::DefaultLocaleShortDate - ); - } - else if (cert.name == "changelog") - { - name = tr("Changelog"); - value = cert.htmlValue(); - } - else - { - // localize common certs - if (cert.name == "author") - name = tr("Author"); - else if (cert.name == "branch") - name = tr("Branch"); - else if (cert.name == "tag") - name = tr("Tag"); + QString name, value; + if (cert.name == "date") + { + name = tr("Date"); + value = cert.dateTimeValue().toString( + Qt::DefaultLocaleShortDate + ); + } + else if (cert.name == "changelog") + { + name = tr("Changelog"); + value = cert.htmlValue(); + } else - name = cert.name; + { + // localize common certs + if (cert.name == "author") + name = tr("Author"); + else if (cert.name == "branch") + name = tr("Branch"); + else if (cert.name == "tag") + name = tr("Tag"); + else + name = cert.name; - value = cert.value; + value = cert.value; + } + + certHtml += QString("
%1
%2
").arg(name).arg(value); } - html += QString("
%1
%2
").arg(name).arg(value); + html += QString("%1
%2
").arg(signerHtml).arg(certHtml); } - setHtml(QString("
%1
").arg(html)); + + setHtml(html); } ============================================================ --- src/vocab.h a602e63e66da14ac0f3b73a82e4e5819b9c44677 +++ src/vocab.h cbfc15387b50095e8d7fec842b57e6c445400350 @@ -176,11 +176,33 @@ struct CertList revision = QString(); } - QList find(const QString & name) const + QStringList signers() const { + QStringList signers; + foreach (const Cert & cert, certs) + { + if (!signers.contains(cert.key)) + signers.push_back(cert.key); + } + return signers; + } + + QList findBySigner(const QString & key = QString()) const + { QList foundCerts; foreach (const Cert & cert, certs) { + if (key.isEmpty() || key == cert.key) + foundCerts.push_back(cert); + } + return foundCerts; + } + + QList findByName(const QString & name, const QString & key = QString()) const + { + QList foundCerts; + foreach (const Cert & cert, findBySigner(key)) + { if (cert.name != name) continue; foundCerts.push_back(cert); @@ -188,10 +210,10 @@ struct CertList return foundCerts; } - QStringList findValues(const QString & name) const + QStringList findByNameValues(const QString & name, const QString & key = QString()) const { QStringList values; - QList certs = find(name); + QList certs = findByName(name, key); foreach (const Cert & cert, certs) { values.push_back(cert.value);