QString MercurialClient::vcsGetRepositoryURL(const QString &directory) { QByteArray output; QStringList arguments(QLatin1String("showconfig")); arguments << QLatin1String("paths.default"); if (vcsFullySynchronousExec(directory, arguments, &output)) return QString::fromLocal8Bit(output); return QString(); }
//! Removes the last committed revision(s) bool BazaarClient::synchronousUncommit(const QString &workingDir, const QString &revision, const QStringList &extraOptions) { QStringList args; args << QLatin1String("uncommit") << QLatin1String("--force") // Say yes to all questions << QLatin1String("--verbose") // Will print out what is being removed << revisionSpec(revision) << extraOptions; QByteArray stdOut; const bool success = vcsFullySynchronousExec(workingDir, args, &stdOut); if (!stdOut.isEmpty()) VcsBase::VcsBaseOutputWindow::instance()->append(QString::fromUtf8(stdOut)); return success; }
// Describe a change using an optional format QString MercurialClient::shortDescriptionSync(const QString &workingDirectory, const QString &revision, const QString &format) { QString description; QStringList args; args << QLatin1String("log") << QLatin1String("-r") <<revision; if (!format.isEmpty()) args << QLatin1String("--template") << format; QByteArray outputData; if (!vcsFullySynchronousExec(workingDirectory, args, &outputData)) return revision; description = Utils::SynchronousProcess::normalizeNewlines(QString::fromLocal8Bit(outputData)); if (description.endsWith(QLatin1Char('\n'))) description.truncate(description.size() - 1); return description; }
// Describe a change using an optional format bool MercurialClient::shortDescriptionSync(const QString &workingDirectory, const QString &revision, const QString &format, QString *description) { description->clear(); QStringList args; args << QLatin1String("log") << QLatin1String("-r") <<revision; if (!format.isEmpty()) args << QLatin1String("--template") << format; QByteArray outputData; if (!vcsFullySynchronousExec(workingDirectory, args, &outputData)) return false; *description = QString::fromLocal8Bit(outputData); description->remove(QLatin1Char('\r')); if (description->endsWith(QLatin1Char('\n'))) description->truncate(description->size() - 1); return true; }
bool MercurialClient::parentRevisionsSync(const QString &workingDirectory, const QString &file /* = QString() */, const QString &revision, QStringList *parents) { parents->clear(); QStringList args; args << QLatin1String("parents") << QLatin1String("-r") <<revision; if (!file.isEmpty()) args << file; QByteArray outputData; if (!vcsFullySynchronousExec(workingDirectory, args, &outputData)) return false; QString output = QString::fromLocal8Bit(outputData); output.remove(QLatin1Char('\r')); /* Looks like: \code changeset: 0:031a48610fba user: ... \endcode */ // Obtain first line and split by blank-delimited tokens VCSBase::VCSBaseOutputWindow *outputWindow = VCSBase::VCSBaseOutputWindow::instance(); const QStringList lines = output.split(QLatin1Char('\n')); if (lines.size() < 1) { outputWindow->appendSilently(msgParentRevisionFailed(workingDirectory, revision, msgParseParentsOutputFailed(output))); return false; } QStringList changeSets = lines.front().simplified().split(QLatin1Char(' ')); if (changeSets.size() < 2) { outputWindow->appendSilently(msgParentRevisionFailed(workingDirectory, revision, msgParseParentsOutputFailed(output))); return false; } // Remove revision numbers const QChar colon = QLatin1Char(':'); const QStringList::iterator end = changeSets.end(); QStringList::iterator it = changeSets.begin(); for (++it; it != end; ++it) { const int colonIndex = it->indexOf(colon); if (colonIndex != -1) parents->push_back(it->mid(colonIndex + 1)); } return true; }