# # # patch "res/forms/dialogs/annotate.ui" # from [4284de7e03e359a4f93edafdd2fb074e46e5ef35] # to [bdef344eee4af86e9709b541271778319a3316ff] # # patch "src/monotone/MonotoneUtil.cpp" # from [9558be31f39398c04dbdb53a24d2a62ee3494604] # to [fb11750176e141b155068283c4b041958ea7a62b] # # patch "src/monotone/MonotoneUtil.h" # from [0ba7e01b0566dee10d08162b05d48cbd0fa78ccd] # to [9364f0fee38d44cd3cc0d8f6f4dbf28e21d3db64] # # patch "src/view/dialogs/AnnotateFile.cpp" # from [692f21e4684bfcf0617b4590475e8227b089b13a] # to [9d9aae6eaa58f6b1f01872500ced7a7097664d49] # # patch "src/view/dialogs/AnnotateFile.h" # from [6d8d61ba66b1f6691a5bf5b56959ccfb0331a016] # to [7f3392e328b31a5daf075dd8f95491d6846ffe57] # # patch "src/view/dialogs/CommitRevision.cpp" # from [961367f97bfd8c5ac804752bda21e17f6a92961d] # to [cea026866a5a7b92bfe0784e1741d009069f2a25] # # patch "src/view/dialogs/DatabaseDialogManager.cpp" # from [51cc7d27d32e6996f1b6a22bd30b2ff8f737b349] # to [1b3f4989aa6ed7892228a5066057baee3aeb2712] # # patch "src/view/dialogs/FileHistory.cpp" # from [363e3cd95e7cc9938f3a7c694310f0622da224ef] # to [39a8761450d502b9479f27973c791e155b35cf54] # # patch "src/view/dialogs/Netsync.cpp" # from [8cad65f0505bc50ecb0acdcf24be36ec2081d18a] # to [05beca66608fae00fd596121e46c4ccf9f797d2e] # # patch "src/view/dialogs/SelectRevision.cpp" # from [9ebfde2a43baa073075f4608586bc1b20a8b1d6d] # to [8300d701a7249245e851c34b13b4d55058aed0ac] # # patch "src/view/widgets/CertListBrowser.cpp" # from [d5308d39e3f7ea8e7cc7d4cf1561967079c213ac] # to [03420e647fb84bc901b8e17c5166ce7f509bf4c6] # # patch "src/view/widgets/CertListBrowser.h" # from [db0ffa6a52db23b4a74b5f6069c8243ea229a3ed] # to [6228fa6e76611a1f06f5ec309cdefc03b5d9bf25] # ============================================================ --- res/forms/dialogs/annotate.ui 4284de7e03e359a4f93edafdd2fb074e46e5ef35 +++ res/forms/dialogs/annotate.ui bdef344eee4af86e9709b541271778319a3316ff @@ -85,7 +85,7 @@ - + ============================================================ --- src/monotone/MonotoneUtil.cpp 9558be31f39398c04dbdb53a24d2a62ee3494604 +++ src/monotone/MonotoneUtil.cpp fb11750176e141b155068283c4b041958ea7a62b @@ -294,7 +294,7 @@ FileEntryList MonotoneUtil::getRevisionM return entries; } -QMap MonotoneUtil::getPrivateKeyList(const DatabaseFile & db) +QMap MonotoneUtil::getPublicKeyMap(const DatabaseFile & db) { MonotoneTaskPtr task(new MonotoneTask(QStringList() << "keys")); runSynchronousDatabaseTask(db, task); @@ -319,6 +319,59 @@ QMap MonotoneUtil::get foreach (const Stanza & st, stanzas) { QString lastHash; + QString lastLocalName; + + foreach (const StanzaEntry & en, st) + { + if (en.sym == "hash") + { + lastHash = en.hash; + continue; + } + + if (en.sym == "local_name") + { + lastLocalName = en.vals.at(0); + continue; + } + + if (en.sym == "public_location") + { + I(!lastHash.isEmpty() && !lastLocalName.isEmpty()); + keys.insert(lastHash, QObject::tr("%1 (%2...)") + .arg(lastLocalName).arg(lastHash.left(8))); + break; + } + } + } + return keys; +} + +QMap MonotoneUtil::getPrivateKeyMap(const DatabaseFile & db) +{ + MonotoneTaskPtr task(new MonotoneTask(QStringList() << "keys")); + runSynchronousDatabaseTask(db, task); + if (!task->isFinished()) + { + C(QString("task '%1' aborted").arg(QString(task->getEncodedInput()))); + return QMap(); + } + + if (task->getReturnCode() > 0) + { + C(QString("Couldn't query keys: %1") + .arg(task->getLast(MonotoneTask::Error))); + return QMap(); + } + + BasicIOParser parser(task->getDecodedOutput()); + I(parser.parse()); + + QMap keys; + StanzaList stanzas = parser.getStanzas(); + foreach (const Stanza & st, stanzas) + { + QString lastHash; QString lastGivenName; foreach (const StanzaEntry & en, st) ============================================================ --- src/monotone/MonotoneUtil.h 0ba7e01b0566dee10d08162b05d48cbd0fa78ccd +++ src/monotone/MonotoneUtil.h 9364f0fee38d44cd3cc0d8f6f4dbf28e21d3db64 @@ -38,7 +38,8 @@ public: static QStringList resolveSelector(const DatabaseFile &, const QString &); static CertList getCerts(const DatabaseFile &, const QString &); static FileEntryList getRevisionManifest(const DatabaseFile &, const QString &); - static QMap getPrivateKeyList(const DatabaseFile &); + static QMap getPublicKeyMap(const DatabaseFile &); + static QMap getPrivateKeyMap(const DatabaseFile &); static QStringList getPreviousContentMarks(const DatabaseFile &, const QString &, const QString &); static QString getCorrespondingPath(const DatabaseFile &, const QString &, const QString &, const QString &); static QString getFileId(const DatabaseFile &, const QString &); ============================================================ --- src/view/dialogs/AnnotateFile.cpp 692f21e4684bfcf0617b4590475e8227b089b13a +++ src/view/dialogs/AnnotateFile.cpp 9d9aae6eaa58f6b1f01872500ced7a7097664d49 @@ -22,7 +22,8 @@ #include #include -AnnotateFile::AnnotateFile(QWidget * parent) : Dialog(parent), annotateModel(0) +AnnotateFile::AnnotateFile(QWidget * parent, const DatabaseFile & db) + : Dialog(parent), databaseFile(db), annotateModel(0) { setupUi(this); Dialog::init(); @@ -34,6 +35,8 @@ AnnotateFile::AnnotateFile(QWidget * par baseRevision, SLOT(clear()) ); + certList->setKeyMap(MonotoneUtil::getPublicKeyMap(databaseFile)); + annotateModel = new Annotate(this); annotationView->setModel(annotateModel); @@ -44,7 +47,7 @@ AnnotateFile::AnnotateFile(QWidget * par connect( annotateModel, SIGNAL(currentCertList(const CertList &)), - changelog, SLOT(setCertList(const CertList &)) + certList, SLOT(setCertList(const CertList &)) ); connect( @@ -80,15 +83,14 @@ AnnotateFile::~AnnotateFile() if (annotateModel) delete annotateModel; } -void AnnotateFile::read(const DatabaseFile & db, const QString & rev, const QString & file) +void AnnotateFile::read(const QString & rev, const QString & file) { if (rev == annotateModel->getBaseRevision() && file == filePath) { return; } - databaseFile = db; - filePath = file; + filePath = file; int pos = baseRevision->findText(rev); if (pos == -1) @@ -130,7 +132,7 @@ void AnnotateFile::setSelectedRevision(c return; } - read(databaseFile, rev, newPath); + read(rev, newPath); } void AnnotateFile::rowsSelected(const QModelIndexList & indexes) ============================================================ --- src/view/dialogs/AnnotateFile.h 6d8d61ba66b1f6691a5bf5b56959ccfb0331a016 +++ src/view/dialogs/AnnotateFile.h 7f3392e328b31a5daf075dd8f95491d6846ffe57 @@ -29,11 +29,11 @@ public: Q_OBJECT public: - AnnotateFile(QWidget *); + AnnotateFile(QWidget *, const DatabaseFile &); ~AnnotateFile(); public slots: - void read(const DatabaseFile &, const QString &, const QString &); + void read(const QString &, const QString &); void setSelectedRevision(const QString &); signals: @@ -43,8 +43,8 @@ private: void revisionDiff(const QString &, const QString &, const QString &); private: + DatabaseFile databaseFile; Annotate * annotateModel; - DatabaseFile databaseFile; QString filePath; private slots: ============================================================ --- src/view/dialogs/CommitRevision.cpp 961367f97bfd8c5ac804752bda21e17f6a92961d +++ src/view/dialogs/CommitRevision.cpp cea026866a5a7b92bfe0784e1741d009069f2a25 @@ -92,7 +92,7 @@ void CommitRevision::readWorkspaceRevisi ); QMap privateKeys = - MonotoneUtil::getPrivateKeyList(MonotoneUtil::getDatabaseFile(workspacePath)); + MonotoneUtil::getPrivateKeyMap(MonotoneUtil::getDatabaseFile(workspacePath)); if (privateKeys.size() == 0) { ============================================================ --- src/view/dialogs/DatabaseDialogManager.cpp 51cc7d27d32e6996f1b6a22bd30b2ff8f737b349 +++ src/view/dialogs/DatabaseDialogManager.cpp 1b3f4989aa6ed7892228a5066057baee3aeb2712 @@ -300,7 +300,7 @@ void DatabaseDialogManager::showAnnotati { if (!annotateFile) { - annotateFile = new AnnotateFile(parentWidget()); + annotateFile = new AnnotateFile(parentWidget(), databaseFile); connect( annotateFile, SIGNAL(selectRevision()), @@ -328,7 +328,7 @@ void DatabaseDialogManager::showAnnotati ); } - annotateFile->read(databaseFile, rev, file); + annotateFile->read(rev, file); showDialog(annotateFile); } ============================================================ --- src/view/dialogs/FileHistory.cpp 363e3cd95e7cc9938f3a7c694310f0622da224ef +++ src/view/dialogs/FileHistory.cpp 39a8761450d502b9479f27973c791e155b35cf54 @@ -17,6 +17,7 @@ ***************************************************************************/ #include "FileHistory.h" +#include "MonotoneUtil.h" FileHistory::FileHistory(QWidget * parent, const DatabaseFile & databaseFile) : Dialog(parent) @@ -26,6 +27,8 @@ FileHistory::FileHistory(QWidget * paren splitter->restoreState(); + certList->setKeyMap(MonotoneUtil::getPublicKeyMap(databaseFile)); + changeModel = new GetContentChanged(this, databaseFile); certsModel = new Certs(this, databaseFile); ============================================================ --- src/view/dialogs/Netsync.cpp 8cad65f0505bc50ecb0acdcf24be36ec2081d18a +++ src/view/dialogs/Netsync.cpp 05beca66608fae00fd596121e46c4ccf9f797d2e @@ -70,7 +70,7 @@ void Netsync::init() } QMap privateKeys = - MonotoneUtil::getPrivateKeyList(db); + MonotoneUtil::getPrivateKeyMap(db); keys->clear(); keys->addItem(tr(""), QString()); ============================================================ --- src/view/dialogs/SelectRevision.cpp 9ebfde2a43baa073075f4608586bc1b20a8b1d6d +++ src/view/dialogs/SelectRevision.cpp 8300d701a7249245e851c34b13b4d55058aed0ac @@ -18,6 +18,7 @@ #include "SelectRevision.h" #include "Settings.h" +#include "MonotoneUtil.h" #include #include @@ -61,6 +62,8 @@ SelectRevision::SelectRevision(QWidget * // assign the models to the views revisionList->setModel(sortModel); + certList->setKeyMap(MonotoneUtil::getPublicKeyMap(databaseFile)); + connect( certsModel, SIGNAL(certsRead(const CertList &)), certList, SLOT(setCertList(const CertList &)) ============================================================ --- src/view/widgets/CertListBrowser.cpp d5308d39e3f7ea8e7cc7d4cf1561967079c213ac +++ src/view/widgets/CertListBrowser.cpp 03420e647fb84bc901b8e17c5166ce7f509bf4c6 @@ -24,6 +24,11 @@ CertListBrowser::~CertListBrowser() {} CertListBrowser::~CertListBrowser() {} +void CertListBrowser::setKeyMap(const QMap & map) +{ + keyMap = map; +} + void CertListBrowser::setCertList(const CertList & list) { QString html = @@ -37,8 +42,13 @@ void CertListBrowser::setCertList(const foreach (const QString & signer, signers) { - QString certHtml, signerHtml = tr("

Signer: %1

").arg(signer); + QString certHtml, signerHtml; + if (keyMap.contains(signer)) + signerHtml = tr("

Signer: %1

").arg(keyMap.value(signer)); + else + signerHtml = tr("

Signer: %1

").arg(signer); + foreach (const Cert & cert, list.findBySigner(signer)) { QString name, value; ============================================================ --- src/view/widgets/CertListBrowser.h db0ffa6a52db23b4a74b5f6069c8243ea229a3ed +++ src/view/widgets/CertListBrowser.h 6228fa6e76611a1f06f5ec309cdefc03b5d9bf25 @@ -21,6 +21,7 @@ #include "vocab.h" #include +#include class CertListBrowser : public QTextBrowser { @@ -28,9 +29,13 @@ public: public: CertListBrowser(QWidget *); ~CertListBrowser(); + void setKeyMap(const QMap &); public slots: void setCertList(const CertList &); + +private: + QMap keyMap; }; #endif