# # # patch "src/monotone/MonotoneManager.cpp" # from [f9c0bb5c43835123072c06e6c20d2fd97017276d] # to [7df75fc38e4287b4bccb684a3b4020e698316279] # # patch "src/monotone/MonotoneManager.h" # from [d3bef0429a337b707bbba48dd882c6e1049fcc9b] # to [d89f1d3aca69397462d1952c057f8284c97df553] # ============================================================ --- src/monotone/MonotoneManager.cpp f9c0bb5c43835123072c06e6c20d2fd97017276d +++ src/monotone/MonotoneManager.cpp 7df75fc38e4287b4bccb684a3b4020e698316279 @@ -81,7 +81,9 @@ MonotoneThreadPtr MonotoneManager::getTh QFile dbfile(database); if (!dbfile.open(QIODevice::ReadOnly)) { - throw GuitoneException(tr("Could not open database for reading")); + throw GuitoneException( + tr("Could not open database for reading: %1").arg(dbfile.errorString()) + ); } if (dbfile.read(15) != QByteArray("SQLite format 3")) @@ -157,6 +159,23 @@ MonotoneThreadPtr MonotoneManager::getTh return threadMap.value(threadIDs.value(0)); } +void MonotoneManager::stopWorkspaceThreads(const WorkspacePath & workspace) +{ + WorkspacePath normalizedWorkspace = normalizeWorkspacePath(workspace); + DatabaseFile databaseFile = getDatabaseFilePath(normalizedWorkspace); + QList threadIDs = identMap.keys(databaseFile + "|" + normalizedWorkspace); + + L(QString("stopping %1 threads for workspace %2") + .arg(threadIDs.size()).arg(normalizedWorkspace)); + + foreach (int threadID, threadIDs) + { + MonotoneThreadPtr thread = getThreadByNumber(threadID); + thread->abort(); + thread->wait(); + } +} + WorkspacePath MonotoneManager::normalizeWorkspacePath(const WorkspacePath & workspace) { QDir tempDir(workspace); ============================================================ --- src/monotone/MonotoneManager.h d3bef0429a337b707bbba48dd882c6e1049fcc9b +++ src/monotone/MonotoneManager.h d89f1d3aca69397462d1952c057f8284c97df553 @@ -45,6 +45,9 @@ public: //! returns an appropriate MonotoneThread for the given database MonotoneThreadPtr getThreadForDatabase(const DatabaseFile &); + //! stops and removes all threads for the given workspace + void stopWorkspaceThreads(const WorkspacePath &); + //! returns a thread by a given thread number MonotoneThreadPtr getThreadByNumber(int);