aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/vcsbase/vcsbaseclient.cpp
diff options
context:
space:
mode:
authorTobias Hunger <[email protected]>2016-07-05 10:34:41 +0200
committerTobias Hunger <[email protected]>2016-07-15 14:16:29 +0000
commitca7a924a068b23815e3915b1f2887eed0e38ef7f (patch)
treeec66142140b89602411ed8b92da41d9d2754c621 /src/plugins/vcsbase/vcsbaseclient.cpp
parent5efd82468b0802fd0f6993b8a430acc09c6293a9 (diff)
VCS: VcsBaseClient::vcsFullySynchronousExec returns a SynchronousProcessResponse
Change-Id: Ic155da2ed1fd36f1f91327ac90f34a5cad3c210e Reviewed-by: Tobias Hunger <[email protected]>
Diffstat (limited to 'src/plugins/vcsbase/vcsbaseclient.cpp')
-rw-r--r--src/plugins/vcsbase/vcsbaseclient.cpp54
1 files changed, 30 insertions, 24 deletions
diff --git a/src/plugins/vcsbase/vcsbaseclient.cpp b/src/plugins/vcsbase/vcsbaseclient.cpp
index 2a0b8f87f1c..e33c854464c 100644
--- a/src/plugins/vcsbase/vcsbaseclient.cpp
+++ b/src/plugins/vcsbase/vcsbaseclient.cpp
@@ -155,8 +155,13 @@ QString VcsBaseClientImpl::commandOutputFromLocal8Bit(const QByteArray &a)
QStringList VcsBaseClientImpl::commandOutputLinesFromLocal8Bit(const QByteArray &a)
{
- QString output = commandOutputFromLocal8Bit(a);
+ return splitLines(commandOutputFromLocal8Bit(a));
+}
+
+QStringList VcsBaseClientImpl::splitLines(const QString &s)
+{
const QChar newLine = QLatin1Char('\n');
+ QString output = s;
if (output.endsWith(newLine))
output.truncate(output.size() - 1);
if (output.isEmpty())
@@ -164,6 +169,13 @@ QStringList VcsBaseClientImpl::commandOutputLinesFromLocal8Bit(const QByteArray
return output.split(newLine);
}
+QString VcsBaseClientImpl::stripLastNewline(const QString &in)
+{
+ if (in.endsWith('\n'))
+ return in.left(in.count() - 1);
+ return in;
+}
+
void VcsBaseClientImpl::resetCachedVcsInfo(const QString &workingDir)
{
Core::VcsManager::resetVersionControlForDirectory(workingDir);
@@ -182,18 +194,15 @@ void VcsBaseClientImpl::annotateRevisionRequested(const QString &workingDirector
annotate(workingDirectory, file, changeCopy, line);
}
-bool VcsBaseClientImpl::vcsFullySynchronousExec(const QString &workingDir, const QStringList &args,
- QByteArray *outputData, QByteArray *errorData,
- unsigned flags) const
+Utils::SynchronousProcessResponse
+VcsBaseClientImpl::vcsFullySynchronousExec(const QString &workingDir, const QStringList &args,
+ unsigned flags, int timeoutS, QTextCodec *codec) const
{
- QByteArray internalErrorData;
- QScopedPointer<VcsCommand> command(createCommand(workingDir));
- command->addFlags(flags);
- bool result = command->runFullySynchronous(vcsBinary(), args, vcsTimeoutS(), outputData,
- errorData ? errorData : &internalErrorData);
- if (!internalErrorData.isEmpty() && !(flags & VcsCommand::SuppressStdErr))
- VcsOutputWindow::appendError(commandOutputFromLocal8Bit(internalErrorData));
- return result;
+ VcsCommand command(workingDir, processEnvironment());
+ command.addFlags(flags);
+ if (codec)
+ command.setCodec(codec);
+ return command.runCommand(vcsBinary(), args, (timeoutS > 0) ? timeoutS : vcsTimeoutS());
}
VcsCommand *VcsBaseClientImpl::vcsExec(const QString &workingDirectory, const QStringList &arguments,
@@ -300,10 +309,10 @@ bool VcsBaseClient::synchronousCreateRepository(const QString &workingDirectory,
{
QStringList args(vcsCommandString(CreateRepositoryCommand));
args << extraOptions;
- QByteArray outputData;
- if (!vcsFullySynchronousExec(workingDirectory, args, &outputData))
+ Utils::SynchronousProcessResponse result = vcsFullySynchronousExec(workingDirectory, args);
+ if (result.result != Utils::SynchronousProcessResponse::Finished)
return false;
- VcsOutputWindow::append(commandOutputFromLocal8Bit(outputData));
+ VcsOutputWindow::append(result.stdOut());
resetCachedVcsInfo(workingDirectory);
@@ -318,10 +327,10 @@ bool VcsBaseClient::synchronousClone(const QString &workingDir,
QStringList args;
args << vcsCommandString(CloneCommand)
<< extraOptions << srcLocation << dstLocation;
- QByteArray stdOut;
- const bool cloneOk = vcsFullySynchronousExec(workingDir, args, &stdOut);
+
+ Utils::SynchronousProcessResponse result = vcsFullySynchronousExec(workingDir, args);
resetCachedVcsInfo(workingDir);
- return cloneOk;
+ return result.result == Utils::SynchronousProcessResponse::Finished;
}
bool VcsBaseClient::synchronousAdd(const QString &workingDir, const QString &filename,
@@ -329,8 +338,7 @@ bool VcsBaseClient::synchronousAdd(const QString &workingDir, const QString &fil
{
QStringList args;
args << vcsCommandString(AddCommand) << extraOptions << filename;
- QByteArray stdOut;
- return vcsFullySynchronousExec(workingDir, args, &stdOut);
+ return vcsFullySynchronousExec(workingDir, args).result == Utils::SynchronousProcessResponse::Finished;
}
bool VcsBaseClient::synchronousRemove(const QString &workingDir, const QString &filename,
@@ -338,8 +346,7 @@ bool VcsBaseClient::synchronousRemove(const QString &workingDir, const QString &
{
QStringList args;
args << vcsCommandString(RemoveCommand) << extraOptions << filename;
- QByteArray stdOut;
- return vcsFullySynchronousExec(workingDir, args, &stdOut);
+ return vcsFullySynchronousExec(workingDir, args).result == Utils::SynchronousProcessResponse::Finished;
}
bool VcsBaseClient::synchronousMove(const QString &workingDir,
@@ -348,8 +355,7 @@ bool VcsBaseClient::synchronousMove(const QString &workingDir,
{
QStringList args;
args << vcsCommandString(MoveCommand) << extraOptions << from << to;
- QByteArray stdOut;
- return vcsFullySynchronousExec(workingDir, args, &stdOut);
+ return vcsFullySynchronousExec(workingDir, args).result == Utils::SynchronousProcessResponse::Finished;
}
bool VcsBaseClient::synchronousPull(const QString &workingDir,