summaryrefslogtreecommitdiff
path: root/src/plugins/git/gitclient.cpp
diff options
context:
space:
mode:
authorPetar Perisin <petar.perisin@gmail.com>2013-10-05 21:01:58 +0300
committerOrgad Shaneh <orgads@gmail.com>2013-10-16 10:34:42 +0200
commit7da9ad56c81d59ed28840f2164f77049be229fa4 (patch)
tree4ac28f3bb61732eb59a638faa265f39a1cc15b70 /src/plugins/git/gitclient.cpp
parentc24361901cdd3f539fb5a510045763a58b2daa08 (diff)
downloadqt-creator-7da9ad56c81d59ed28840f2164f77049be229fa4.tar.gz
Git: Standardize error message handling
Change-Id: I5574abf0acf7ed430f5f7f3b89ebcbddb31f3016 Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
Diffstat (limited to 'src/plugins/git/gitclient.cpp')
-rw-r--r--src/plugins/git/gitclient.cpp270
1 files changed, 99 insertions, 171 deletions
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index eab02e8c05..f74f4d94f1 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -913,6 +913,25 @@ static inline QStringList statusArguments()
<< QLatin1String("status");
}
+static inline void msgCannotRun(const QString &message, QString *errorMessage)
+{
+ if (errorMessage)
+ *errorMessage = message;
+ else
+ outputWindow()->appendError(message);
+}
+
+static inline void msgCannotRun(const QStringList &args, const QString &workingDirectory,
+ const QByteArray &error, QString *errorMessage)
+{
+ const QString message = GitClient::tr("Cannot run \"%1 %2\" in \"%2\": %3")
+ .arg(QLatin1String("git ") + args.join(QLatin1String(" ")),
+ QDir::toNativeSeparators(workingDirectory),
+ commandOutputFromLocal8Bit(error));
+
+ msgCannotRun(message, errorMessage);
+}
+
// ---------------- GitClient
const char *GitClient::stashNamePrefix = "stash@{";
@@ -1535,13 +1554,7 @@ bool GitClient::synchronousCheckout(const QString &workingDirectory,
const QString output = commandOutputFromLocal8Bit(outputText);
outputWindow()->append(output);
if (!rc) {
- const QString stdErr = commandOutputFromLocal8Bit(errorText);
- //: Meaning of the arguments: %1: Branch, %2: Repository, %3: Error message
- const QString msg = tr("Cannot checkout \"%1\" of \"%2\": %3").arg(ref, workingDirectory, stdErr);
- if (errorMessage)
- *errorMessage = msg;
- else
- outputWindow()->appendError(msg);
+ msgCannotRun(arguments, workingDirectory, errorText, errorMessage);
return false;
}
updateSubmodulesIfNeeded(workingDirectory, true);
@@ -1585,13 +1598,9 @@ bool GitClient::synchronousLog(const QString &workingDirectory, const QStringLis
else
*output = commandOutputFromLocal8Bit(outputText);
} else {
- const QString errorMessage = tr("Cannot obtain log of \"%1\": %2").
- arg(QDir::toNativeSeparators(workingDirectory),
- commandOutputFromLocal8Bit(errorText));
- if (errorMessageIn)
- *errorMessageIn = errorMessage;
- else
- outputWindow()->appendError(errorMessage);
+ msgCannotRun(tr("Cannot obtain log of \"%1\": %2")
+ .arg(QDir::toNativeSeparators(workingDirectory),
+ commandOutputFromLocal8Bit(errorText)), errorMessageIn);
}
return rc;
}
@@ -1610,10 +1619,9 @@ bool GitClient::synchronousAdd(const QString &workingDirectory,
arguments.append(files);
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText);
if (!rc) {
- const QString errorMessage = tr("Cannot add %n file(s) to \"%1\": %2", 0, files.size()).
- arg(QDir::toNativeSeparators(workingDirectory),
- commandOutputFromLocal8Bit(errorText));
- outputWindow()->appendError(errorMessage);
+ msgCannotRun(tr("Cannot add %n file(s) to \"%1\": %2", 0, files.size())
+ .arg(QDir::toNativeSeparators(workingDirectory),
+ commandOutputFromLocal8Bit(errorText)), 0);
}
return rc;
}
@@ -1631,9 +1639,9 @@ bool GitClient::synchronousDelete(const QString &workingDirectory,
arguments.append(files);
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText);
if (!rc) {
- const QString errorMessage = tr("Cannot remove %n file(s) from \"%1\": %2", 0, files.size()).
- arg(QDir::toNativeSeparators(workingDirectory), commandOutputFromLocal8Bit(errorText));
- outputWindow()->appendError(errorMessage);
+ msgCannotRun(tr("Cannot remove %n file(s) from \"%1\": %2", 0, files.size())
+ .arg(QDir::toNativeSeparators(workingDirectory),
+ commandOutputFromLocal8Bit(errorText)), 0);
}
return rc;
}
@@ -1650,9 +1658,8 @@ bool GitClient::synchronousMove(const QString &workingDirectory,
arguments << (to);
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText);
if (!rc) {
- const QString errorMessage = tr("Cannot move from \"%1\" to \"%2\": %3").
- arg(from, to, commandOutputFromLocal8Bit(errorText));
- outputWindow()->appendError(errorMessage);
+ msgCannotRun(tr("Cannot move from \"%1\" to \"%2\": %3")
+ .arg(from, to, commandOutputFromLocal8Bit(errorText)), 0);
}
return rc;
}
@@ -1676,16 +1683,15 @@ bool GitClient::synchronousReset(const QString &workingDirectory,
// Assume real failure if the output does not contain "foo.cpp modified"
// or "Unstaged changes after reset" (git 1.7.0).
if (!rc && (!output.contains(QLatin1String("modified"))
- && !output.contains(QLatin1String("Unstaged changes after reset")))) {
- const QString stdErr = commandOutputFromLocal8Bit(errorText);
- const QString msg = files.isEmpty() ?
- tr("Cannot reset \"%1\": %2").arg(QDir::toNativeSeparators(workingDirectory), stdErr) :
- tr("Cannot reset %n file(s) in \"%1\": %2", 0, files.size()).
- arg(QDir::toNativeSeparators(workingDirectory), stdErr);
- if (errorMessage)
- *errorMessage = msg;
- else
- outputWindow()->appendError(msg);
+ && !output.contains(QLatin1String("Unstaged changes after reset")))) {
+ if (files.isEmpty()) {
+ msgCannotRun(arguments, workingDirectory, errorText, errorMessage);
+ } else {
+ msgCannotRun(tr("Cannot reset %n file(s) in \"%1\": %2", 0, files.size())
+ .arg(QDir::toNativeSeparators(workingDirectory),
+ commandOutputFromLocal8Bit(errorText)),
+ errorMessage);
+ }
return false;
}
return true;
@@ -1736,12 +1742,10 @@ bool GitClient::synchronousCheckoutFiles(const QString &workingDirectory,
const QString fileArg = files.join(QLatin1String(", "));
//: Meaning of the arguments: %1: revision, %2: files, %3: repository,
//: %4: Error message
- const QString msg = tr("Cannot checkout \"%1\" of %2 in \"%3\": %4").
- arg(revision, fileArg, workingDirectory, commandOutputFromLocal8Bit(errorText));
- if (errorMessage)
- *errorMessage = msg;
- else
- outputWindow()->appendError(msg);
+ msgCannotRun(tr("Cannot checkout \"%1\" of %2 in \"%3\": %4")
+ .arg(revision, fileArg, workingDirectory,
+ commandOutputFromLocal8Bit(errorText)),
+ errorMessage);
return false;
}
return true;
@@ -1791,12 +1795,7 @@ bool GitClient::synchronousRevListCmd(const QString &workingDirectory, const QSt
const bool rc = fullySynchronousGit(workingDirectory, args, &outputTextData, &errorText);
if (!rc) {
- if (errorMessage)
- *errorMessage = commandOutputFromLocal8Bit(errorText);
- else
- outputWindow()->appendError(tr("Cannot execute \"git %1\" in \"%2\": %3").arg(
- args.join(QLatin1String(" ")), workingDirectory,
- commandOutputFromLocal8Bit(errorText)));
+ msgCannotRun(args, workingDirectory, errorText, errorMessage);
return false;
}
*output = commandOutputFromLocal8Bit(outputTextData);
@@ -1874,12 +1873,6 @@ QString GitClient::synchronousCurrentLocalBranch(const QString &workingDirectory
return QString();
}
-static inline QString msgCannotRun(const QString &command, const QString &workingDirectory, const QString &why)
-{
- return GitClient::tr("Cannot run \"%1\" in \"%2\": %3")
- .arg(command, QDir::toNativeSeparators(workingDirectory), why);
-}
-
bool GitClient::synchronousHeadRefs(const QString &workingDirectory, QStringList *output,
QString *errorMessage)
{
@@ -1890,12 +1883,7 @@ bool GitClient::synchronousHeadRefs(const QString &workingDirectory, QStringList
QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, args, &outputText, &errorText);
if (!rc) {
- QString message = msgCannotRun(QLatin1String("git show-ref --head"), workingDirectory, commandOutputFromLocal8Bit(errorText));
-
- if (errorMessage)
- *errorMessage = message;
- else
- outputWindow()->appendError(message);
+ msgCannotRun(args, workingDirectory, errorText, errorMessage);
return false;
}
@@ -1982,12 +1970,9 @@ QString GitClient::synchronousTopRevision(const QString &workingDirectory, QStri
}
QString revision = commandOutputFromLocal8Bit(outputTextData);
revision.remove(QLatin1Char('\n'));
- if (revision.isEmpty() && !errorMessage.isEmpty()) {
- if (errorMessageIn)
- *errorMessageIn = errorMessage;
- else
- outputWindow()->appendError(errorMessage);
- }
+ if (revision.isEmpty() && !errorMessage.isEmpty())
+ msgCannotRun(errorMessage, errorMessageIn);
+
return revision;
}
@@ -2152,17 +2137,10 @@ bool GitClient::executeSynchronousStash(const QString &workingDirectory,
arguments << QLatin1String("save") << message;
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText,
VcsBasePlugin::ExpectRepoChanges);
- if (!rc) {
- const QString msg = tr("Cannot stash in \"%1\": %2").
- arg(QDir::toNativeSeparators(workingDirectory),
- commandOutputFromLocal8Bit(errorText));
- if (errorMessage)
- *errorMessage = msg;
- else
- outputWindow()->appendError(msg);
- return false;
- }
- return true;
+ if (!rc)
+ msgCannotRun(arguments, workingDirectory, errorText, errorMessage);
+
+ return rc;
}
// Resolve a stash name from message
@@ -2186,11 +2164,8 @@ bool GitClient::stashNameFromMessage(const QString &workingDirectory,
}
}
//: Look-up of a stash via its descriptive message failed.
- const QString msg = tr("Cannot resolve stash message \"%1\" in \"%2\".").arg(message, workingDirectory);
- if (errorMessage)
- *errorMessage = msg;
- else
- outputWindow()->appendError(msg);
+ msgCannotRun(tr("Cannot resolve stash message \"%1\" in \"%2\".")
+ .arg(message, workingDirectory), errorMessage);
return false;
}
@@ -2202,26 +2177,24 @@ bool GitClient::synchronousBranchCmd(const QString &workingDirectory, QStringLis
QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, branchArgs, &outputText, &errorText);
*output = commandOutputFromLocal8Bit(outputText);
- if (!rc && errorMessage) {
- *errorMessage = msgCannotRun(QLatin1String("git branch"), workingDirectory,
- commandOutputFromLocal8Bit(errorText));
- }
+ if (!rc)
+ msgCannotRun(branchArgs, workingDirectory, errorText, errorMessage);
+
return rc;
}
-bool GitClient::synchronousTagCmd(const QString &workingDirectory, QStringList tagArgs, QString *output, QString *errorMessage)
+bool GitClient::synchronousTagCmd(const QString &workingDirectory, QStringList tagArgs,
+ QString *output, QString *errorMessage)
{
tagArgs.push_front(QLatin1String("tag"));
QByteArray outputText;
QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, tagArgs, &outputText, &errorText);
*output = commandOutputFromLocal8Bit(outputText);
- if (!rc) {
- *errorMessage = msgCannotRun(QLatin1String("git tag"), workingDirectory,
- commandOutputFromLocal8Bit(errorText));
- return false;
- }
- return true;
+ if (!rc)
+ msgCannotRun(tagArgs, workingDirectory, errorText, errorMessage);
+
+ return rc;
}
bool GitClient::synchronousForEachRefCmd(const QString &workingDirectory, QStringList args,
@@ -2232,17 +2205,10 @@ bool GitClient::synchronousForEachRefCmd(const QString &workingDirectory, QStrin
QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, args, &outputText, &errorText);
*output = commandOutputFromLocal8Bit(outputText);
- if (!rc) {
- QString error = msgCannotRun(QLatin1String("git for-each-ref"), workingDirectory,
- commandOutputFromLocal8Bit(errorText));
- if (errorMessage)
- *errorMessage = error;
- else
- outputWindow()->appendError(error);
+ if (!rc)
+ msgCannotRun(args, workingDirectory, errorText, errorMessage);
- return false;
- }
- return true;
+ return rc;
}
bool GitClient::synchronousRemoteCmd(const QString &workingDirectory, QStringList remoteArgs,
@@ -2253,7 +2219,7 @@ bool GitClient::synchronousRemoteCmd(const QString &workingDirectory, QStringLis
QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, remoteArgs, &outputText, &errorText);
if (!rc) {
- *errorMessage = msgCannotRun(QLatin1String("git remote"), workingDirectory, commandOutputFromLocal8Bit(errorText));
+ msgCannotRun(remoteArgs, workingDirectory, errorText, errorMessage);
return false;
}
*output = commandOutputFromLocal8Bit(outputText);
@@ -2268,10 +2234,7 @@ QMap<QString,QString> GitClient::synchronousRemotesList(const QString &workingDi
QString error;
QStringList args(QLatin1String("-v"));
if (!synchronousRemoteCmd(workingDirectory, args, &output, &error)) {
- if (errorMessage)
- *errorMessage = error;
- else
- outputWindow()->appendError(error);
+ msgCannotRun(error, errorMessage);
return result;
}
QStringList remotes = output.split(QLatin1String("\n"));
@@ -2299,15 +2262,9 @@ QStringList GitClient::synchronousSubmoduleStatus(const QString &workingDirector
// get submodule status
arguments << QLatin1String("submodule") << QLatin1String("status");
if (!fullySynchronousGit(workingDirectory, arguments, &outputTextData, &errorText)) {
- QString error = tr("Cannot retrieve submodule status of \"%1\": %2")
- .arg(QDir::toNativeSeparators(workingDirectory),
- commandOutputFromLocal8Bit(errorText));
-
- if (errorMessage)
- *errorMessage = error;
- else
- outputWindow()->appendError(error);
-
+ msgCannotRun(tr("Cannot retrieve submodule status of \"%1\": %2")
+ .arg(QDir::toNativeSeparators(workingDirectory),
+ commandOutputFromLocal8Bit(errorText)), errorMessage);
return QStringList();
}
return commandOutputLinesFromLocal8Bit(outputTextData);
@@ -2382,12 +2339,11 @@ bool GitClient::synchronousShow(const QString &workingDirectory, const QString &
QByteArray outputText;
QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, args, &outputText, &errorText);
- if (!rc) {
- *errorMessage = msgCannotRun(QLatin1String("git show"), workingDirectory, commandOutputFromLocal8Bit(errorText));
- return false;
- }
- *output = commandOutputFromLocal8Bit(outputText);
- return true;
+ if (rc)
+ *output = commandOutputFromLocal8Bit(outputText);
+ else
+ msgCannotRun(QStringList(QLatin1String("show")), workingDirectory, errorText, errorMessage);
+ return rc;
}
// Retrieve list of files to be cleaned
@@ -2399,7 +2355,8 @@ bool GitClient::cleanList(const QString &workingDirectory, const QString &flag,
QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, args, &outputText, &errorText);
if (!rc) {
- *errorMessage = msgCannotRun(QLatin1String("git clean"), workingDirectory, commandOutputFromLocal8Bit(errorText));
+ msgCannotRun(QStringList(QLatin1String("clean")), workingDirectory,
+ errorText, errorMessage);
return false;
}
// Filter files that git would remove
@@ -3376,9 +3333,8 @@ bool GitClient::synchronousSetTrackingBranch(const QString &workingDirectory,
arguments << QLatin1String("--set-upstream") << branch << tracking;
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText);
if (!rc) {
- const QString errorMessage = tr("Cannot set tracking branch: %1")
- .arg(commandOutputFromLocal8Bit(errorText));
- outputWindow()->appendError(errorMessage);
+ msgCannotRun(tr("Cannot set tracking branch: %1")
+ .arg(commandOutputFromLocal8Bit(errorText)), 0);
}
return rc;
}
@@ -3585,24 +3541,14 @@ bool GitClient::synchronousStashRestore(const QString &workingDirectory,
QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText,
VcsBasePlugin::ExpectRepoChanges);
- if (!rc) {
- const QString stdErr = commandOutputFromLocal8Bit(errorText);
- const QString nativeWorkingDir = QDir::toNativeSeparators(workingDirectory);
- const QString msg = branch.isEmpty() ?
- tr("Cannot restore stash \"%1\": %2").
- arg(nativeWorkingDir, stdErr) :
- tr("Cannot restore stash \"%1\" to branch \"%2\": %3").
- arg(nativeWorkingDir, branch, stdErr);
- if (errorMessage)
- *errorMessage = msg;
- else
- outputWindow()->appendError(msg);
- return false;
+ if (rc) {
+ const QString output = commandOutputFromLocal8Bit(outputText);
+ if (!output.isEmpty())
+ outputWindow()->append(output);
+ } else {
+ msgCannotRun(arguments, workingDirectory, errorText, errorMessage);
}
- QString output = commandOutputFromLocal8Bit(outputText);
- if (!output.isEmpty())
- outputWindow()->append(output);
- return true;
+ return rc;
}
bool GitClient::synchronousStashRemove(const QString &workingDirectory,
@@ -3617,24 +3563,14 @@ bool GitClient::synchronousStashRemove(const QString &workingDirectory,
QByteArray outputText;
QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText);
- if (!rc) {
- const QString stdErr = commandOutputFromLocal8Bit(errorText);
- const QString nativeWorkingDir = QDir::toNativeSeparators(workingDirectory);
- const QString msg = stash.isEmpty() ?
- tr("Cannot remove stashes of \"%1\": %2").
- arg(nativeWorkingDir, stdErr) :
- tr("Cannot remove stash \"%1\" of \"%2\": %3").
- arg(stash, nativeWorkingDir, stdErr);
- if (errorMessage)
- *errorMessage = msg;
- else
- outputWindow()->appendError(msg);
- return false;
+ if (rc) {
+ const QString output = commandOutputFromLocal8Bit(outputText);
+ if (!output.isEmpty())
+ outputWindow()->append(output);
+ } else {
+ msgCannotRun(arguments, workingDirectory, errorText, errorMessage);
}
- QString output = commandOutputFromLocal8Bit(outputText);
- if (!output.isEmpty())
- outputWindow()->append(output);
- return true;
+ return rc;
}
void GitClient::branchList(const QString &workingDirectory)
@@ -3662,13 +3598,7 @@ bool GitClient::synchronousStashList(const QString &workingDirectory,
QByteArray errorText;
const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText);
if (!rc) {
- const QString msg = tr("Cannot retrieve stash list of \"%1\": %2").
- arg(QDir::toNativeSeparators(workingDirectory),
- commandOutputFromLocal8Bit(errorText));
- if (errorMessage)
- *errorMessage = msg;
- else
- outputWindow()->appendError(msg);
+ msgCannotRun(arguments, workingDirectory, errorText, errorMessage);
return false;
}
Stash stash;
@@ -3794,11 +3724,9 @@ unsigned GitClient::synchronousGitVersion(QString *errorMessage) const
&outputText, &errorText,
VcsBasePlugin::SuppressCommandLogging);
if (!rc) {
- const QString msg = tr("Cannot determine git version: %1").arg(commandOutputFromLocal8Bit(errorText));
- if (errorMessage)
- *errorMessage = msg;
- else
- outputWindow()->appendError(msg);
+ msgCannotRun(tr("Cannot determine Git version: %1")
+ .arg(commandOutputFromLocal8Bit(errorText)),
+ errorMessage);
return 0;
}
// cut 'git version 1.6.5.1.sha'