// Describe a change using an optional format QString MercurialClient::shortDescriptionSync(const QString &workingDirectory, const QString &revision, const QString &format) { QStringList args; args << QLatin1String("log") << QLatin1String("-r") <<revision; if (!format.isEmpty()) args << QLatin1String("--template") << format; const SynchronousProcessResponse resp = vcsFullySynchronousExec(workingDirectory, args); if (resp.result != SynchronousProcessResponse::Finished) return revision; return stripLastNewline(resp.stdOut()); }
//! 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; const SynchronousProcessResponse result = vcsFullySynchronousExec(workingDir, args); VcsOutputWindow::append(result.stdOut()); return result.result == SynchronousProcessResponse::Finished; }
bool MercurialClient::manifestSync(const QString &repository, const QString &relativeFilename) { // This only works when called from the repo and outputs paths relative to it. const QStringList args(QLatin1String("manifest")); const SynchronousProcessResponse result = vcsFullySynchronousExec(repository, args); const QDir repositoryDir(repository); const QFileInfo needle = QFileInfo(repositoryDir, relativeFilename); const QStringList files = result.stdOut().split(QLatin1Char('\n')); foreach (const QString &fileName, files) { const QFileInfo managedFile(repositoryDir, fileName); if (needle == managedFile) return true; } return false; }
bool MercurialClient::synchronousPull(const QString &workingDir, const QString &srcLocation, const QStringList &extraOptions) { QStringList args; args << vcsCommandString(PullCommand) << extraOptions << srcLocation; // Disable UNIX terminals to suppress SSH prompting const unsigned flags = VcsCommand::SshPasswordPrompt | VcsCommand::ShowStdOut | VcsCommand::ShowSuccessMessage; // cause mercurial doesn`t understand LANG QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); env.insert(QLatin1String("LANGUAGE"), QLatin1String("C")); const SynchronousProcessResponse resp = VcsBasePlugin::runVcs( workingDir, vcsBinary(), args, vcsTimeoutS(), flags, nullptr, env); const bool ok = resp.result == SynchronousProcessResponse::Finished; parsePullOutput(resp.stdOut().trimmed()); return ok; }
QStringList MercurialClient::parentRevisionsSync(const QString &workingDirectory, const QString &file /* = QString() */, const QString &revision) { QStringList parents; QStringList args; args << QLatin1String("parents") << QLatin1String("-r") <<revision; if (!file.isEmpty()) args << file; const SynchronousProcessResponse resp = vcsFullySynchronousExec(workingDirectory, args); if (resp.result != SynchronousProcessResponse::Finished) return QStringList(); /* Looks like: \code changeset: 0:031a48610fba user: ... \endcode */ // Obtain first line and split by blank-delimited tokens const QStringList lines = resp.stdOut().split(QLatin1Char('\n')); if (lines.size() < 1) { VcsOutputWindow::appendSilently(msgParentRevisionFailed(workingDirectory, revision, msgParseParentsOutputFailed(resp.stdOut()))); return QStringList(); } QStringList changeSets = lines.front().simplified().split(QLatin1Char(' ')); if (changeSets.size() < 2) { VcsOutputWindow::appendSilently(msgParentRevisionFailed(workingDirectory, revision, msgParseParentsOutputFailed(resp.stdOut()))); return QStringList(); } // 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 parents; }