From 20ee66f86ad0b75880d92642f4a502e98bd25328 Mon Sep 17 00:00:00 2001 From: Robert Loehning <robert.loehning@nokia.com> Date: Mon, 15 Mar 2010 20:50:13 +0100 Subject: [PATCH] Fixed parsing of git status so that one can check out a branch when not on a branch before. --- src/plugins/git/gitclient.cpp | 15 ++++++++++++--- src/plugins/git/gitclient.h | 3 ++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index b7ad77b1d53..1646f366a9a 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -1152,7 +1152,8 @@ static inline QString trimFileSpecification(QString fileSpec) GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory, bool untracked, QString *output, - QString *errorMessage) + QString *errorMessage, + bool *onBranch) { // Run 'status'. Note that git returns exitcode 1 if there are no added files. QByteArray outputText; @@ -1165,8 +1166,11 @@ GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory, GitCommand::removeColorCodes(&outputText); if (output) *output = commandOutputFromLocal8Bit(outputText); + const bool branchKnown = outputText.contains(kBranchIndicatorC); + if (onBranch) + *onBranch = branchKnown; // Is it something really fatal? - if (!statusRc && !outputText.contains(kBranchIndicatorC)) { + if (!statusRc && !branchKnown && !outputText.contains("# Not currently on any branch.")) { if (errorMessage) { const QString error = commandOutputFromLocal8Bit(errorText); *errorMessage = tr("Unable to obtain the status: %1").arg(error); @@ -1214,9 +1218,14 @@ bool GitClient::getCommitData(const QString &workingDirectory, } // Run status. Note that it has exitcode 1 if there are no added files. + bool onBranch; QString output; - switch (gitStatus(repoDirectory, true, &output, errorMessage)) { + switch (gitStatus(repoDirectory, true, &output, errorMessage, &onBranch)) { case StatusChanged: + if (!onBranch) { + *errorMessage = tr("You did not checkout a branch."); + return false; + } break; case StatusUnchanged: *errorMessage = msgNoChangedFiles(); diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 42b2e1bb1c8..1d7d7570bda 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -191,7 +191,8 @@ public: StatusResult gitStatus(const QString &workingDirectory, bool untracked = false, QString *output = 0, - QString *errorMessage = 0); + QString *errorMessage = 0, + bool *onBranch = 0); GitSettings settings() const; void setSettings(const GitSettings &s); -- GitLab