# # # patch "src/model/Annotate.cpp" # from [b8c549f28b396f9db085aa2bb0184b2245868100] # to [d67a0eae37a9c3bf824fcf4d5601c253af3f0104] # # patch "src/model/AutomateCommand.cpp" # from [a8f26b6d005071f97cbfbc009e6a5d4093618a90] # to [867a7a5834cc2bd9d37c006e65c0e5cc5256f10f] # # patch "src/model/ContentDiff.cpp" # from [31e19c80a067eee885971a08355a5e421d2a553f] # to [c66d44202f15b91e218c2893b2a0c7135ab73a53] # # patch "src/model/ContentDiff.h" # from [afa235dfe6a32b2894bc2f8eccbf492a979e366a] # to [26ee4b0ae4d31c7c9561bbea771005592c4b8df8] # # patch "src/model/GetAttributes.cpp" # from [6bcd1a72894e953a633580e3d2661ff5b9da45ac] # to [13601ca2037d232d817b93f791ab2969a959b8e6] # # patch "src/model/GetContentChanged.cpp" # from [948ac2596110523f4fa6dc469890b500a26e07a8] # to [9e3924105e5e579903c5f40b2f1b3046afb95d8f] # # patch "src/model/GetDatabaseVariables.cpp" # from [f8541e19421025e94cdbfc907c511d9fe6a5d91f] # to [d373b3e71be56181bd7be554dacaba2698d076c3] # # patch "src/model/GetFile.cpp" # from [0e0b5d14f6492ddc40e3b2ccc2289e04ca936b19] # to [7266ca960559afe74b2b5ddc1824eeecf493effa] # # patch "src/model/GetFile.h" # from [1dec5b9aaff37beef4494091378aec8672336a4b] # to [8a67927dde884cced3985247793978311790a122] # # patch "src/model/GetRevision.cpp" # from [6659642e8dbc847525d4d6f9d202d0024f09fbf6] # to [4e1c050d7213c1ce24fde493df12a608d3598b18] # # patch "src/model/GetRevision.h" # from [ee6cfcbb07d0ed81adf8c6ed2e3d905fde700336] # to [4d2f55d9b7a0552abb02eb1a9497ba4b1350eedc] # # patch "src/model/InventoryModel.cpp" # from [d486a1ecb6fc032fb4ed6b30b531a810aa5abcb5] # to [69c0572495f0a4ce9d7c55d0c5c73b13f370aeab] # # patch "src/model/InventoryWatcher.cpp" # from [cd762ac7986f53c901ceb1dde868db357b0a906b] # to [174b9e0f9aeacae84732ed7aae709cfdef447d4c] # # patch "src/model/InventoryWatcher.h" # from [3ebc62636a049b18da9fc6129e49f3c40565a8f3] # to [b27e3e95eb75182f85ba283460775fed556d74e7] # # patch "src/monotone/FileExporter.cpp" # from [14560ec9143c92fdfefc321abafefb4385dcedcb] # to [227f0bdd9a36e77ea413c91697dc9cbdb4deb8e2] # # patch "src/monotone/MonotoneHandle.cpp" # from [ad8ecb421caa5b58372865949f76c956b326707d] # to [0cc36e2f493d405977390077fd1a9b6b2294876b] # # patch "src/monotone/MonotoneProcess.cpp" # from [61ce2a3f402a0eee0c1b4fbe29f0d74d3fd7cd82] # to [98bd69c312ea0ccacb895d03457b32989d40919d] # # patch "src/monotone/MonotoneProcess.h" # from [55157714f3c5a8f543178b37308972f51d0d7209] # to [664d0835886316c1c1f6e8a3d2ddf0bed45b9c3d] # # patch "src/monotone/MonotoneUtil.cpp" # from [de3e8bbff078c511a63a47bea8a4a1d014b0cb63] # to [8e1f9f6b125bf9651cfa9e16649a9675a956caa4] # # patch "src/monotone/MonotoneUtil.h" # from [9af29c54ee20c9145b5a619daf276c1bd14661fc] # to [7417adbb40b4979038ad7fe7bee4d312bf67b063] # # patch "src/monotone/WorkspaceCommitter.cpp" # from [68b4a90293c03e120488357df87e332e46d6cb73] # to [cb0da33d9dd131382974d8b35438c473e5d03fb0] # # patch "src/monotone/WorkspaceCreator.cpp" # from [b2920894fe08036209a860d94c524eca56c10f4b] # to [5874266c9a9ac94264047fa675d4a3197388f205] # # patch "src/view/dialogs/AnnotateFile.cpp" # from [24eb167f9665d569b034acfa5520f15d9fcd4f59] # to [3519933c624c74b48ebf7767190d2b448b4a1595] # # patch "src/view/dialogs/AnnotateFile.h" # from [6676a9a9d44f33d362f0998dcb4d1de9ab642e32] # to [b7ddcd3b831b8ed72ff174a3f10ea30b60cc71fe] # # patch "src/view/dialogs/ChangesetBrowser.cpp" # from [f9ac55614adfd2af499a463e0c5da320905b40ad] # to [8f22145946d657f88c9345df96140e36d4541f68] # # patch "src/view/dialogs/DatabaseDialogManager.cpp" # from [735c030a3f05b6e99ab9590c57dc8a1b46d8c2be] # to [01c9da3b06810d41ac0de709397484c157ccaa48] # # patch "src/view/dialogs/FileDiff.cpp" # from [fe8603471cad4cbdc948351faa2a1fff6217f011] # to [be3871dc581a46e38867d124ea792f4da757f5cc] # # patch "src/view/dialogs/FileDiff.h" # from [35927e2ed2cfe3e530d8f9b366ed501a58f36f32] # to [7fe997030f8d5c6991fe3385464876e76eedbf84] # # patch "src/view/dialogs/Netsync.cpp" # from [7f89aa2b8477875ec94998e7a49b2ae5054a3d6f] # to [83f3780763f03bab0b4e1e26ad4041c5a34bc066] # # patch "src/view/dialogs/Netsync.h" # from [60c3bdb65cba46c0f5305f8bf1dc36ac445dd461] # to [a2bc41abf7b3e78d3a75acb5f4c2387cd38ba4e6] # # patch "src/view/dialogs/RevisionDiff.cpp" # from [c7c804577761f350c26bec42aac456b065dae1fb] # to [56690aeb6ba5ff4f8f947809096ac1ea3ec0d833] # # patch "src/view/dialogs/RevisionDiff.h" # from [f251a593ff991f039cfa2ac281cef5c19e285b1d] # to [b6820c9f0dcf7eda4106a768fb48b6de98114fba] # # patch "src/view/dialogs/WorkspaceDialogManager.cpp" # from [77e476287fdaede8cb3f66fb4ae1bf27fa394899] # to [b0361dcd6e3dd867f197c890d5f7d46f038a5e1f] # # patch "src/view/dialogs/WorkspaceDialogManager.h" # from [7d9e1d7d0f5afdfd347c07ddce881a92f7a6c237] # to [3cede0807d77fab138f880146da08411ef721c7c] # ============================================================ --- src/model/Annotate.cpp b8c549f28b396f9db085aa2bb0184b2245868100 +++ src/model/Annotate.cpp d67a0eae37a9c3bf824fcf4d5601c253af3f0104 @@ -104,6 +104,9 @@ void Annotate::readAnnotation(const Mono const QString & rev, const QString & file) { + // FIXME if there is an annotate available in automate + I(handle->getType() != MonotoneHandle::server_handle); + brushMap.clear(); inverseBrushMap.clear(); annotationLines.clear(); @@ -120,9 +123,11 @@ void Annotate::readAnnotation(const Mono monotoneHandle = handle; baseRevision = rev; + proc->setMonotoneHandle(handle); proc->start( - QStringList() << "annotate" << "-d" << handle - << "-r" << rev << "--revs-only" << file + QStringList() << "annotate" + << "-r" << rev + << "--revs-only" << file ); } ============================================================ --- src/model/AutomateCommand.cpp a8f26b6d005071f97cbfbc009e6a5d4093618a90 +++ src/model/AutomateCommand.cpp 867a7a5834cc2bd9d37c006e65c0e5cc5256f10f @@ -42,7 +42,8 @@ AutomateCommand::~AutomateCommand() } } -void AutomateCommand::enqueueTask(const MonotoneHandlePtr & handle, const MonotoneTaskPtr & task) +void AutomateCommand::enqueueTask(const MonotoneHandlePtr & handle, + const MonotoneTaskPtr & task) { QMutexLocker locker(&lock); ============================================================ --- src/model/ContentDiff.cpp 31e19c80a067eee885971a08355a5e421d2a553f +++ src/model/ContentDiff.cpp c66d44202f15b91e218c2893b2a0c7135ab73a53 @@ -40,9 +40,11 @@ void ContentDiff::cleanup() lines.clear(); } -void ContentDiff::readDatabaseDiff(const MonotoneHandlePtr & handle, const QString & fileName, - const QString & base, const QString & target, - const QString & enc) +void ContentDiff::readDiff(const MonotoneHandlePtr & handle, + const QString & fileName, + const QString & base, + const QString & target, + const QString & enc) { if (enc.isEmpty()) encoding = "UTF-8"; @@ -58,43 +60,6 @@ void ContentDiff::readDatabaseDiff(const } QStringList revs; - revs << base << target; - // sort base and target topologically in case the user accidently chosed - // the child as base and the parent as target (and would therefor get a - // reverse diff) - if (Settings::getBool("FixUnwantedReverseDiffs")) - { - revs = MonotoneUtil::topsortRevisions(handle, revs); - } - - QStringList opts; - foreach (const QString & r, revs) - { - opts << "r" << r; - } - - MonotoneTaskPtr task(new MonotoneTask(cmd, opts)); - AutomateCommand::enqueueDatabaseTask(handle, task); -} - -void ContentDiff::readWorkspaceDiff(const MonotoneHandlePtr & handle, const QString & fileName, - const QString & base, const QString & target, - const QString & enc) -{ - if (enc.isEmpty()) - encoding = "UTF-8"; - else - encoding = enc; - - QStringList cmd; - cmd << "content_diff"; - - if (!fileName.isEmpty()) - { - cmd << fileName; - } - - QStringList revs; if (!base.isEmpty()) { revs << base; @@ -109,7 +74,7 @@ void ContentDiff::readWorkspaceDiff(cons // reverse diff) if (revs.size() == 2 && Settings::getBool("FixUnwantedReverseDiffs")) { - revs = MonotoneUtil::topsortRevisions(MonotoneUtil::getMonotoneHandlePtr(handle), revs); + revs = MonotoneUtil::topsortRevisions(handle, revs); } QStringList opts; @@ -119,7 +84,7 @@ void ContentDiff::readWorkspaceDiff(cons } MonotoneTaskPtr task(new MonotoneTask(cmd, opts)); - AutomateCommand::enqueueWorkspaceTask(handle, task); + AutomateCommand::enqueueTask(handle, task); } void ContentDiff::switchOutputEncoding(const QString & enc) ============================================================ --- src/model/ContentDiff.h afa235dfe6a32b2894bc2f8eccbf492a979e366a +++ src/model/ContentDiff.h 26ee4b0ae4d31c7c9561bbea771005592c4b8df8 @@ -126,8 +126,8 @@ public slots: } public slots: - void readDatabaseDiff(const MonotoneHandlePtr &, const QString &, const QString &, const QString &, const QString & encoding = QString()); - void readWorkspaceDiff(const MonotoneHandlePtr &, const QString &, const QString &, const QString &, const QString & encoding = QString()); + void readDiff(const MonotoneHandlePtr &, const QString &, const QString &, + const QString &, const QString & encoding = QString()); void switchOutputEncoding(const QString &); signals: ============================================================ --- src/model/GetAttributes.cpp 6bcd1a72894e953a633580e3d2661ff5b9da45ac +++ src/model/GetAttributes.cpp 13601ca2037d232d817b93f791ab2969a959b8e6 @@ -42,7 +42,7 @@ void GetAttributes::readAttributes(const void GetAttributes::readAttributes(const QString & path) { - I(!monotoneHandle.isEmpty()); + I(!monotoneHandle.isNull()); // clear current attributes list attributes.clear(); @@ -58,7 +58,7 @@ void GetAttributes::readAttributes(const itemPath = path; MonotoneTaskPtr task(new MonotoneTask(QStringList() << "get_attributes" << itemPath)); - AutomateCommand::enqueueWorkspaceTask(monotoneHandle, task); + AutomateCommand::enqueueTask(monotoneHandle, task); } void GetAttributes::processTaskResult(const MonotoneTaskPtr & task) ============================================================ --- src/model/GetContentChanged.cpp 948ac2596110523f4fa6dc469890b500a26e07a8 +++ src/model/GetContentChanged.cpp 9e3924105e5e579903c5f40b2f1b3046afb95d8f @@ -79,10 +79,13 @@ void GetContentChanged::stopReading() AutomateCommand::abortThreads(); } -void GetContentChanged::queryContentChanged(const QString & rev, const QString & path) +void GetContentChanged::queryContentChanged(const QString & rev, + const QString & path) { if (stopReadingChanges) return; - MonotoneTaskPtr task(new MonotoneTask(QStringList() << "get_content_changed" << rev << path)); + MonotoneTaskPtr task(new MonotoneTask( + QStringList() << "get_content_changed" << rev << path + )); AutomateCommand::enqueueTask(monotoneHandle, task); } @@ -93,10 +96,14 @@ void GetContentChanged::queryParents(con AutomateCommand::enqueueTask(monotoneHandle, task); } -void GetContentChanged::queryCorrespondingPath(const QString & rev, const QString & path, const QString & par) +void GetContentChanged::queryCorrespondingPath(const QString & rev, + const QString & path, + const QString & par) { if (stopReadingChanges) return; - MonotoneTaskPtr task(new MonotoneTask(QStringList() << "get_corresponding_path" << rev << path << par)); + MonotoneTaskPtr task(new MonotoneTask( + QStringList() << "get_corresponding_path" << rev << path << par + )); AutomateCommand::enqueueTask(monotoneHandle, task); } @@ -274,7 +281,9 @@ Qt::ItemFlags GetContentChanged::flags(c return 0; } -QVariant GetContentChanged::headerData(int section, Qt::Orientation orientation, int role) const +QVariant GetContentChanged::headerData(int section, + Qt::Orientation orientation, + int role) const { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { @@ -293,7 +302,8 @@ int GetContentChanged::rowCount(const QM return revisions.size(); } -QModelIndex GetContentChanged::index(int row, int column, const QModelIndex & parent) const +QModelIndex GetContentChanged::index(int row, int column, + const QModelIndex & parent) const { if (!hasIndex(row, column, parent)) { ============================================================ --- src/model/GetDatabaseVariables.cpp f8541e19421025e94cdbfc907c511d9fe6a5d91f +++ src/model/GetDatabaseVariables.cpp d373b3e71be56181bd7be554dacaba2698d076c3 @@ -152,7 +152,9 @@ Qt::ItemFlags GetDatabaseVariables::flag return Qt::ItemIsEnabled; } -QVariant GetDatabaseVariables::headerData(int section, Qt::Orientation orientation, int role) const +QVariant GetDatabaseVariables::headerData(int section, + Qt::Orientation orientation, + int role) const { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { @@ -184,7 +186,8 @@ int GetDatabaseVariables::rowCount(const return keys.size(); } -QModelIndex GetDatabaseVariables::index(int row, int column, const QModelIndex & parent) const +QModelIndex GetDatabaseVariables::index(int row, int column, + const QModelIndex & parent) const { if (!hasIndex(row, column, parent)) { @@ -212,8 +215,9 @@ QModelIndex GetDatabaseVariables::parent return createIndex(row, 0, -1); } - -bool GetDatabaseVariables::setVariable(const QString & domain, const QString & key, const QString & value) +bool GetDatabaseVariables::setVariable(const QString & domain, + const QString & key, + const QString & value) { MonotoneTaskPtr task(new MonotoneTask( QStringList() << "set_db_variable" << domain << key << value @@ -224,7 +228,8 @@ bool GetDatabaseVariables::setVariable(c return task->getReturnCode() == 0; } -bool GetDatabaseVariables::dropVariable(const QString & domain, const QString & key) +bool GetDatabaseVariables::dropVariable(const QString & domain, + const QString & key) { MonotoneTaskPtr task(new MonotoneTask( QStringList() << "drop_db_variables" << domain << key ============================================================ --- src/model/GetFile.cpp 0e0b5d14f6492ddc40e3b2ccc2289e04ca936b19 +++ src/model/GetFile.cpp 7266ca960559afe74b2b5ddc1824eeecf493effa @@ -61,7 +61,7 @@ void GetFile::readFile(const MonotoneHan task->setOutputEncoding(encoding); } - AutomateCommand::enqueueDatabaseTask(handle, task); + AutomateCommand::enqueueTask(handle, task); } void GetFile::processTaskResult(const MonotoneTaskPtr & task) ============================================================ --- src/model/GetFile.h 1dec5b9aaff37beef4494091378aec8672336a4b +++ src/model/GetFile.h 8a67927dde884cced3985247793978311790a122 @@ -58,8 +58,13 @@ public slots: QModelIndex getPrevGroup(const QModelIndex &, bool recurse = false); public slots: - void readFileById(const MonotoneHandlePtr &, const QString &, const QString & encoding = QString()); - void readFileByName(const MonotoneHandlePtr &, const QString &, const QString &, const QString & encoding = QString()); + void readFileById(const MonotoneHandlePtr &, + const QString &, + const QString & encoding = QString()); + void readFileByName(const MonotoneHandlePtr &, + const QString &, + const QString &, + const QString & encoding = QString()); void switchOutputEncoding(const QString &); void applyDiff(Diff * diff); @@ -68,7 +73,10 @@ private: void encodingChanged(const QString &); private: - void readFile(const MonotoneHandlePtr &, const QStringList &, const QStringList &, const QString & encoding = QString()); + void readFile(const MonotoneHandlePtr &, + const QStringList &, + const QStringList &, + const QString & encoding = QString()); void processTaskResult(const MonotoneTaskPtr &); void loadOutputIntoModel(const QString &); ============================================================ --- src/model/GetRevision.cpp 6659642e8dbc847525d4d6f9d202d0024f09fbf6 +++ src/model/GetRevision.cpp 4e1c050d7213c1ce24fde493df12a608d3598b18 @@ -31,15 +31,20 @@ GetRevision::~GetRevision() {} GetRevision::~GetRevision() {} -void GetRevision::readDatabaseRevision(const MonotoneHandlePtr & handle, const QString & rev) +void GetRevision::readExistingRevision(const MonotoneHandlePtr & handle, + const QString & rev) { revision.clear(); - MonotoneTaskPtr task(new MonotoneTask( QStringList() << "get_revision" << rev)); - AutomateCommand::enqueueDatabaseTask(handle, task); + MonotoneTaskPtr task(new MonotoneTask( + QStringList() << "get_revision" << rev + )); + AutomateCommand::enqueueTask(handle, task); } -void GetRevision::readWorkspaceRevision(const MonotoneHandlePtr & handle, const QStringList & paths) +void GetRevision::readWorkspaceRevision(const MonotoneHandlePtr & handle, + const QStringList & paths) { + I(handle->getType() == MonotoneHandle::workspace_handle); revision.clear(); QStringList args; @@ -50,7 +55,7 @@ void GetRevision::readWorkspaceRevision( } MonotoneTaskPtr task(new MonotoneTask(args)); - AutomateCommand::enqueueWorkspaceTask(handle, task); + AutomateCommand::enqueueTask(handle, task); } void GetRevision::processTaskResult(const MonotoneTaskPtr & task) ============================================================ --- src/model/GetRevision.h ee6cfcbb07d0ed81adf8c6ed2e3d905fde700336 +++ src/model/GetRevision.h 4d2f55d9b7a0552abb02eb1a9497ba4b1350eedc @@ -167,7 +167,7 @@ public slots: QStringList getPathsForCompletion() const; public slots: - void readDatabaseRevision(const MonotoneHandlePtr &, const QString &); + void readExistingRevision(const MonotoneHandlePtr &, const QString &); void readWorkspaceRevision(const MonotoneHandlePtr &, const QStringList &); void showChangesAgainstParent(const QString &); ============================================================ --- src/model/InventoryModel.cpp d486a1ecb6fc032fb4ed6b30b531a810aa5abcb5 +++ src/model/InventoryModel.cpp 69c0572495f0a4ce9d7c55d0c5c73b13f370aeab @@ -445,7 +445,8 @@ void InventoryModel::runWorkspaceCommand void InventoryModel::runWorkspaceCommand(const QStringList & args) { - MonotoneProcess proc(monotoneHandle); + MonotoneProcess proc; + proc.setMonotoneHandle(monotoneHandle); proc.start(args); proc.waitForFinished(); @@ -496,7 +497,7 @@ void InventoryModel::renamePath(const QS QStringList args; args << "rename" << oldPath << newPath; - QFileInfo fileInfo(monotoneHandle + "/" + oldPath); + QFileInfo fileInfo(monotoneHandle->getData() + "/" + oldPath); if (!fileInfo.exists()) { args << "--bookkeep-only"; @@ -507,7 +508,7 @@ void InventoryModel::newFile(const QStri void InventoryModel::newFile(const QString & path) { - QFile file(monotoneHandle + "/" + path); + QFile file(monotoneHandle->getData() + "/" + path); if (!file.open(QIODevice::ReadWrite)) { emit workspaceCommandError(tr("Could not create file %1").arg(path)); @@ -520,7 +521,7 @@ void InventoryModel::newDirectory(const void InventoryModel::newDirectory(const QString & path) { - QDir workspace(monotoneHandle); + QDir workspace(monotoneHandle->getData()); if (!workspace.mkpath(path)) { emit workspaceCommandError(tr("Could not create directory %1").arg(path)); @@ -531,7 +532,7 @@ void InventoryModel::ignorePaths(const Q void InventoryModel::ignorePaths(const QStringList & paths) { - QString path(monotoneHandle); + QString path(monotoneHandle->getData()); path.append(QDir::separator()).append(".mtn-ignore"); QFile file(path); @@ -552,7 +553,7 @@ void InventoryModel::unignorePaths(const void InventoryModel::unignorePaths(const QStringList & paths) { - QString path(monotoneHandle); + QString path(monotoneHandle->getData()); path.append(QDir::separator()).append(".mtn-ignore"); QFile file(path); ============================================================ --- src/model/InventoryWatcher.cpp cd762ac7986f53c901ceb1dde868db357b0a906b +++ src/model/InventoryWatcher.cpp 174b9e0f9aeacae84732ed7aae709cfdef447d4c @@ -50,9 +50,11 @@ InventoryWatcher::~InventoryWatcher() } //! TODO: monitor _MTN/options for changes as well -void InventoryWatcher::setMonotoneHandle(const MonotoneHandlePtr & wp) +void InventoryWatcher::setMonotoneHandle(const MonotoneHandlePtr & handle) { - workspace = wp; + monotoneHandle = handle; + + QString workspace = handle->getData(); QString revPath(workspace + "/_MTN/revision"); QFile file(revPath); if (!file.open(QIODevice::ReadOnly)) @@ -74,7 +76,7 @@ void InventoryWatcher::watchPaths(const void InventoryWatcher::watchPaths(const QStringList & paths) { QStringList watchedPaths = files() + directories(); - + QString workspace = monotoneHandle->getData(); foreach (const QString & path, paths) { QString fullPath(workspace); @@ -106,7 +108,7 @@ void InventoryWatcher::unwatchPaths(cons foreach (const QString & path, paths) { - QString fullPath(workspace); + QString fullPath(monotoneHandle->getData()); if (path != "/") fullPath += "/" + path; if (watchedPaths.indexOf(fullPath) == -1) continue; removePath(fullPath); @@ -116,6 +118,7 @@ void InventoryWatcher::pathChanged(const void InventoryWatcher::pathChanged(const QString & path) { + QString workspace = monotoneHandle->getData(); I(path.indexOf(workspace) != -1); if (path == QString(workspace + "/_MTN/revision")) @@ -136,7 +139,7 @@ void InventoryWatcher::pathChanged(const // pick up changes in .mtn-ignore L(QString(".mtn-ignore changed, stopping all threads for %1") .arg(workspace)); - APP->manager()->stopWorkspaceThreads(workspace); + APP->manager()->stopThreads(monotoneHandle); // if something inside .mtn-ignore has changed, the complete workspace // could be affected, so do a full reload @@ -233,6 +236,7 @@ void InventoryWatcher::checkForBookkeepC void InventoryWatcher::checkForBookkeepChanges() { + QString workspace = monotoneHandle->getData(); QFile file(workspace + "/_MTN/revision"); if (!file.open(QIODevice::ReadOnly)) { ============================================================ --- src/model/InventoryWatcher.h 3ebc62636a049b18da9fc6129e49f3c40565a8f3 +++ src/model/InventoryWatcher.h b27e3e95eb75182f85ba283460775fed556d74e7 @@ -47,7 +47,7 @@ private: void markPathForNotification(const QString &); void checkForBookkeepChanges(); - MonotoneHandlePtr workspace; + MonotoneHandlePtr monotoneHandle; StanzaList oldRevisionEntries; QStringList changedPaths; QTimer * notifyTimer; ============================================================ --- src/monotone/FileExporter.cpp 14560ec9143c92fdfefc321abafefb4385dcedcb +++ src/monotone/FileExporter.cpp 227f0bdd9a36e77ea413c91697dc9cbdb4deb8e2 @@ -27,7 +27,8 @@ #include "GuitoneCore.h" #include -FileExporter::FileExporter(const MonotoneHandlePtr & database, const QString & rev, const QDir & dir) +FileExporter::FileExporter(const MonotoneHandlePtr & database, + const QString & rev, const QDir & dir) : QObject(0), monotoneHandle(database), rootDir(dir), revision(rev) { I(rootDir.exists()); ============================================================ --- src/monotone/MonotoneHandle.cpp ad8ecb421caa5b58372865949f76c956b326707d +++ src/monotone/MonotoneHandle.cpp 0cc36e2f493d405977390077fd1a9b6b2294876b @@ -78,7 +78,6 @@ void MonotoneHandle::validateWorkspacePa ); } - QFile optionsFile(workspace + "/_MTN/options"); if (!optionsFile.open(QIODevice::ReadOnly | QIODevice::Text)) { @@ -98,7 +97,9 @@ void MonotoneHandle::validateWorkspacePa BasicIOParser parser(QString::fromUtf8(contents)); if (!parser.parse()) { - throw GuitoneException(QObject::tr("could not parse basic_io from _MTN/options")); + throw GuitoneException( + QObject::tr("could not parse basic_io from _MTN/options") + ); } StanzaList stanzas = parser.getStanzas(); @@ -117,7 +118,9 @@ void MonotoneHandle::validateWorkspacePa if (database.isEmpty()) { - throw GuitoneException(QObject::tr("could not find database for workspace")); + throw GuitoneException( + QObject::tr("could not find database for workspace") + ); } } @@ -161,7 +164,7 @@ void MonotoneHandle::resolveDatabaseAlia args << "au" << "lua" << "get_default_database_locations"; - if (MonotoneProcess::singleRun(args, QString(), output)) + if (MonotoneProcess::singleRun(args, MonotoneHandlePtr(), output)) { QRegExp rx("\\[\\d+\\] = \"([^\"]+)\";"); ============================================================ --- src/monotone/MonotoneProcess.cpp 61ce2a3f402a0eee0c1b4fbe29f0d74d3fd7cd82 +++ src/monotone/MonotoneProcess.cpp 98bd69c312ea0ccacb895d03457b32989d40919d @@ -23,17 +23,8 @@ #include -MonotoneProcess::MonotoneProcess(const QString & workdir) +MonotoneProcess::MonotoneProcess() { - QString work(workdir); - if (workdir.isEmpty()) - { - // a somewhat reasonable path to choose to avoid side effects - // like another existing monotone workspace - work = QDir::tempPath(); - } - setWorkingDirectory(work); - setProcessChannelMode(QProcess::MergedChannels); QStringList env = QProcess::systemEnvironment(); @@ -69,30 +60,56 @@ void MonotoneProcess::setMtnBinaryPath(c void MonotoneProcess::setMtnBinaryPath(const QString & path) { - mtnBinaryPath = path; + monotoneBinaryPath = path; } +void MonotoneProcess::setMonotoneHandle(const MonotoneHandlePtr & handle) +{ + monotoneHandle = handle; +} + void MonotoneProcess::start(const QStringList & params) { bufferedOutput = QString(); - if (mtnBinaryPath.isEmpty()) + if (monotoneBinaryPath.isEmpty()) { - mtnBinaryPath = Settings::getMtnBinaryPath(); + monotoneBinaryPath = Settings::getMtnBinaryPath(); } - QStringList args(params); + QStringList finalParams; if (!Settings::getBool("ReadUserRcFiles")) { - args << "--norc"; + finalParams << "--norc"; } - args << "--rcfile" << rcFile.fileName(); + finalParams << "--rcfile" << rcFile.fileName(); + if (!monotoneHandle.isNull()) + { + I(monotoneHandle->getType() != MonotoneHandle::server_handle); + + // a somewhat reasonable path to choose to avoid side effects + // like another existing monotone workspace + QString workingDir = QDir::tempPath(); + if (monotoneHandle->getType() == MonotoneHandle::workspace_handle) + { + workingDir = monotoneHandle->getData(); + } + setWorkingDirectory(workingDir); + + if (monotoneHandle->getType() == MonotoneHandle::database_handle) + { + finalParams << "-d" << monotoneHandle->getData(); + } + } + + finalParams += params; + L(QString("starting external monotone process %1 %2") - .arg(mtnBinaryPath).arg(args.join(" "))); + .arg(monotoneBinaryPath).arg(finalParams.join(" "))); - QProcess::start(mtnBinaryPath, args); + QProcess::start(monotoneBinaryPath, finalParams); } void MonotoneProcess::readOutput() @@ -166,14 +183,16 @@ bool MonotoneProcess::singleRun(const QS } bool MonotoneProcess::singleRun(const QStringList & params, - const QString & workdir, + const MonotoneHandlePtr & handle, QString & output) { - MonotoneProcess proc(workdir); + MonotoneProcess proc; + proc.setMonotoneHandle(handle); + proc.start(params); proc.waitForFinished(); + output = proc.getBufferedOutput(); - output = proc.getBufferedOutput(); return proc.successful(); } ============================================================ --- src/monotone/MonotoneProcess.h 55157714f3c5a8f543178b37308972f51d0d7209 +++ src/monotone/MonotoneProcess.h 664d0835886316c1c1f6e8a3d2ddf0bed45b9c3d @@ -28,17 +28,20 @@ public: { Q_OBJECT public: - MonotoneProcess(const QString & workdir = QString()); + MonotoneProcess(); virtual ~MonotoneProcess(); void start(const QStringList &); QString getBufferedOutput() const; - void setMtnBinaryPath(const QString &); + void setMonotoneBinaryPath(const QString &); + void setMonotoneHandle(const MonotoneHandlePtr &); bool successful(); - static bool singleRun(const QStringList &, const QString &, QString & output); + static bool singleRun(const QStringList &, + const MonotoneHandlePtr & handle, + QString & output); signals: void output(const QString &); @@ -49,7 +52,9 @@ private: void processError(QProcess::ProcessError); private: - QString mtnBinaryPath; + MonotoneHandlePtr monotoneHandle; + QString monotoneBinaryPath; + QString bufferedOutput; MonotoneResourceFile rcFile; }; ============================================================ --- src/monotone/MonotoneUtil.cpp de3e8bbff078c511a63a47bea8a4a1d014b0cb63 +++ src/monotone/MonotoneUtil.cpp 8e1f9f6b125bf9651cfa9e16649a9675a956caa4 @@ -557,11 +557,32 @@ QStringList MonotoneUtil::topsortRevisio return data.split("\n", QString::SkipEmptyParts); } -bool MonotoneUtil::getAttribute(const MonotoneHandlePtr & handle, - const QString & path, - const QString & attrname, - QPair & attrval) +bool MonotoneUtil::getFileAttribute(const MonotoneHandlePtr & handle, + const QString & rev, + const QString & path, + const QString & attrname, + QPair & attrval) { + if (!rev.isEmpty()) + { + FileEntryList entryList = getRevisionManifest(handle, revision); + + foreach (const FileEntry & en, entryList) + { + if (en.path != path) + continue; + + if (en.attrs.contains(attrname)) + { + attrval.first = en.attrs.value(attrname); + attrval.second = "unchanged"; + return true; + } + } + + return false; + } + I(handle->getType() == MonotoneHandle::workspace_handle); MonotoneTaskPtr task(new MonotoneTask( @@ -600,27 +621,6 @@ bool MonotoneUtil::getAttribute(const Mo return false; } -bool MonotoneUtil::getAttribute(const MonotoneHandlePtr & handle, - const QString & revision, - const QString & path, - const QString & attrname, - QString & attrval) -{ - FileEntryList entryList = getRevisionManifest(handle, revision); - - foreach (const FileEntry & en, entryList) - { - if (en.path != path) continue; - if (en.attrs.contains(attrname)) - { - attrval = en.attrs.value(attrname); - return true; - } - } - - return false; -} - QMap MonotoneUtil::getDatabaseVariables(const MonotoneHandlePtr & handle, const QString & domain) { ============================================================ --- src/monotone/MonotoneUtil.h 9af29c54ee20c9145b5a619daf276c1bd14661fc +++ src/monotone/MonotoneUtil.h 7417adbb40b4979038ad7fe7bee4d312bf67b063 @@ -45,8 +45,7 @@ public: static QStringList getRoots(const MonotoneHandlePtr &, bool &); static QStringList topsortRevisions(const MonotoneHandlePtr &, const QStringList &); static QStringList getCommonAncestors(const MonotoneHandlePtr &, const QStringList &); - static bool getAttribute(const MonotoneHandlePtr &, const QString &, const QString &, QPair &); - static bool getAttribute(const MonotoneHandlePtr &, const QString &, const QString &, const QString &, QString &); + static bool getFileAttribute(const MonotoneHandlePtr &, const QString &, const QString &, QPair &); static QMap getDatabaseVariables(const MonotoneHandlePtr &, const QString &); // FIXME: decide what to do with that ============================================================ --- src/monotone/WorkspaceCommitter.cpp 68b4a90293c03e120488357df87e332e46d6cb73 +++ src/monotone/WorkspaceCommitter.cpp cb0da33d9dd131382974d8b35438c473e5d03fb0 @@ -23,8 +23,9 @@ #include -WorkspaceCommitter::WorkspaceCommitter(const MonotoneHandlePtr & workspace, const GetRevision * model) - : QObject(0), monotoneHandle(workspace), revModel(model) {} +WorkspaceCommitter::WorkspaceCommitter(const MonotoneHandlePtr & handle, + const GetRevision * model) + : QObject(0), monotoneHandle(handle), revModel(model) {} WorkspaceCommitter::~WorkspaceCommitter() {} @@ -48,7 +49,7 @@ bool WorkspaceCommitter::run(const QStri certs.insert("date", QDateTime::currentDateTime().toUTC().toString(Qt::ISODate)); - QDir workspaceDir(monotoneHandle); + QDir workspaceDir(monotoneHandle->getData()); I(workspaceDir.exists()); // @@ -177,7 +178,9 @@ bool WorkspaceCommitter::writeOptions(co return true; } -bool WorkspaceCommitter::putFile(const QString & fileName, const QString & fileId, const QString & baseId) +bool WorkspaceCommitter::putFile(const QString & fileName, + const QString & fileId, + const QString & baseId) { QDir workspaceDir(monotoneHandle); QFile file(workspaceDir.filePath(fileName)); @@ -232,8 +235,10 @@ bool WorkspaceCommitter::putFile(const Q return true; } -bool WorkspaceCommitter::putCert(const QString & rev, const QString & commitKey, - const QString & key, const QString & value) +bool WorkspaceCommitter::putCert(const QString & rev, + const QString & commitKey, + const QString & key, + const QString & value) { MonotoneTaskPtr task(new MonotoneTask( QStringList() << "cert" << rev << key << value, ============================================================ --- src/monotone/WorkspaceCreator.cpp b2920894fe08036209a860d94c524eca56c10f4b +++ src/monotone/WorkspaceCreator.cpp 5874266c9a9ac94264047fa675d4a3197388f205 @@ -98,7 +98,7 @@ bool WorkspaceCreator::createBookkeeping StanzaList stanzas; Stanza stanza; - stanza.append(StanzaEntry("database", QStringList() << handle)); + stanza.append(StanzaEntry("database", QStringList() << handle->getData())); stanza.append(StanzaEntry("branch", QStringList() << branch)); stanzas.append(stanza); ============================================================ --- src/view/dialogs/AnnotateFile.cpp 24eb167f9665d569b034acfa5520f15d9fcd4f59 +++ src/view/dialogs/AnnotateFile.cpp 3519933c624c74b48ebf7767190d2b448b4a1595 @@ -153,7 +153,8 @@ void AnnotateFile::rowsSelected(const QM annotationView->selectionModel()->clearSelection(); } -void AnnotateFile::contextMenuRequested(const QModelIndexList & indexList, const QPoint & pos) +void AnnotateFile::contextMenuRequested(const QModelIndexList & indexList, + const QPoint & pos) { // FIXME: since we clear the selection in rowsSelected(), indexList is // always empty, so we can't use that. Beware that there could be a race @@ -162,7 +163,9 @@ void AnnotateFile::contextMenuRequested( Q_UNUSED(indexList); QString rev = annotateModel->getSelectedRevision(); - QStringList parents = MonotoneUtil::resolveSelector(monotoneHandle, "p:" + rev); + QStringList parents = MonotoneUtil::resolveSelector( + monotoneHandle, "p:" + rev + ); QMenu menu(this); QFont activeFont; ============================================================ --- src/view/dialogs/AnnotateFile.h 6676a9a9d44f33d362f0998dcb4d1de9ab642e32 +++ src/view/dialogs/AnnotateFile.h b7ddcd3b831b8ed72ff174a3f10ea30b60cc71fe @@ -44,7 +44,7 @@ private: private: MonotoneHandlePtr monotoneHandle; - Annotate * annotateModel; + Annotate * annotateModel; QString filePath; private slots: ============================================================ --- src/view/dialogs/ChangesetBrowser.cpp f9ac55614adfd2af499a463e0c5da320905b40ad +++ src/view/dialogs/ChangesetBrowser.cpp 8f22145946d657f88c9345df96140e36d4541f68 @@ -222,7 +222,7 @@ void ChangesetBrowser::changesetViewClic QModelIndex revIdx = branchLogModel->index(idx.row(), 3, QModelIndex()); currentRevision = branchLogModel->data(revIdx, Qt::DisplayRole).toString(); changeLog->setCertList(branchLogModel->getCerts(currentRevision)); - revisionModel->readDatabaseRevision(monotoneHandle, currentRevision); + revisionModel->readExistingRevision(monotoneHandle, currentRevision); revisionParents->clear(); multipleParents->setVisible(false); } ============================================================ --- src/view/dialogs/DatabaseDialogManager.cpp 735c030a3f05b6e99ab9590c57dc8a1b46d8c2be +++ src/view/dialogs/DatabaseDialogManager.cpp 01c9da3b06810d41ac0de709397484c157ccaa48 @@ -158,7 +158,7 @@ void DatabaseDialogManager::showFileDiff fileDiff = new FileDiff(parentWidget()); } - fileDiff->forDatabase(monotoneHandle, file, base, target); + fileDiff->init(monotoneHandle, file, base, target); showDialog(fileDiff); } @@ -247,7 +247,7 @@ void DatabaseDialogManager::showRevision ); } - revisionDiff->forDatabase(monotoneHandle, path, base, target); + revisionDiff->init(monotoneHandle, path, base, target); showDialog(revisionDiff); } ============================================================ --- src/view/dialogs/FileDiff.cpp fe8603471cad4cbdc948351faa2a1fff6217f011 +++ src/view/dialogs/FileDiff.cpp be3871dc581a46e38867d124ea792f4da757f5cc @@ -109,48 +109,22 @@ FileDiff::FileDiff(QWidget * parent) ); } -void FileDiff::forDatabase(const MonotoneHandlePtr & handle, const QString & file, - const QString & base, const QString & target) +void FileDiff::init(const MonotoneHandlePtr & handle, const QString & file, + const QString & base, const QString & target) { fileName = file; - database = handle; + monotoneHandle = handle; + QString encoding; - QString encoding = "UTF-8"; - if (!MonotoneUtil::getAttribute(handle, base, file, "guitone:file-encoding", - encoding)) - { - L(QString("could not query file encoding of %1, using default").arg(file)); - } - - disconnect( - textEncoding, SIGNAL(currentIndexChanged(const QString &)), - this, SLOT(switchOutputEncoding(const QString &)) + QPair attrval; + bool success = MonotoneUtil::getFileAttribute( + handle, base, file, "guitone:file-encoding", attrval ); - textEncoding->setCurrentIndex(textEncoding->findText(encoding)); - - connect( - textEncoding, SIGNAL(currentIndexChanged(const QString &)), - this, SLOT(switchOutputEncoding(const QString &)) - ); - - setWindowTitle(tr("Loading file differences")); - - diffModel->readDatabaseDiff(handle, fileName, base, target, encoding); -} - -void FileDiff::forWorkspace(const MonotoneHandlePtr & handle, const QString & file, - const QString & base, const QString & target) -{ - fileName = file; - workspace = handle; - - QString encoding = "UTF-8"; - QPair attrval; - if (!MonotoneUtil::getAttribute(handle, file, "guitone:file-encoding", attrval) || - attrval.second == "dropped") + if (!success || attrval.second == "dropped") { L(QString("could not query file encoding of %1, using default").arg(file)); + encoding = "UTF-8"; } else { @@ -171,7 +145,7 @@ void FileDiff::forWorkspace(const Monoto setWindowTitle(tr("Loading file differences")); - diffModel->readWorkspaceDiff(handle, fileName, base, target, encoding); + diffModel->readDiff(monotoneHandle, fileName, base, target, encoding); } FileDiff::~FileDiff() @@ -211,17 +185,12 @@ void FileDiff::diffRead() QString base = diffModel->getBase(); if (base.isEmpty()) { - I(!workspace.isEmpty()); - base = MonotoneUtil::getBaseWorkspaceRevision(workspace); + I(monotoneHandle->getType() == MonotoneHandle::workspace_handle); + base = MonotoneUtil::getBaseWorkspaceRevision(monotoneHandle); } - if (database.isEmpty()) - { - I(!workspace.isEmpty()); - database = MonotoneUtil::getMonotoneHandlePtr(workspace); - } - - fileModel->readFileByName(database, fileName, base, textEncoding->currentText()); + fileModel->readFileByName(monotoneHandle, fileName, + base, textEncoding->currentText()); } void FileDiff::fileRead() @@ -334,7 +303,7 @@ void FileDiff::switchOutputEncoding(cons // to wait for signals this time... applyDiff(); - if (!workspace.isEmpty()) + if (monotoneHandle->getType() == MonotoneHandle::workspace_handle) { MonotoneTaskPtr task(new MonotoneTask( QStringList() << "set_attribute" @@ -343,7 +312,7 @@ void FileDiff::switchOutputEncoding(cons << encoding )); - MonotoneUtil::runSynchronousTask(workspace, task); + MonotoneUtil::runSynchronousTask(monotoneHandle, task); if (task->getReturnCode() != 0) { ============================================================ --- src/view/dialogs/FileDiff.h 35927e2ed2cfe3e530d8f9b366ed501a58f36f32 +++ src/view/dialogs/FileDiff.h 7fe997030f8d5c6991fe3385464876e76eedbf84 @@ -32,8 +32,8 @@ public: FileDiff(QWidget *); ~FileDiff(); - void forDatabase(const MonotoneHandlePtr &, const QString &, const QString &, const QString &); - void forWorkspace(const MonotoneHandlePtr &, const QString &, const QString &, const QString &); + void init(const MonotoneHandlePtr &, const QString &, + const QString &, const QString &); private slots: void diffRead(); @@ -52,8 +52,7 @@ private: GetFileProxyModel * fileProxyModel; QModelIndex currentIndex; QString fileName; - MonotoneHandlePtr workspace; - MonotoneHandlePtr database; + MonotoneHandlePtr monotoneHandle; }; #endif ============================================================ --- src/view/dialogs/Netsync.cpp 7f89aa2b8477875ec94998e7a49b2ae5054a3d6f +++ src/view/dialogs/Netsync.cpp 83f3780763f03bab0b4e1e26ad4041c5a34bc066 @@ -22,8 +22,8 @@ #include -Netsync::Netsync(QWidget * parent, const MonotoneHandlePtr & database) - : Dialog(parent), handle(database), running(false) +Netsync::Netsync(QWidget * parent, const MonotoneHandlePtr & handle) + : Dialog(parent), monotoneHandle(handle), running(false) { setupUi(this); Dialog::init(); @@ -108,7 +108,7 @@ void Netsync::start(Action act, } MonotoneTaskPtr task(new MonotoneTask(cmd, opts)); - AutomateCommand::enqueueDatabaseTask(handle, task); + AutomateCommand::enqueueTask(monotoneHandle, task); progressText->setStyleSheet("QLabel { color: palette(text); }"); progressText->setText(tr("Connecting to %1...").arg(host)); ============================================================ --- src/view/dialogs/Netsync.h 60c3bdb65cba46c0f5305f8bf1dc36ac445dd461 +++ src/view/dialogs/Netsync.h a2bc41abf7b3e78d3a75acb5f4c2387cd38ba4e6 @@ -51,7 +51,7 @@ private: void startStopClicked(); private: - MonotoneHandlePtr db; + MonotoneHandlePtr monotoneHandle; bool running; }; ============================================================ --- src/view/dialogs/RevisionDiff.cpp c7c804577761f350c26bec42aac456b065dae1fb +++ src/view/dialogs/RevisionDiff.cpp 56690aeb6ba5ff4f8f947809096ac1ea3ec0d833 @@ -53,8 +53,8 @@ RevisionDiff::~RevisionDiff() delete diffModel; } -void RevisionDiff::forDatabase(const MonotoneHandlePtr & handle, const QString & path, - const QString & base, const QString & target) +void RevisionDiff::init(const MonotoneHandlePtr & handle, const QString & path, + const QString & base, const QString & target) { baseRevision = base; targetRevision = target; @@ -62,21 +62,9 @@ void RevisionDiff::forDatabase(const Mon setWindowTitle(tr("Loading differences")); - diffModel->readDatabaseDiff(handle, filePath, base, target); + diffModel->readDiff(handle, filePath, base, target); } -void RevisionDiff::forWorkspace(const MonotoneHandlePtr & handle, const QString & path, - const QString & base, const QString & target) -{ - baseRevision = base; - targetRevision = target; - filePath = path; - - setWindowTitle(tr("Loading differences")); - - diffModel->readWorkspaceDiff(handle, filePath, base, target); -} - void RevisionDiff::triggerFileDiff(const QModelIndex & index) { ListLine * line = static_cast(index.internalPointer()); ============================================================ --- src/view/dialogs/RevisionDiff.h f251a593ff991f039cfa2ac281cef5c19e285b1d +++ src/view/dialogs/RevisionDiff.h b6820c9f0dcf7eda4106a768fb48b6de98114fba @@ -30,8 +30,8 @@ public: RevisionDiff(QWidget *); ~RevisionDiff(); - void forDatabase(const MonotoneHandlePtr &, const QString &, const QString &, const QString &); - void forWorkspace(const MonotoneHandlePtr &, const QString &, const QString &, const QString &); + void init(const MonotoneHandlePtr &, const QString &, + const QString &, const QString &); signals: void fileDiff(const QString &, const QString &, const QString &); ============================================================ --- src/view/dialogs/WorkspaceDialogManager.cpp 77e476287fdaede8cb3f66fb4ae1bf27fa394899 +++ src/view/dialogs/WorkspaceDialogManager.cpp b0361dcd6e3dd867f197c890d5f7d46f038a5e1f @@ -83,39 +83,12 @@ void WorkspaceDialogManager::showFileDif showFileDiff(file, QString(), QString()); } -void WorkspaceDialogManager::showFileDiff(const QString & file, const QString & base, const QString & target) -{ - if (!fileDiff) - { - fileDiff = new FileDiff(parentWidget()); - } - - fileDiff->forWorkspace(monotoneHandle, file, base, target); - showDialog(fileDiff); -} - void WorkspaceDialogManager::showFileHistory(const QString & file) { DatabaseDialogManager::showFileHistory(file, MonotoneUtil::getBaseWorkspaceRevision(monotoneHandle)); } -void WorkspaceDialogManager::showRevisionDiff(const QString & path, const QString & base, const QString & target) -{ - if (!revisionDiff) - { - revisionDiff = new RevisionDiff(parentWidget()); - - connect( - revisionDiff, SIGNAL(fileDiff(const QString &, const QString &, const QString &)), - this, SLOT(showFileDiff(const QString &, const QString &, const QString &)) - ); - } - - revisionDiff->forWorkspace(monotoneHandle, path, base, target); - showDialog(revisionDiff); -} - void WorkspaceDialogManager::checkForUnaccountedRenames() { if (!unaccountedRenames) ============================================================ --- src/view/dialogs/WorkspaceDialogManager.h 7d9e1d7d0f5afdfd347c07ddce881a92f7a6c237 +++ src/view/dialogs/WorkspaceDialogManager.h 3cede0807d77fab138f880146da08411ef721c7c @@ -50,9 +50,7 @@ public slots: void checkForUnaccountedRenames(); void showUpdateWorkspace(); void showFileDiff(const QString &); - void showFileDiff(const QString &, const QString &, const QString &); void showFileHistory(const QString &); - void showRevisionDiff(const QString &, const QString &, const QString &); void showAnnotation(const QString &); protected: