# # # patch "src/model/GetBranchLog.cpp" # from [a736a08a80c0a4e9e9faf5606cea86a09661ecfc] # to [c40ea2f6102a38f69aa54af15b7efac6f91a78d5] # # patch "src/model/GetBranchLog.h" # from [d9dac872e5ac3f5e4f3c559ebf4bc4642d8f64b1] # to [9347adfb396d817f88109a97a5b7b00a99035e09] # ============================================================ --- src/model/GetBranchLog.cpp a736a08a80c0a4e9e9faf5606cea86a09661ecfc +++ src/model/GetBranchLog.cpp c40ea2f6102a38f69aa54af15b7efac6f91a78d5 @@ -20,6 +20,7 @@ #include "BasicIOParser.h" #include +#include // FIXME: make this configurable eventually const int GetBranchLog::PortionSize = 50; @@ -110,6 +111,11 @@ void GetBranchLog::processTaskResult(con revisionMap[currentBranch] += revs; endInsertRows(); + if (current == "parents" && revs.size() > 1) + { + mergeRevs.insert(task->getArguments().at(1)); + } + foreach (QString rev, revs) { revsRead++; @@ -163,79 +169,116 @@ QVariant GetBranchLog::data(const QModel return QVariant(font); } - if (role == Qt::UserRole) + int row = index.row(); + int col = index.column(); + + if (!revisionMap.contains(currentBranch) || + row >= revisionMap[currentBranch].count()) { - int row = index.row(); + return QVariant(); + } - if (revisionMap.contains(currentBranch) && - row < revisionMap[currentBranch].count()) - { - QString rev = revisionMap[currentBranch].at(row); + QString rev = revisionMap[currentBranch].at(row); - if (certMap.contains(rev)) + if (role == Qt::UserRole) + { + if (certMap.contains(rev)) + { + QList changeLogCerts = certMap[rev].find("changelog"); + QStringList changeLogs; + foreach (Cert cert, changeLogCerts) { - QList changeLogCerts = certMap[rev].find("changelog"); - QStringList changeLogs; - foreach (Cert cert, changeLogCerts) - { - changeLogs.push_back(cert.htmlValue()); - } + changeLogs.push_back(cert.htmlValue()); + } - return QVariant(changeLogs.join("\n
\n")); - } + return QVariant(changeLogs.join("\n
\n")); } } - if (role == Qt::DisplayRole) + if (role == Qt::ForegroundRole) { - int row = index.row(); + if (certMap.contains(rev)) + { + QStringList branches = certMap[rev].findValues("branch"); - if (revisionMap.contains(currentBranch) && - row < revisionMap[currentBranch].count()) + if (!branches.contains(currentBranch)) + { + return QVariant(QBrush(QColor("lightgrey"))); + } + } + + if (mergeRevs.contains(rev)) { - int col = index.column(); - QString rev = revisionMap[currentBranch].at(row); + return QVariant(QBrush(QColor("limegreen"))); + } + } - if (!certMap.contains(rev)) - return QVariant(); + if (role == Qt::ToolTipRole) + { + if (certMap.contains(rev)) + { + QStringList certValues; + foreach (const Cert & cert, certMap[rev].certs) + { + if (cert.name == "changelog") + continue; - if (col == 0) - { - QList dateCerts = certMap[rev].find("date"); - QStringList dates; - foreach (Cert cert, dateCerts) + QString value = cert.value; + if (cert.name == "date") { - dates.push_back( - cert.dateTimeValue().toString( - Qt::DefaultLocaleShortDate - ) + value = cert.dateTimeValue().toString( + Qt::DefaultLocaleShortDate ); } - return QVariant(dates.join(", ")); + + certValues.append(QString("%1: %2").arg(cert.name).arg(value)); } - else if (col == 1) + return QVariant(certValues.join("\n")); + } + } + + if (role == Qt::DisplayRole) + { + + if (!certMap.contains(rev)) + return QVariant(); + + if (col == 0) + { + QList dateCerts = certMap[rev].find("date"); + QStringList dates; + foreach (Cert cert, dateCerts) { - QStringList authors = certMap[rev].findValues("author"); - return QVariant(authors.join(", ")); + dates.push_back( + cert.dateTimeValue().toString( + Qt::DefaultLocaleShortDate + ) + ); } - else if (col == 2) + return QVariant(dates.join(", ")); + } + else if (col == 1) + { + QStringList authors = certMap[rev].findValues("author"); + return QVariant(authors.join(", ")); + } + else if (col == 2) + { + QList changelogCerts = certMap[rev].find("changelog"); + QStringList changelogs; + foreach (Cert cert, changelogCerts) { - QList changelogCerts = certMap[rev].find("changelog"); - QStringList changelogs; - foreach (Cert cert, changelogCerts) - { - QString plain = cert.plainValue(); - if (plain.size() > 50) - plain = plain.left(47).append("..."); - changelogs.push_back(plain); - } - return QVariant(changelogs.join(", ")); + QString plain = cert.plainValue(); + if (plain.size() > 50) + plain = plain.left(47).append("..."); + changelogs.push_back(plain); } - else if (col == 3) - { - return QVariant(rev); - } + return QVariant(changelogs.join(", ")); } + else if (col == 3) + { + return QVariant(rev); + } } return QVariant(); ============================================================ --- src/model/GetBranchLog.h d9dac872e5ac3f5e4f3c559ebf4bc4642d8f64b1 +++ src/model/GetBranchLog.h 9347adfb396d817f88109a97a5b7b00a99035e09 @@ -24,6 +24,7 @@ #include "Toposort.h" #include +#include class GetBranchLog : public QAbstractItemModel, public AutomateCommand { @@ -56,6 +57,7 @@ private: QMap revisionMap; QMap certMap; QMap > nextRevs; + QSet mergeRevs; QString currentBranch; int revsRead;