# # # patch "src/monotone/MonotoneUtil.cpp" # from [5facc35299eb887b32b3fb083d1016eee34e5d83] # to [2b552c60706be45c06cf70b46a050f05dd203669] # # patch "src/monotone/MonotoneUtil.h" # from [0053455adf0e5730fa991a59d705ff978ff60ec0] # to [16514e4a0acd2bd9d75d734cc962cad161484d23] # ============================================================ --- src/monotone/MonotoneUtil.cpp 5facc35299eb887b32b3fb083d1016eee34e5d83 +++ src/monotone/MonotoneUtil.cpp 2b552c60706be45c06cf70b46a050f05dd203669 @@ -49,7 +49,6 @@ void MonotoneUtil::taskFinished(const Mo eventLoop.quit(); } - void MonotoneUtil::taskAborted(const MonotoneTask & task) { if (task.getCommandNumber() != commandNumber) return; @@ -66,21 +65,21 @@ bool MonotoneUtil::runCommand(const QStr { QProcess proc; proc.start(path, params); - + // could not be started (invalid path, not executable, ...) if (!proc.waitForStarted(5000)) { C("process not started"); return false; } - + // process doesn't return, etc... if (!proc.waitForFinished(5000)) { C("process not finished"); return false; } - + // read all of the output output.append(proc.readAll()); return true; @@ -91,27 +90,27 @@ bool MonotoneUtil::checkInterfaceVersion QString output; QStringList opts; opts << "automate" << "interface_version"; - + if (!runCommand(path, opts, output)) { return false; } - + QRegExp regex("^(\\d+(?:\\.\\d+))"); - + if (regex.indexIn(output) == -1) { D(QString("couldn't parse output: %1").arg(output)); return false; } - + QString curVersion = regex.cap(1); - + D(QString("interface version: %1, need one between ['%2' .. '%3'[") .arg(curVersion) .arg(MinInterfaceVersion) .arg(MaxInterfaceVersion) - ); + ); return versionCompare(curVersion, MinInterfaceVersion) >= 0 && versionCompare(curVersion, MaxInterfaceVersion) < 0; @@ -123,7 +122,7 @@ QString MonotoneUtil::stripMtnPrefix(con { QString output; QStringList list = input.split(QRegExp("\\n")); - + // FIXME: we should actually use basename(mtnBinaryPath) in case // the binary is renamed, but I'm too lazy for this right now... // and this would also require to make this method non-static @@ -148,23 +147,23 @@ int MonotoneUtil::versionCompare(const Q { QStringList leftParts = left.split("."); QStringList rightParts = right.split("."); - + int leftCount = leftParts.size(); int rightCount = rightParts.size(); int maxCount = leftCount > rightCount ? leftCount : rightCount; - + for (int i=0, j=maxCount; i r) return 1; return -1; } - + return 0; } @@ -176,25 +175,25 @@ MonotoneTask MonotoneUtil::runSynchronou delete instance; return result; } - + QString MonotoneUtil::getBaseWorkspaceRevision(const QString & db) { MonotoneTask in(QStringList() << "get_base_revision_id"); MonotoneTask out = runSynchronousTask(db, in); if (!out.isFinished()) F("task aborted"); - + QString data = out.getOutputUtf8(); if (out.getReturnCode() > 0) { C(QString("Could not execute get_base_revision_id: %1").arg(data)); return QString(); } - + data.chop(1); - + // we cannot handle workspaces with multiple parents yet I(data.indexOf('\n') == -1); - + return data; } @@ -203,24 +202,24 @@ QString MonotoneUtil::getOption(const QS MonotoneTask in(QStringList() << "get_option" << opt); MonotoneTask out = runSynchronousTask(db, in); if (!out.isFinished()) F("task aborted"); - + QString data = out.getOutputUtf8(); if (out.getReturnCode() > 0) { C(QString("Couldn't retrieve option %1: %2").arg(opt).arg(data)); return QString(); } - + // remove the trailing newline data.chop(1); - + return data; } QString MonotoneUtil::getBranchName(const QString & db, const QString & defaultBranch) { QString branchName = getOption(db, "branch"); - + if (branchName.size() == 0) { branchName = defaultBranch; @@ -235,10 +234,10 @@ QString MonotoneUtil::getBranchNameShort QString branchName = getBranchName(db); QStringList parts = branchName.split('.'); if (parts.size() == 1) return branchName; - + int maxSize = 30; int minNeededChars = (parts.size() * 2) - 1; - + QString shortBranchName; for (int i=parts.size()-1; i>=0 ; i--) { @@ -251,11 +250,11 @@ QString MonotoneUtil::getBranchNameShort { shortBranchName.prepend(part); } - + if (i != 0) shortBranchName.prepend("."); minNeededChars -= 2; } - + return shortBranchName; } @@ -264,14 +263,14 @@ QStringList MonotoneUtil::resolveSelecto MonotoneTask in(QStringList() << "select" << selector); MonotoneTask out = runSynchronousTask(db, in); if (!out.isFinished()) F("task aborted"); - + QString data = out.getOutputUtf8(); if (out.getReturnCode() > 0) { C(QString("Couldn't resolve selector %1: %2").arg(selector).arg(data)); return QStringList(); } - + QStringList revList = data.split('\n', QString::SkipEmptyParts); return revList; } @@ -281,35 +280,35 @@ RevisionCerts MonotoneUtil::getRevisionC MonotoneTask in(QStringList() << "certs" << revision); MonotoneTask out = runSynchronousTask(db, in); if (!out.isFinished()) F("task aborted"); - + QString data = out.getOutputUtf8(); if (out.getReturnCode() > 0) { C(QString("Couldn't query revision certs for %1: %2").arg(revision).arg(data)); return RevisionCerts(); } - + BasicIOParser parser(data); if (!parser.parse()) { C("Could not parse basic_io."); return RevisionCerts(); } - + RevisionCerts certs; StanzaList stanzas = parser.getStanzas(); - + foreach (Stanza st, stanzas) { RevisionCert cert; - + foreach (StanzaEntry en, st) { if (en.sym == "name") { cert.first = en.vals.at(0); } - + if (en.sym == "value") { cert.second = en.vals.at(0); @@ -326,25 +325,25 @@ FileEntryList MonotoneUtil::getRevisionM QStringList cmd = QStringList() << "get_manifest_of"; if (!revision.isEmpty()) cmd << revision; - + MonotoneTask in(cmd); MonotoneTask out = runSynchronousTask(db, in); if (!out.isFinished()) F("task aborted"); - + QString data = out.getOutputUtf8(); if (out.getReturnCode() > 0) { C(QString("Couldn't query manifest entries for %1: %2").arg(revision).arg(data)); return FileEntryList(); } - + BasicIOParser parser(data); if (!parser.parse()) { C("Could not parse basic_io."); return FileEntryList(); } - + // FIXME: this should go into a separate function / class FileEntryList entries; StanzaList stanzas = parser.getStanzas(); @@ -352,7 +351,7 @@ FileEntryList MonotoneUtil::getRevisionM { FileEntry entry; bool is_item = false; - + foreach (StanzaEntry en, st) { if (en.sym == "format_version") @@ -393,21 +392,21 @@ QStringList MonotoneUtil::getPrivateKeyL MonotoneTask in(QStringList() << "keys"); MonotoneTask out = runSynchronousTask(db, in); if (!out.isFinished()) F("task aborted"); - + QString data = out.getOutputUtf8(); if (out.getReturnCode() > 0) { C(QString("Couldn't query keys: %1").arg(data)); return QStringList(); } - + BasicIOParser parser(data); if (!parser.parse()) { C("Could not parse basic_io."); return QStringList(); } - + QStringList keys; StanzaList stanzas = parser.getStanzas(); foreach (Stanza st, stanzas) @@ -420,7 +419,7 @@ QStringList MonotoneUtil::getPrivateKeyL lastKey = en.vals.at(0); continue; } - + if (en.sym == "private_location") { I(!lastKey.isEmpty()); @@ -437,14 +436,14 @@ QString MonotoneUtil::getFileId(const QS MonotoneTask in(QStringList() << "identify" << path); MonotoneTask out = runSynchronousTask(db, in); if (!out.isFinished()) F("task aborted"); - + QString data = out.getOutputUtf8(); if (out.getReturnCode() > 0) { C(QString("Couldn't identify path: %1").arg(data)); return QString(); } - + data.chop(1); return data; } ============================================================ --- src/monotone/MonotoneUtil.h 0053455adf0e5730fa991a59d705ff978ff60ec0 +++ src/monotone/MonotoneUtil.h 16514e4a0acd2bd9d75d734cc962cad161484d23 @@ -36,10 +36,10 @@ public: static bool checkInterfaceVersion(const QString &); static int versionCompare(const QString &, const QString &); static QString stripMtnPrefix(const QString &); - + static const QString MinInterfaceVersion; static const QString MaxInterfaceVersion; - + // synchronous commands static MonotoneTask runSynchronousTask(const QString &, const MonotoneTask &); static QString getBaseWorkspaceRevision(const QString &);