From e31426366bfb9ebefde10df13062c5aa76e3eb00 Mon Sep 17 00:00:00 2001 From: Petar Perisin <petar.perisin@gmail.com> Date: Mon, 28 Oct 2013 21:16:44 +0100 Subject: [PATCH] Git: Refactor revParseCmd Change-Id: I5125694ba334e2f3774ed19c64d671d3cb726bf4 Reviewed-by: Orgad Shaneh <orgads@gmail.com> --- src/plugins/git/gitclient.cpp | 41 ++++++++++++++++++----------------- src/plugins/git/gitclient.h | 2 ++ 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 80eddec1e0d..7da73057909 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -981,11 +981,9 @@ QString GitClient::findGitDirForRepository(const QString &repositoryDir) const QString &res = repoDirCache[repositoryDir]; if (!res.isEmpty()) return res; - QByteArray outputText; - QStringList arguments; - arguments << QLatin1String("rev-parse") << QLatin1String("--git-dir"); - fullySynchronousGit(repositoryDir, arguments, &outputText, 0, false); - res = QString::fromLocal8Bit(outputText.trimmed()); + + synchronousRevParseCmd(repositoryDir, QLatin1String("--git-dir"), &res); + if (!QDir(res).isAbsolute()) res.prepend(repositoryDir + QLatin1Char('/')); return res; @@ -1953,25 +1951,28 @@ QString GitClient::synchronousTopic(const QString &workingDirectory) return data.topic = remoteBranch.isEmpty() ? tr("Detached HEAD") : remoteBranch; } +bool GitClient::synchronousRevParseCmd(const QString &workingDirectory, const QString &ref, + QString *output, QString *errorMessage) const +{ + QStringList arguments(QLatin1String("rev-parse")); + arguments << ref; + QByteArray outputText; + QByteArray errorText; + const bool rc = fullySynchronousGit(workingDirectory, arguments, &outputText, &errorText, + VcsBasePlugin::SuppressCommandLogging); + *output = commandOutputFromLocal8Bit(outputText.trimmed()); + if (!rc) + msgCannotRun(arguments, workingDirectory, errorText, errorMessage); + + return rc; +} + // Retrieve head revision QString GitClient::synchronousTopRevision(const QString &workingDirectory, QString *errorMessageIn) { - QByteArray outputTextData; - QByteArray errorText; - QStringList arguments; - QString errorMessage; - // get revision - arguments << QLatin1String("rev-parse") << QLatin1String(HEAD); - if (!fullySynchronousGit(workingDirectory, arguments, &outputTextData, &errorText, - VcsBasePlugin::SuppressCommandLogging)) { - errorMessage = tr("Cannot retrieve top revision of \"%1\": %2") - .arg(QDir::toNativeSeparators(workingDirectory), commandOutputFromLocal8Bit(errorText)); + QString revision; + if (!synchronousRevParseCmd(workingDirectory, QLatin1String(HEAD), &revision, errorMessageIn)) return QString(); - } - QString revision = commandOutputFromLocal8Bit(outputTextData); - revision.remove(QLatin1Char('\n')); - if (revision.isEmpty() && !errorMessage.isEmpty()) - msgCannotRun(errorMessage, errorMessageIn); return revision; } diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index f21a1486728..cb9d433422b 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -236,6 +236,8 @@ public: bool synchronousHeadRefs(const QString &workingDirectory, QStringList *output, QString *errorMessage = 0); QString synchronousTopic(const QString &workingDirectory); + bool synchronousRevParseCmd(const QString &workingDirectory, const QString &ref, + QString *output, QString *errorMessage = 0) const; QString synchronousTopRevision(const QString &workingDirectory, QString *errorMessage = 0); void synchronousTagsForCommit(const QString &workingDirectory, const QString &revision, QString &precedes, QString &follows); -- GitLab