From a471389e02a5ee593e030a4a1580caf6aca3229b Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Wed, 26 Dec 2012 21:07:12 +0200 Subject: [PATCH] Git: Ignore submodules for status except for commit Submodules are not stashed and are not considered a conflict after revert Change-Id: I97a0792db615054622b9b67a7f6b58b5aee05273 Reviewed-by: Tobias Hunger --- src/plugins/git/gitclient.cpp | 15 +++++++++------ src/plugins/git/gitclient.h | 9 ++++++++- src/plugins/git/stashdialog.cpp | 2 +- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 40f6b356b0d..5573a533a48 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -1268,7 +1268,7 @@ QString GitClient::synchronousStash(const QString &workingDirectory, const QStri bool success = false; // Check for changes and stash QString errorMessage; - switch (gitStatus(workingDirectory, false, 0, &errorMessage)) { + switch (gitStatus(workingDirectory, StatusMode(NoUntracked | NoSubmodules), 0, &errorMessage)) { case StatusChanged: { message = creatorStashMessage(messageKeyword); do { @@ -1575,7 +1575,8 @@ GitClient::StashResult GitClient::ensureStash(const QString &workingDirectory) GitClient::StashResult GitClient::ensureStash(const QString &workingDirectory, QString *errorMessage) { QString statusOutput; - switch (gitStatus(workingDirectory, false, &statusOutput, errorMessage)) { + switch (gitStatus(workingDirectory, StatusMode(NoUntracked | NoSubmodules), + &statusOutput, errorMessage)) { case StatusChanged: break; case StatusUnchanged: @@ -1616,7 +1617,7 @@ static inline QString trimFileSpecification(QString fileSpec) return fileSpec; } -GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory, bool untracked, +GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory, StatusMode mode, QString *output, QString *errorMessage) { // Run 'status'. Note that git returns exitcode 1 if there are no added files. @@ -1624,8 +1625,10 @@ GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory, bo QByteArray errorText; QStringList statusArgs(QLatin1String("status")); - if (!untracked) + if (mode & NoUntracked) statusArgs << QLatin1String("--untracked-files=no"); + if (mode & NoSubmodules) + statusArgs << QLatin1String("--ignore-submodules=all"); statusArgs << QLatin1String("-s") << QLatin1String("-b"); const bool statusRc = fullySynchronousGit(workingDirectory, statusArgs, &outputText, &errorText); @@ -1789,7 +1792,7 @@ bool GitClient::getCommitData(const QString &workingDirectory, // Run status. Note that it has exitcode 1 if there are no added files. QString output; - const StatusResult status = gitStatus(repoDirectory, true, &output, errorMessage); + const StatusResult status = gitStatus(repoDirectory, ShowAll, &output, errorMessage); switch (status) { case StatusChanged: break; @@ -2000,7 +2003,7 @@ GitClient::RevertResult GitClient::revertI(QStringList files, // Check for changes QString output; - switch (gitStatus(repoDirectory, false, &output, errorMessage)) { + switch (gitStatus(repoDirectory, StatusMode(NoUntracked | NoSubmodules), &output, errorMessage)) { case StatusChanged: break; case StatusUnchanged: diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 7795858246d..afc6f4968bd 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -70,6 +70,13 @@ class CommitData; struct GitSubmitEditorPanelData; class Stash; +enum StatusMode +{ + ShowAll = 0, + NoUntracked = 1, + NoSubmodules = 2 +}; + class GitClient : public QObject { Q_OBJECT @@ -210,7 +217,7 @@ public: enum StatusResult { StatusChanged, StatusUnchanged, StatusFailed }; StatusResult gitStatus(const QString &workingDirectory, - bool untracked = false, + StatusMode mode, QString *output = 0, QString *errorMessage = 0); diff --git a/src/plugins/git/stashdialog.cpp b/src/plugins/git/stashdialog.cpp index d3a018ba431..69c582e8705 100644 --- a/src/plugins/git/stashdialog.cpp +++ b/src/plugins/git/stashdialog.cpp @@ -288,7 +288,7 @@ bool StashDialog::promptForRestore(QString *stash, { const QString stashIn = *stash; bool modifiedPromptShown = false; - switch (gitClient()->gitStatus(m_repository, false, 0, errorMessage)) { + switch (gitClient()->gitStatus(m_repository, StatusMode(NoUntracked | NoSubmodules), 0, errorMessage)) { case GitClient::StatusFailed: return false; case GitClient::StatusChanged: {