diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index b7ad77b1d532a7185295576a0393fd5a17613294..1646f366a9a5eff1250cb204f96b9bd67e62480a 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 42b2e1bb1c885d7615657321cca5903262c24a89..1d7d7570bda022c1a1d2ab827d3b1cfe64ea5405 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);