# # # patch "NEWS" # from [2377ec9211971dcc47ad049d80d7cd96be3f6c24] # to [49dc707a3c282aca5f6162a516a17919e8327352] # # patch "src/model/GetBranchLog.cpp" # from [4cf2d86184a2313f82aee37e89322e56c19301ad] # to [56afc57e9129674fa09fe2bedfed7f32dab5c20c] # # patch "src/model/GetBranchLog.h" # from [159c835166a57a1642024e784f1373f041e1de80] # to [97000c8ec8f60f975c9d6a2a9f0d35edf6d4e863] # # patch "src/view/dialogs/ChangesetBrowser.cpp" # from [315941faeb63b5476667421a82985e0d13358802] # to [d073f6a120f33c2aa2912d1fafe96e59cd713696] # # patch "src/view/dialogs/ChangesetBrowser.h" # from [f93a6a0fb3913b9ec516c91424123241aaac28e8] # to [2b802dfbe7d0b78c79722dc5803b63b104ccfb30] # # patch "src/view/dialogs/DatabaseDialogManager.cpp" # from [1b3f4989aa6ed7892228a5066057baee3aeb2712] # to [942816eb7be7e84aa457ce2209f3d8e8a3276ae0] # ============================================================ --- NEWS 2377ec9211971dcc47ad049d80d7cd96be3f6c24 +++ NEWS 49dc707a3c282aca5f6162a516a17919e8327352 @@ -2,6 +2,8 @@ xxxx-xx-xx (1.0rc3) - changed: the possibility to select branch sets like com.project* in the changeset browser has been removed - new: drag'n'drop support in the workspace view to easily rename items + - new: show the complete revision diff against each parent in the + changeset browser - improved: compatibility with MS Visual Studio 2008 (closes FS#48, thanks to Phil Hannent) - bugfix: crash when a branch was double-clicked in the changeset browser ============================================================ --- src/model/GetBranchLog.cpp 4cf2d86184a2313f82aee37e89322e56c19301ad +++ src/model/GetBranchLog.cpp 56afc57e9129674fa09fe2bedfed7f32dab5c20c @@ -33,6 +33,13 @@ GetBranchLog::~GetBranchLog() GetBranchLog::~GetBranchLog() {} +QStringList GetBranchLog::getParents(const QString & rev) const +{ + if (parentMap.contains(rev)) + return parentMap.value(rev); + return QStringList(); +} + void GetBranchLog::readAll(const QString & branch) { readMore(branch, -1); @@ -140,9 +147,9 @@ void GetBranchLog::processTaskResult(con QStringList revs = output.split("\n", QString::SkipEmptyParts); - if (current == "parents" && revs.size() > 1) + if (current == "parents") { - mergeRevs.insert(task->getArguments().at(1)); + parentMap.insert(task->getArguments().at(1), revs); } bool newRevsArrived = false; @@ -260,7 +267,8 @@ QVariant GetBranchLog::data(const QModel } } - if (mergeRevs.contains(rev)) + if (parentMap.contains(rev) && + parentMap.value(rev).size() > 1) { return QVariant(mergeRevsBrush); } ============================================================ --- src/model/GetBranchLog.h 159c835166a57a1642024e784f1373f041e1de80 +++ src/model/GetBranchLog.h 97000c8ec8f60f975c9d6a2a9f0d35edf6d4e863 @@ -23,7 +23,6 @@ #include "Select.h" #include "Toposort.h" -#include #include class GetBranchLog : public QAbstractItemModel, public AutomateCommand @@ -33,6 +32,8 @@ public: GetBranchLog(QObject *, const DatabaseFile &); ~GetBranchLog(); + QStringList getParents(const QString &) const; + // needed Qt Model methods QVariant data(const QModelIndex &, int) const; Qt::ItemFlags flags(const QModelIndex &) const; @@ -55,9 +56,9 @@ private: private: DatabaseFile databaseFile; QMap revisionMap; + QMap parentMap; QMap certMap; QMap nextRevs; - QSet mergeRevs; QString currentBranch; QBrush mergeRevsBrush; ============================================================ --- src/view/dialogs/ChangesetBrowser.cpp 315941faeb63b5476667421a82985e0d13358802 +++ src/view/dialogs/ChangesetBrowser.cpp d073f6a120f33c2aa2912d1fafe96e59cd713696 @@ -228,7 +228,17 @@ void ChangesetBrowser::changesetsDoubleC { if (!index.isValid()) return; QModelIndex revIdx = branchLogModel->index(index.row(), 3, QModelIndex()); - emit revisionManifest(revIdx.data().toString()); + QString rev(revIdx.data().toString()); + + QStringList parents = branchLogModel->getParents(rev); + if (parents.size() == 0) + { + emit revisionManifest(rev); + } + else + { + emit diffRevision(QString(), parents.at(0), rev); + } } void ChangesetBrowser::changesetsContextMenuRequested(const QModelIndexList & indexList, const QPoint & pos) @@ -244,10 +254,31 @@ void ChangesetBrowser::changesetsContext QFont activeFont; activeFont.setBold(true); + QList actParentDiff; + QStringList parents = branchLogModel->getParents(rev); + if (parents.size() > 0) + { + foreach (const QString & parent, parents) + { + actParentDiff.append(menu.addAction( + tr("Show differences against parent %1...") + .arg(parent.left(8)) + )); + } + menu.addSeparator(); + } + QAction * actOpenManifest = menu.addAction(tr("View files in this revision")); QAction * actCopyRevisionId = menu.addAction(tr("Copy revision ID")); - actOpenManifest->setFont(activeFont); + if (actParentDiff.size() == 0) + { + actOpenManifest->setFont(activeFont); + } + else + { + actParentDiff.at(0)->setFont(activeFont); + } QAction * act = menu.exec(pos); if (act == actOpenManifest) @@ -260,6 +291,14 @@ void ChangesetBrowser::changesetsContext QClipboard * clipboard = QApplication::clipboard(); clipboard->setText(rev); } + else + { + int pos = actParentDiff.indexOf(act); + if (pos != -1) + { + emit diffRevision(QString(), parents.at(pos), rev); + } + } } void ChangesetBrowser::updateParentsList() ============================================================ --- src/view/dialogs/ChangesetBrowser.h f93a6a0fb3913b9ec516c91424123241aaac28e8 +++ src/view/dialogs/ChangesetBrowser.h 2b802dfbe7d0b78c79722dc5803b63b104ccfb30 @@ -36,6 +36,7 @@ signals: signals: void revisionManifest(const QString &); + void diffRevision(const QString &, const QString &, const QString &); void diffFile(const QString &, const QString &, const QString &); void annotateFile(const QString &, const QString &); ============================================================ --- src/view/dialogs/DatabaseDialogManager.cpp 1b3f4989aa6ed7892228a5066057baee3aeb2712 +++ src/view/dialogs/DatabaseDialogManager.cpp 942816eb7be7e84aa457ce2209f3d8e8a3276ae0 @@ -84,6 +84,11 @@ void DatabaseDialogManager::showChangese ); connect( + changesetBrowser, SIGNAL(diffRevision(const QString &, const QString &, const QString &)), + this, SLOT(showRevisionDiff(const QString &, const QString &, const QString &)) + ); + + connect( changesetBrowser, SIGNAL(diffFile(const QString &, const QString &, const QString &)), this, SLOT(showFileDiff(const QString &, const QString &, const QString &)) );