# # # patch "src/model/ContentDiff.cpp" # from [b522cc9b2c22cb6abbe48283f13873ec9770362f] # to [bbb924ce83807cfe7cb5423c107256905bb91530] # # patch "src/model/ContentDiff.h" # from [136f063bc6c791878b0561b7c891b0e46d5887a4] # to [166da0c594871b60a1921a0086d7442df8fecec0] # # patch "src/view/dialogs/FileDiff.cpp" # from [2cec6c3f482d7bd6c6ae18168205fa306376fd53] # to [dc2377a5e1bbfcddf4db4e3f6d23cee808ad7633] # # patch "src/view/dialogs/FileDiff.h" # from [501d0b5241a6e23fe9f31919fd9906c03a24a142] # to [94a31f0695e5ab4097ec6f32d4a71ac6e5f83348] # # patch "src/view/dialogs/RevisionDiff.cpp" # from [14c5030b75f2da760c42794373684bddda2dbaee] # to [78ccc5ca62f2765c0b90507e1282aa2cae3bdffe] # # patch "src/view/dialogs/RevisionDiff.h" # from [5589c056cc792413b67d57023c4341ea3ce4d4b3] # to [7cc3c51d118f521ccd84f63e5f82b73ba93479b9] # ============================================================ --- src/model/ContentDiff.cpp b522cc9b2c22cb6abbe48283f13873ec9770362f +++ src/model/ContentDiff.cpp bbb924ce83807cfe7cb5423c107256905bb91530 @@ -53,12 +53,27 @@ void ContentDiff::readDatabaseDiff(const AutomateCommand::enqueueDatabaseTask(db, task); } -void ContentDiff::readWorkspaceDiff(const WorkspacePath & ws, const QString & fileName) +void ContentDiff::readWorkspaceDiff(const WorkspacePath & ws, const QString & fileName, + const QString & base, const QString & target) { // reset the view reset(); - MonotoneTask task(QStringList() << "content_diff" << fileName); + QStringList cmd; + cmd << "content_diff" << fileName; + + QStringList opts; + if (!base.isEmpty()) + { + opts << "r" << base; + } + + if (!target.isEmpty()) + { + opts << "r" << target; + } + + MonotoneTask task(cmd, opts); AutomateCommand::enqueueWorkspaceTask(ws, task); } ============================================================ --- src/model/ContentDiff.h 136f063bc6c791878b0561b7c891b0e46d5887a4 +++ src/model/ContentDiff.h 166da0c594871b60a1921a0086d7442df8fecec0 @@ -74,7 +74,7 @@ public slots: public slots: void readDatabaseDiff(const DatabaseFile &, const QString &, const QString &, const QString &); - void readWorkspaceDiff(const WorkspacePath &, const QString &); + void readWorkspaceDiff(const WorkspacePath &, const QString &, const QString &, const QString &); signals: void diffRead(); ============================================================ --- src/view/dialogs/FileDiff.cpp 2cec6c3f482d7bd6c6ae18168205fa306376fd53 +++ src/view/dialogs/FileDiff.cpp dc2377a5e1bbfcddf4db4e3f6d23cee808ad7633 @@ -98,7 +98,8 @@ void FileDiff::forDatabase(const Databas diffModel->readDatabaseDiff(db, fileName, base, target); } -void FileDiff::forWorkspace(const WorkspacePath & ws, const QString & file) +void FileDiff::forWorkspace(const WorkspacePath & ws, const QString & file, + const QString & base, const QString & target) { fileName = file; loaded = false; @@ -106,9 +107,22 @@ void FileDiff::forWorkspace(const Worksp QString title = windowTitle(); setWindowTitle(title.arg(fileName)); - firstRevision->setText(tr("workspace parent")); - secondRevision->setText(tr("workspace revision")); + QString left = tr("workspace parent"); + QString right = tr("workspace revision"); + if (!base.isEmpty()) + { + left = base.left(12).append("..."); + } + + if (!target.isEmpty()) + { + right = target.left(12).append("..."); + } + + firstRevision->setText(left); + secondRevision->setText(right); + fileModel = new GetFile(this, MonotoneUtil::getDatabaseFile(ws)); fileProxyModel = new GetFileProxyModel(this); @@ -129,9 +143,16 @@ void FileDiff::forWorkspace(const Worksp this, SLOT(applyDiff()) ); - QString baseRev = MonotoneUtil::getBaseWorkspaceRevision(ws); - fileModel->readFileByName(fileName, baseRev); - diffModel->readWorkspaceDiff(ws, fileName, baseRev); + if (base.isEmpty()) + { + QString workspaceParent = MonotoneUtil::getBaseWorkspaceRevision(ws); + fileModel->readFileByName(fileName, workspaceParent); + diffModel->readWorkspaceDiff(ws, fileName, workspaceParent, target); + return; + } + + fileModel->readFileByName(fileName, base); + diffModel->readWorkspaceDiff(ws, fileName, base, target); } FileDiff::~FileDiff() {} ============================================================ --- src/view/dialogs/FileDiff.h 501d0b5241a6e23fe9f31919fd9906c03a24a142 +++ src/view/dialogs/FileDiff.h 94a31f0695e5ab4097ec6f32d4a71ac6e5f83348 @@ -35,7 +35,7 @@ public: ~FileDiff(); void forDatabase(const DatabaseFile &, const QString &, const QString &, const QString &); - void forWorkspace(const WorkspacePath &, const QString &); + void forWorkspace(const WorkspacePath &, const QString &, const QString &, const QString &); private slots: void applyDiff(); ============================================================ --- src/view/dialogs/RevisionDiff.cpp 14c5030b75f2da760c42794373684bddda2dbaee +++ src/view/dialogs/RevisionDiff.cpp 78ccc5ca62f2765c0b90507e1282aa2cae3bdffe @@ -59,11 +59,22 @@ void RevisionDiff::forDatabase(const Dat diffModel->readDatabaseDiff(db, filePath, base, target); } -void RevisionDiff::forWorkspace(const WorkspacePath & ws, const QString & filePath) +void RevisionDiff::forWorkspace(const WorkspacePath & ws, const QString & filePath, + const QString & base, const QString & target) { QString left = tr("base revision"); QString right = tr("workspace revision"); + if (!base.isEmpty()) + { + left = base.left(12).append("..."); + } + + if (!target.isEmpty()) + { + right = target.left(12).append("..."); + } + QString title; if (!filePath.isEmpty() && filePath != ".") title = tr("Differences between %1 and %2 in %3") @@ -73,6 +84,6 @@ void RevisionDiff::forWorkspace(const Wo .arg(left).arg(right); setWindowTitle(title); - diffModel->readWorkspaceDiff(ws, filePath); + diffModel->readWorkspaceDiff(ws, filePath, base, target); } ============================================================ --- src/view/dialogs/RevisionDiff.h 5589c056cc792413b67d57023c4341ea3ce4d4b3 +++ src/view/dialogs/RevisionDiff.h 7cc3c51d118f521ccd84f63e5f82b73ba93479b9 @@ -33,7 +33,7 @@ public: ~RevisionDiff(); void forDatabase(const DatabaseFile &, const QString &, const QString &, const QString &); - void forWorkspace(const WorkspacePath &, const QString &); + void forWorkspace(const WorkspacePath &, const QString &, const QString &, const QString &); private: ContentDiff * diffModel;