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