Vcs: Move vcsFullySynchronousExec into VcsBaseClientImpl

Use that in the gitplugin in favor of fullySynchronousGit.

Change-Id: Ifd981f3fc5e87e16ad52caf32c204f81acffe586
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Tobias Hunger
2015-04-10 16:04:42 +02:00
parent e4db1211ff
commit dcdcf54048
4 changed files with 84 additions and 136 deletions

View File

@@ -634,7 +634,7 @@ bool GitClient::managesFile(const QString &workingDirectory, const QString &file
QByteArray output; QByteArray output;
QStringList arguments; QStringList arguments;
arguments << QLatin1String("ls-files") << QLatin1String("--error-unmatch") << fileName; arguments << QLatin1String("ls-files") << QLatin1String("--error-unmatch") << fileName;
return fullySynchronousGit(workingDirectory, arguments, &output, 0, return vcsFullySynchronousExec(workingDirectory, arguments, &output, 0,
VcsBasePlugin::SuppressCommandLogging); VcsBasePlugin::SuppressCommandLogging);
} }
@@ -976,15 +976,14 @@ bool GitClient::synchronousCheckout(const QString &workingDirectory,
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
QStringList arguments = setupCheckoutArguments(workingDirectory, ref); QStringList arguments = setupCheckoutArguments(workingDirectory, ref);
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText, const bool rc = vcsFullySynchronousExec(workingDirectory, arguments, &outputText, 0,
VcsBasePlugin::ExpectRepoChanges); VcsBasePlugin::ExpectRepoChanges);
VcsOutputWindow::append(commandOutputFromLocal8Bit(outputText)); VcsOutputWindow::append(commandOutputFromLocal8Bit(outputText));
if (!rc) { if (rc)
msgCannotRun(arguments, workingDirectory, errorText, errorMessage);
return false;
}
updateSubmodulesIfNeeded(workingDirectory, true); updateSubmodulesIfNeeded(workingDirectory, true);
return true; else
msgCannotRun(arguments, workingDirectory, errorText, errorMessage);
return rc;
} }
/* method used to setup arguments for checkout, in case user wants to create local branch */ /* method used to setup arguments for checkout, in case user wants to create local branch */
@@ -1072,22 +1071,22 @@ void GitClient::addFile(const QString &workingDirectory, const QString &fileName
bool GitClient::synchronousLog(const QString &workingDirectory, const QStringList &arguments, bool GitClient::synchronousLog(const QString &workingDirectory, const QStringList &arguments,
QString *output, QString *errorMessageIn, unsigned flags) QString *output, QString *errorMessageIn, unsigned flags)
{ {
QByteArray outputText; QByteArray outputData;
QByteArray errorText; QByteArray errorData;
QStringList allArguments; QStringList allArguments;
allArguments << QLatin1String("log") << QLatin1String(noColorOption); allArguments << QLatin1String("log") << QLatin1String(noColorOption);
allArguments.append(arguments); allArguments.append(arguments);
const bool rc = fullySynchronousGit(workingDirectory, allArguments, &outputText, &errorText, const bool rc = vcsFullySynchronousExec(workingDirectory, allArguments, &outputData, &errorData, flags);
flags);
if (rc) { if (rc) {
if (QTextCodec *codec = encoding(workingDirectory, "i18n.logOutputEncoding")) if (QTextCodec *codec = encoding(workingDirectory, "i18n.logOutputEncoding"))
*output = codec->toUnicode(outputText); *output = codec->toUnicode(outputData);
else else
*output = commandOutputFromLocal8Bit(outputText); *output = commandOutputFromLocal8Bit(outputData);
} else { } else {
msgCannotRun(tr("Cannot obtain log of \"%1\": %2") msgCannotRun(tr("Cannot obtain log of \"%1\": %2")
.arg(QDir::toNativeSeparators(workingDirectory), .arg(QDir::toNativeSeparators(workingDirectory),
commandOutputFromLocal8Bit(errorText)), errorMessageIn); commandOutputFromLocal8Bit(errorData)), errorMessageIn);
} }
return rc; return rc;
} }
@@ -1095,16 +1094,9 @@ bool GitClient::synchronousLog(const QString &workingDirectory, const QStringLis
bool GitClient::synchronousAdd(const QString &workingDirectory, const QStringList &files) bool GitClient::synchronousAdd(const QString &workingDirectory, const QStringList &files)
{ {
QByteArray outputText; QByteArray outputText;
QByteArray errorText;
QStringList arguments; QStringList arguments;
arguments << QLatin1String("add") << files; arguments << QLatin1String("add") << files;
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText); return vcsFullySynchronousExec(workingDirectory, arguments, &outputText);
if (!rc) {
msgCannotRun(tr("Cannot add %n file(s) to \"%1\": %2", 0, files.size())
.arg(QDir::toNativeSeparators(workingDirectory),
commandOutputFromLocal8Bit(errorText)), 0);
}
return rc;
} }
bool GitClient::synchronousDelete(const QString &workingDirectory, bool GitClient::synchronousDelete(const QString &workingDirectory,
@@ -1112,19 +1104,12 @@ bool GitClient::synchronousDelete(const QString &workingDirectory,
const QStringList &files) const QStringList &files)
{ {
QByteArray outputText; QByteArray outputText;
QByteArray errorText;
QStringList arguments; QStringList arguments;
arguments << QLatin1String("rm"); arguments << QLatin1String("rm");
if (force) if (force)
arguments << QLatin1String("--force"); arguments << QLatin1String("--force");
arguments.append(files); arguments.append(files);
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText); return vcsFullySynchronousExec(workingDirectory, arguments, &outputText);
if (!rc) {
msgCannotRun(tr("Cannot remove %n file(s) from \"%1\": %2", 0, files.size())
.arg(QDir::toNativeSeparators(workingDirectory),
commandOutputFromLocal8Bit(errorText)), 0);
}
return rc;
} }
bool GitClient::synchronousMove(const QString &workingDirectory, bool GitClient::synchronousMove(const QString &workingDirectory,
@@ -1132,17 +1117,11 @@ bool GitClient::synchronousMove(const QString &workingDirectory,
const QString &to) const QString &to)
{ {
QByteArray outputText; QByteArray outputText;
QByteArray errorText;
QStringList arguments; QStringList arguments;
arguments << QLatin1String("mv"); arguments << QLatin1String("mv");
arguments << (from); arguments << (from);
arguments << (to); arguments << (to);
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText); return vcsFullySynchronousExec(workingDirectory, arguments, &outputText);
if (!rc) {
msgCannotRun(tr("Cannot move from \"%1\" to \"%2\": %3")
.arg(from, to, commandOutputFromLocal8Bit(errorText)), 0);
}
return rc;
} }
bool GitClient::synchronousReset(const QString &workingDirectory, bool GitClient::synchronousReset(const QString &workingDirectory,
@@ -1157,7 +1136,7 @@ bool GitClient::synchronousReset(const QString &workingDirectory,
arguments << QLatin1String("--hard"); arguments << QLatin1String("--hard");
else else
arguments << QLatin1String(HEAD) << QLatin1String("--") << files; arguments << QLatin1String(HEAD) << QLatin1String("--") << files;
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText); const bool rc = vcsFullySynchronousExec(workingDirectory, arguments, &outputText, &errorText);
const QString output = commandOutputFromLocal8Bit(outputText); const QString output = commandOutputFromLocal8Bit(outputText);
VcsOutputWindow::append(output); VcsOutputWindow::append(output);
// Note that git exits with 1 even if the operation is successful // Note that git exits with 1 even if the operation is successful
@@ -1182,17 +1161,12 @@ bool GitClient::synchronousReset(const QString &workingDirectory,
bool GitClient::synchronousInit(const QString &workingDirectory) bool GitClient::synchronousInit(const QString &workingDirectory)
{ {
QByteArray outputText; QByteArray outputText;
QByteArray errorText;
const QStringList arguments(QLatin1String("init")); const QStringList arguments(QLatin1String("init"));
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText); const bool rc = vcsFullySynchronousExec(workingDirectory, arguments, &outputText);
// '[Re]Initialized...' // '[Re]Initialized...'
VcsOutputWindow::append(commandOutputFromLocal8Bit(outputText)); VcsOutputWindow::append(commandOutputFromLocal8Bit(outputText));
if (!rc) { if (rc)
VcsOutputWindow::appendError(commandOutputFromLocal8Bit(errorText)); resetCachedVcsInfo(workingDirectory);
} else {
// TODO: Turn this into a VcsBaseClient and use resetCachedVcsInfo(...)
VcsManager::resetVersionControlForDirectory(workingDirectory);
}
return rc; return rc;
} }
@@ -1217,7 +1191,7 @@ bool GitClient::synchronousCheckoutFiles(const QString &workingDirectory,
if (revertStaging) if (revertStaging)
arguments << revision; arguments << revision;
arguments << QLatin1String("--") << files; arguments << QLatin1String("--") << files;
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText, const bool rc = vcsFullySynchronousExec(workingDirectory, arguments, &outputText, &errorText,
VcsBasePlugin::ExpectRepoChanges); VcsBasePlugin::ExpectRepoChanges);
if (!rc) { if (!rc) {
const QString fileArg = files.join(QLatin1String(", ")); const QString fileArg = files.join(QLatin1String(", "));
@@ -1284,9 +1258,9 @@ bool GitClient::synchronousRevListCmd(const QString &workingDirectory, const QSt
QStringList args(QLatin1String("rev-list")); QStringList args(QLatin1String("rev-list"));
args << QLatin1String(noColorOption) << arguments; args << QLatin1String(noColorOption) << arguments;
const bool rc = fullySynchronousGit(workingDirectory, args, &outputTextData, &errorText, const bool rc = vcsFullySynchronousExec(workingDirectory, args, &outputTextData, &errorText,
VcsBasePlugin::SuppressCommandLogging); VcsBasePlugin::SuppressCommandLogging);
if (!rc) { if (rc) {
msgCannotRun(args, workingDirectory, errorText, errorMessage); msgCannotRun(args, workingDirectory, errorText, errorMessage);
return false; return false;
} }
@@ -1353,7 +1327,7 @@ QString GitClient::synchronousCurrentLocalBranch(const QString &workingDirectory
QByteArray outputTextData; QByteArray outputTextData;
QStringList arguments; QStringList arguments;
arguments << QLatin1String("symbolic-ref") << QLatin1String(HEAD); arguments << QLatin1String("symbolic-ref") << QLatin1String(HEAD);
if (fullySynchronousGit(workingDirectory, arguments, &outputTextData, 0, if (vcsFullySynchronousExec(workingDirectory, arguments, &outputTextData, 0,
VcsBasePlugin::SuppressCommandLogging)) { VcsBasePlugin::SuppressCommandLogging)) {
QString branch = commandOutputFromLocal8Bit(outputTextData.trimmed()); QString branch = commandOutputFromLocal8Bit(outputTextData.trimmed());
const QString refsHeadsPrefix = QLatin1String("refs/heads/"); const QString refsHeadsPrefix = QLatin1String("refs/heads/");
@@ -1373,7 +1347,7 @@ bool GitClient::synchronousHeadRefs(const QString &workingDirectory, QStringList
<< QLatin1String("--abbrev=10") << QLatin1String("--dereference"); << QLatin1String("--abbrev=10") << QLatin1String("--dereference");
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, args, &outputText, &errorText, const bool rc = vcsFullySynchronousExec(workingDirectory, args, &outputText, &errorText,
VcsBasePlugin::SuppressCommandLogging); VcsBasePlugin::SuppressCommandLogging);
if (!rc) { if (!rc) {
msgCannotRun(args, workingDirectory, errorText, errorMessage); msgCannotRun(args, workingDirectory, errorText, errorMessage);
@@ -1431,7 +1405,7 @@ QString GitClient::synchronousTopic(const QString &workingDirectory) const
QByteArray output; QByteArray output;
QStringList arguments; QStringList arguments;
arguments << QLatin1String("describe"); arguments << QLatin1String("describe");
if (fullySynchronousGit(workingDirectory, arguments, &output, 0, VcsBasePlugin::NoOutput)) { if (vcsFullySynchronousExec(workingDirectory, arguments, &output, 0, VcsBasePlugin::NoOutput)) {
const QString describeOutput = commandOutputFromLocal8Bit(output.trimmed()); const QString describeOutput = commandOutputFromLocal8Bit(output.trimmed());
if (!describeOutput.isEmpty()) if (!describeOutput.isEmpty())
return describeOutput; return describeOutput;
@@ -1446,7 +1420,7 @@ bool GitClient::synchronousRevParseCmd(const QString &workingDirectory, const QS
arguments << ref; arguments << ref;
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText, const bool rc = vcsFullySynchronousExec(workingDirectory, arguments, &outputText, &errorText,
VcsBasePlugin::SuppressCommandLogging); VcsBasePlugin::SuppressCommandLogging);
*output = commandOutputFromLocal8Bit(outputText.trimmed()); *output = commandOutputFromLocal8Bit(outputText.trimmed());
if (!rc) if (!rc)
@@ -1471,7 +1445,7 @@ void GitClient::synchronousTagsForCommit(const QString &workingDirectory, const
QByteArray pr; QByteArray pr;
QStringList arguments; QStringList arguments;
arguments << QLatin1String("describe") << QLatin1String("--contains") << revision; arguments << QLatin1String("describe") << QLatin1String("--contains") << revision;
fullySynchronousGit(workingDirectory, arguments, &pr, 0, vcsFullySynchronousExec(workingDirectory, arguments, &pr, 0,
VcsBasePlugin::SuppressCommandLogging); VcsBasePlugin::SuppressCommandLogging);
int tilde = pr.indexOf('~'); int tilde = pr.indexOf('~');
if (tilde != -1) if (tilde != -1)
@@ -1488,7 +1462,7 @@ void GitClient::synchronousTagsForCommit(const QString &workingDirectory, const
arguments.clear(); arguments.clear();
arguments << QLatin1String("describe") << QLatin1String("--tags") arguments << QLatin1String("describe") << QLatin1String("--tags")
<< QLatin1String("--abbrev=0") << p; << QLatin1String("--abbrev=0") << p;
fullySynchronousGit(workingDirectory, arguments, &pf, 0, vcsFullySynchronousExec(workingDirectory, arguments, &pf, 0,
VcsBasePlugin::SuppressCommandLogging); VcsBasePlugin::SuppressCommandLogging);
pf.truncate(pf.lastIndexOf('\n')); pf.truncate(pf.lastIndexOf('\n'));
if (!pf.isEmpty()) { if (!pf.isEmpty()) {
@@ -1523,7 +1497,7 @@ bool GitClient::isRemoteCommit(const QString &workingDirectory, const QString &c
QByteArray outputText; QByteArray outputText;
arguments << QLatin1String("branch") << QLatin1String("-r") arguments << QLatin1String("branch") << QLatin1String("-r")
<< QLatin1String("--contains") << commit; << QLatin1String("--contains") << commit;
fullySynchronousGit(workingDirectory, arguments, &outputText, 0, vcsFullySynchronousExec(workingDirectory, arguments, &outputText, 0,
VcsBasePlugin::SuppressCommandLogging); VcsBasePlugin::SuppressCommandLogging);
return !outputText.isEmpty(); return !outputText.isEmpty();
} }
@@ -1533,7 +1507,7 @@ bool GitClient::isFastForwardMerge(const QString &workingDirectory, const QStrin
QStringList arguments; QStringList arguments;
QByteArray outputText; QByteArray outputText;
arguments << QLatin1String("merge-base") << QLatin1String(HEAD) << branch; arguments << QLatin1String("merge-base") << QLatin1String(HEAD) << branch;
fullySynchronousGit(workingDirectory, arguments, &outputText, 0, vcsFullySynchronousExec(workingDirectory, arguments, &outputText, 0,
VcsBasePlugin::SuppressCommandLogging); VcsBasePlugin::SuppressCommandLogging);
return commandOutputFromLocal8Bit(outputText).trimmed() return commandOutputFromLocal8Bit(outputText).trimmed()
== synchronousTopRevision(workingDirectory); == synchronousTopRevision(workingDirectory);
@@ -1550,7 +1524,7 @@ QString GitClient::synchronousShortDescription(const QString &workingDirectory,
arguments << QLatin1String("log") << QLatin1String(noColorOption) arguments << QLatin1String("log") << QLatin1String(noColorOption)
<< (QLatin1String("--pretty=format:") + format) << (QLatin1String("--pretty=format:") + format)
<< QLatin1String("--max-count=1") << revision; << QLatin1String("--max-count=1") << revision;
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputTextData, &errorText); const bool rc = vcsFullySynchronousExec(workingDirectory, arguments, &outputTextData, &errorText);
if (!rc) { if (!rc) {
VcsOutputWindow::appendSilently(tr("Cannot describe revision \"%1\" in \"%2\": %3") VcsOutputWindow::appendSilently(tr("Cannot describe revision \"%1\" in \"%2\": %3")
.arg(revision, workingDirectory, commandOutputFromLocal8Bit(errorText))); .arg(revision, workingDirectory, commandOutputFromLocal8Bit(errorText)));
@@ -1677,7 +1651,7 @@ bool GitClient::synchronousBranchCmd(const QString &workingDirectory, QStringLis
branchArgs.push_front(QLatin1String("branch")); branchArgs.push_front(QLatin1String("branch"));
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, branchArgs, &outputText, &errorText); const bool rc = vcsFullySynchronousExec(workingDirectory, branchArgs, &outputText, &errorText);
*output = commandOutputFromLocal8Bit(outputText); *output = commandOutputFromLocal8Bit(outputText);
if (!rc) if (!rc)
msgCannotRun(branchArgs, workingDirectory, errorText, errorMessage); msgCannotRun(branchArgs, workingDirectory, errorText, errorMessage);
@@ -1691,7 +1665,7 @@ bool GitClient::synchronousTagCmd(const QString &workingDirectory, QStringList t
tagArgs.push_front(QLatin1String("tag")); tagArgs.push_front(QLatin1String("tag"));
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, tagArgs, &outputText, &errorText); const bool rc = vcsFullySynchronousExec(workingDirectory, tagArgs, &outputText, &errorText);
*output = commandOutputFromLocal8Bit(outputText); *output = commandOutputFromLocal8Bit(outputText);
if (!rc) if (!rc)
msgCannotRun(tagArgs, workingDirectory, errorText, errorMessage); msgCannotRun(tagArgs, workingDirectory, errorText, errorMessage);
@@ -1705,7 +1679,7 @@ bool GitClient::synchronousForEachRefCmd(const QString &workingDirectory, QStrin
args.push_front(QLatin1String("for-each-ref")); args.push_front(QLatin1String("for-each-ref"));
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, args, &outputText, &errorText, const bool rc = vcsFullySynchronousExec(workingDirectory, args, &outputText, &errorText,
VcsBasePlugin::SuppressCommandLogging); VcsBasePlugin::SuppressCommandLogging);
*output = SynchronousProcess::normalizeNewlines(QString::fromUtf8(outputText)); *output = SynchronousProcess::normalizeNewlines(QString::fromUtf8(outputText));
if (!rc) if (!rc)
@@ -1720,7 +1694,7 @@ bool GitClient::synchronousRemoteCmd(const QString &workingDirectory, QStringLis
remoteArgs.push_front(QLatin1String("remote")); remoteArgs.push_front(QLatin1String("remote"));
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
if (!fullySynchronousGit(workingDirectory, remoteArgs, &outputText, &errorText, if (!vcsFullySynchronousExec(workingDirectory, remoteArgs, &outputText, &errorText,
silent ? VcsBasePlugin::SuppressCommandLogging : 0)) { silent ? VcsBasePlugin::SuppressCommandLogging : 0)) {
msgCannotRun(remoteArgs, workingDirectory, errorText, errorMessage); msgCannotRun(remoteArgs, workingDirectory, errorText, errorMessage);
return false; return false;
@@ -1765,7 +1739,7 @@ QStringList GitClient::synchronousSubmoduleStatus(const QString &workingDirector
// get submodule status // get submodule status
arguments << QLatin1String("submodule") << QLatin1String("status"); arguments << QLatin1String("submodule") << QLatin1String("status");
if (!fullySynchronousGit(workingDirectory, arguments, &outputTextData, &errorText)) { if (!vcsFullySynchronousExec(workingDirectory, arguments, &outputTextData, &errorText)) {
msgCannotRun(tr("Cannot retrieve submodule status of \"%1\": %2") msgCannotRun(tr("Cannot retrieve submodule status of \"%1\": %2")
.arg(QDir::toNativeSeparators(workingDirectory), .arg(QDir::toNativeSeparators(workingDirectory),
commandOutputFromLocal8Bit(errorText)), errorMessage); commandOutputFromLocal8Bit(errorText)), errorMessage);
@@ -1842,7 +1816,7 @@ bool GitClient::synchronousShow(const QString &workingDirectory, const QString &
args << QLatin1String(decorateOption) << QLatin1String(noColorOption) << id; args << QLatin1String(decorateOption) << QLatin1String(noColorOption) << id;
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, args, &outputText, &errorText); const bool rc = vcsFullySynchronousExec(workingDirectory, args, &outputText, &errorText);
if (rc) if (rc)
*output = commandOutputFromLocal8Bit(outputText); *output = commandOutputFromLocal8Bit(outputText);
else else
@@ -1857,7 +1831,7 @@ bool GitClient::cleanList(const QString &workingDirectory, const QString &flag,
args << QLatin1String("clean") << QLatin1String("--dry-run") << flag; args << QLatin1String("clean") << QLatin1String("--dry-run") << flag;
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, args, &outputText, &errorText); const bool rc = vcsFullySynchronousExec(workingDirectory, args, &outputText, &errorText);
if (!rc) { if (!rc) {
msgCannotRun(QStringList(QLatin1String("clean")), workingDirectory, msgCannotRun(QStringList(QLatin1String("clean")), workingDirectory,
errorText, errorMessage); errorText, errorMessage);
@@ -1896,12 +1870,14 @@ bool GitClient::synchronousApplyPatch(const QString &workingDirectory,
args << QLatin1String("apply") << QLatin1String("--whitespace=fix") << arguments << file; args << QLatin1String("apply") << QLatin1String("--whitespace=fix") << arguments << file;
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, args, &outputText, &errorText); const bool rc = vcsFullySynchronousExec(workingDirectory, args, &outputText, &errorText);
if (rc) { if (rc) {
if (!errorText.isEmpty()) if (!errorText.isEmpty())
*errorMessage = tr("There were warnings while applying \"%1\" to \"%2\":\n%3").arg(file, workingDirectory, commandOutputFromLocal8Bit(errorText)); *errorMessage = tr("There were warnings while applying \"%1\" to \"%2\":\n%3")
.arg(file, workingDirectory, commandOutputFromLocal8Bit(errorText));
} else { } else {
*errorMessage = tr("Cannot apply patch \"%1\" to \"%2\": %3").arg(file, workingDirectory, commandOutputFromLocal8Bit(errorText)); *errorMessage = tr("Cannot apply patch \"%1\" to \"%2\": %3")
.arg(file, workingDirectory, commandOutputFromLocal8Bit(errorText));
return false; return false;
} }
return true; return true;
@@ -1983,17 +1959,6 @@ SynchronousProcessResponse GitClient::synchronousGit(const QString &workingDirec
flags, outputCodec, processEnvironment()); flags, outputCodec, processEnvironment());
} }
bool GitClient::fullySynchronousGit(const QString &workingDirectory,
const QStringList &gitArguments,
QByteArray *outputText,
QByteArray *errorText,
unsigned flags) const
{
VcsCommand command(vcsBinary(), workingDirectory, processEnvironment());
command.addFlags(flags);
return command.runFullySynchronous(gitArguments, vcsTimeoutS(), outputText, errorText);
}
void GitClient::updateSubmodulesIfNeeded(const QString &workingDirectory, bool prompt) void GitClient::updateSubmodulesIfNeeded(const QString &workingDirectory, bool prompt)
{ {
if (!m_updatedSubmodules.isEmpty() || submoduleList(workingDirectory).isEmpty()) if (!m_updatedSubmodules.isEmpty() || submoduleList(workingDirectory).isEmpty())
@@ -2076,7 +2041,8 @@ GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory, St
statusArgs << QLatin1String("--ignore-submodules=all"); statusArgs << QLatin1String("--ignore-submodules=all");
statusArgs << QLatin1String("--porcelain") << QLatin1String("-b"); statusArgs << QLatin1String("--porcelain") << QLatin1String("-b");
const bool statusRc = fullySynchronousGit(workingDirectory, statusArgs, &outputText, &errorText, const bool statusRc = vcsFullySynchronousExec(workingDirectory, statusArgs,
&outputText, &errorText,
VcsBasePlugin::SuppressCommandLogging); VcsBasePlugin::SuppressCommandLogging);
if (output) if (output)
*output = commandOutputFromLocal8Bit(outputText); *output = commandOutputFromLocal8Bit(outputText);
@@ -2426,7 +2392,7 @@ bool GitClient::readDataFromCommit(const QString &repoDirectory, const QString &
args << QLatin1String("--max-count=1") << QLatin1String("--pretty=format:%h\n%an\n%ae\n%B"); args << QLatin1String("--max-count=1") << QLatin1String("--pretty=format:%h\n%an\n%ae\n%B");
args << commit; args << commit;
QByteArray outputText; QByteArray outputText;
if (!fullySynchronousGit(repoDirectory, args, &outputText, 0, if (!vcsFullySynchronousExec(repoDirectory, args, &outputText, 0,
VcsBasePlugin::SuppressCommandLogging)) { VcsBasePlugin::SuppressCommandLogging)) {
if (errorMessage) if (errorMessage)
*errorMessage = tr("Cannot retrieve last commit data of repository \"%1\".").arg(repoDirectory); *errorMessage = tr("Cannot retrieve last commit data of repository \"%1\".").arg(repoDirectory);
@@ -2674,7 +2640,7 @@ bool GitClient::addAndCommit(const QString &repositoryDirectory,
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
const bool rc = fullySynchronousGit(repositoryDirectory, args, &outputText, &errorText); const bool rc = vcsFullySynchronousExec(repositoryDirectory, args, &outputText, &errorText);
const QString stdErr = commandOutputFromLocal8Bit(errorText); const QString stdErr = commandOutputFromLocal8Bit(errorText);
if (rc) { if (rc) {
VcsOutputWindow::appendMessage(msgCommitted(amendSHA1, commitCount)); VcsOutputWindow::appendMessage(msgCommitted(amendSHA1, commitCount));
@@ -2855,12 +2821,8 @@ void GitClient::synchronousAbortCommand(const QString &workingDir, const QString
QStringList arguments; QStringList arguments;
arguments << abortCommand << QLatin1String("--abort"); arguments << abortCommand << QLatin1String("--abort");
QByteArray stdOut; QByteArray stdOut;
QByteArray stdErr; vcsFullySynchronousExec(workingDir, arguments, &stdOut, 0, VcsBasePlugin::ExpectRepoChanges);
const bool rc = fullySynchronousGit(workingDir, arguments, &stdOut, &stdErr,
VcsBasePlugin::ExpectRepoChanges);
VcsOutputWindow::append(commandOutputFromLocal8Bit(stdOut)); VcsOutputWindow::append(commandOutputFromLocal8Bit(stdOut));
if (!rc)
VcsOutputWindow::appendError(commandOutputFromLocal8Bit(stdErr));
} }
QString GitClient::synchronousTrackingBranch(const QString &workingDirectory, const QString &branch) QString GitClient::synchronousTrackingBranch(const QString &workingDirectory, const QString &branch)
@@ -2884,19 +2846,13 @@ bool GitClient::synchronousSetTrackingBranch(const QString &workingDirectory,
const QString &branch, const QString &tracking) const QString &branch, const QString &tracking)
{ {
QByteArray outputText; QByteArray outputText;
QByteArray errorText;
QStringList arguments; QStringList arguments;
arguments << QLatin1String("branch"); arguments << QLatin1String("branch");
if (gitVersion() >= 0x010800) if (gitVersion() >= 0x010800)
arguments << (QLatin1String("--set-upstream-to=") + tracking) << branch; arguments << (QLatin1String("--set-upstream-to=") + tracking) << branch;
else else
arguments << QLatin1String("--set-upstream") << branch << tracking; arguments << QLatin1String("--set-upstream") << branch << tracking;
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText); return vcsFullySynchronousExec(workingDirectory, arguments, &outputText);
if (!rc) {
msgCannotRun(tr("Cannot set tracking branch: %1")
.arg(commandOutputFromLocal8Bit(errorText)), 0);
}
return rc;
} }
void GitClient::handleMergeConflicts(const QString &workingDir, const QString &commit, void GitClient::handleMergeConflicts(const QString &workingDir, const QString &commit,
@@ -3125,7 +3081,7 @@ bool GitClient::synchronousStashRemove(const QString &workingDirectory,
arguments << QLatin1String("drop") << stash; arguments << QLatin1String("drop") << stash;
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText); const bool rc = vcsFullySynchronousExec(workingDirectory, arguments, &outputText, &errorText);
if (rc) { if (rc) {
const QString output = commandOutputFromLocal8Bit(outputText); const QString output = commandOutputFromLocal8Bit(outputText);
if (!output.isEmpty()) if (!output.isEmpty())
@@ -3145,7 +3101,7 @@ bool GitClient::synchronousStashList(const QString &workingDirectory,
arguments << QLatin1String("list") << QLatin1String(noColorOption); arguments << QLatin1String("list") << QLatin1String(noColorOption);
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText); const bool rc = vcsFullySynchronousExec(workingDirectory, arguments, &outputText, &errorText);
if (!rc) { if (!rc) {
msgCannotRun(arguments, workingDirectory, errorText, errorMessage); msgCannotRun(arguments, workingDirectory, errorText, errorMessage);
return false; return false;
@@ -3169,8 +3125,7 @@ QString GitClient::readConfigValue(const QString &workingDirectory, const QStrin
arguments << QLatin1String("config") << configVar; arguments << QLatin1String("config") << configVar;
QByteArray outputText; QByteArray outputText;
QByteArray errorText; if (!vcsFullySynchronousExec(workingDirectory, arguments, &outputText, 0,
if (!fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText,
VcsBasePlugin::SuppressCommandLogging)) VcsBasePlugin::SuppressCommandLogging))
return QString(); return QString();
if (HostOsInfo::isWindowsHost()) if (HostOsInfo::isWindowsHost())
@@ -3192,7 +3147,7 @@ bool GitClient::cloneRepository(const QString &directory,const QByteArray &url)
QStringList arguments(QLatin1String("remote")); QStringList arguments(QLatin1String("remote"));
arguments << QLatin1String("add") << QLatin1String("origin") << QLatin1String(url); arguments << QLatin1String("add") << QLatin1String("origin") << QLatin1String(url);
if (!fullySynchronousGit(workingDirectory.path(), arguments, 0)) if (!vcsFullySynchronousExec(workingDirectory.path(), arguments, 0))
return false; return false;
arguments.clear(); arguments.clear();
@@ -3206,14 +3161,14 @@ bool GitClient::cloneRepository(const QString &directory,const QByteArray &url)
arguments << QLatin1String("config") arguments << QLatin1String("config")
<< QLatin1String("branch.master.remote") << QLatin1String("branch.master.remote")
<< QLatin1String("origin"); << QLatin1String("origin");
if (!fullySynchronousGit(workingDirectory.path(), arguments, 0)) if (!vcsFullySynchronousExec(workingDirectory.path(), arguments, 0))
return false; return false;
arguments.clear(); arguments.clear();
arguments << QLatin1String("config") arguments << QLatin1String("config")
<< QLatin1String("branch.master.merge") << QLatin1String("branch.master.merge")
<< QLatin1String("refs/heads/master"); << QLatin1String("refs/heads/master");
if (!fullySynchronousGit(workingDirectory.path(), arguments, 0)) if (!vcsFullySynchronousExec(workingDirectory.path(), arguments, 0))
return false; return false;
return true; return true;
@@ -3250,7 +3205,7 @@ unsigned GitClient::synchronousGitVersion(QString *errorMessage) const
// run git --version // run git --version
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
const bool rc = fullySynchronousGit(QString(), QStringList(QLatin1String("--version")), const bool rc = vcsFullySynchronousExec(QString(), QStringList(QLatin1String("--version")),
&outputText, &errorText, &outputText, &errorText,
VcsBasePlugin::SuppressCommandLogging); VcsBasePlugin::SuppressCommandLogging);
if (!rc) { if (!rc) {

View File

@@ -373,13 +373,6 @@ private:
bool useOutputToWindow = false, unsigned additionalFlags = 0, bool useOutputToWindow = false, unsigned additionalFlags = 0,
int editorLineNumber = -1); int editorLineNumber = -1);
// Fully synchronous git execution (QProcess-based).
bool fullySynchronousGit(const QString &workingDirectory,
const QStringList &arguments,
QByteArray *outputText,
QByteArray *errorText = 0,
unsigned flags = 0) const;
// Synchronous git execution using Utils::SynchronousProcess, with // Synchronous git execution using Utils::SynchronousProcess, with
// log windows updating (using VcsBasePlugin::runVcs with flags). // log windows updating (using VcsBasePlugin::runVcs with flags).
inline Utils::SynchronousProcessResponse inline Utils::SynchronousProcessResponse

View File

@@ -386,10 +386,8 @@ bool VcsBaseClient::synchronousPush(const QString &workingDir,
return resp.result == Utils::SynchronousProcessResponse::Finished; return resp.result == Utils::SynchronousProcessResponse::Finished;
} }
bool VcsBaseClient::vcsFullySynchronousExec(const QString &workingDir, bool VcsBaseClientImpl::vcsFullySynchronousExec(const QString &workingDir, const QStringList &args,
const QStringList &args, QByteArray *outputData, QByteArray *errorData,
QByteArray *outputData,
QByteArray *errorData,
unsigned flags) const unsigned flags) const
{ {
QByteArray internalErrorData; QByteArray internalErrorData;

View File

@@ -110,6 +110,11 @@ protected:
virtual void annotateRevisionRequested(const QString &workingDirectory, const QString &file, virtual void annotateRevisionRequested(const QString &workingDirectory, const QString &file,
const QString &change, int line); const QString &change, int line);
// Fully synchronous VCS execution (QProcess-based)
bool vcsFullySynchronousExec(const QString &workingDir, const QStringList &args,
QByteArray *outputData, QByteArray *errorData = 0,
unsigned flags = 0) const;
private: private:
void saveSettings(); void saveSettings();
void commandFinishedGotoLine(QWidget*); void commandFinishedGotoLine(QWidget*);
@@ -220,10 +225,7 @@ protected:
virtual StatusItem parseStatusLine(const QString &line) const = 0; virtual StatusItem parseStatusLine(const QString &line) const = 0;
QString vcsEditorTitle(const QString &vcsCmd, const QString &sourceId) const; QString vcsEditorTitle(const QString &vcsCmd, const QString &sourceId) const;
// Fully synchronous VCS execution (QProcess-based)
bool vcsFullySynchronousExec(const QString &workingDir, const QStringList &args,
QByteArray *outputData, QByteArray *errorData = 0,
unsigned flags = 0) const;
// Synchronous VCS execution using Utils::SynchronousProcess, with // Synchronous VCS execution using Utils::SynchronousProcess, with
// log windows updating (using VcsBasePlugin::runVcs with flags) // log windows updating (using VcsBasePlugin::runVcs with flags)
Utils::SynchronousProcessResponse vcsSynchronousExec(const QString &workingDir, Utils::SynchronousProcessResponse vcsSynchronousExec(const QString &workingDir,